Ciao a tutti avrei un problema da sottoporvi ecco la traccia:
Leggere n e costruire una lista di n numeri casuali compresi tra 1 e 9. Stampare la lista. Costruire una seconda lista in cui ogni elemento x della prima lista sia ripetuto x volte. Stampare la seconda lista.
Esempio. Sia n=5 e supponiamo che la prima lista sia la seguente:
4--2--1--5--7--NULL
Allora viene generata la seguente lista:
4--4--4--4--2--2--1--5--5--5--5--5--7--7--7--7--7--7--7--NULL
IMPORTANTE: Organizzare il programma in funzioni (una per generare la prima lista, una per costruire la seconda, una per stampare). Non utilizzare array o liste ausiliarie, non introdurre variabili globali.
Sono in alto mare sulla costruzione della seconda lista. Grazie per l' aiuto.
Qui sotto posto quello che sono riuscito a fare:
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
void concatena(struct nodo *a, struct nodo *b);
float medialista(struct nodo *p);
struct nodo *crealista();
void printlista(struct nodo *p);
struct nodo {
int dato;
struct nodo *next;
};
main()
{
struct nodo *u, *v;
u = crealista();
printlista (u);
v = crealista();
printlista(v);
if (medialista(u) > medialista(v)) {
concatena(u, v);
printlista(u);
}
else {
concatena(v, u);
printlista(v);
}
system ("pause");
return(0);
}
float medialista(struct nodo *p) {
int somma = 0, n = 0;
while (p != NULL) {
somma = somma + p->dato;
n++;
p = p->next;
}
return((float)somma/n);
}
void concatena(struct nodo *a, struct nodo *b) {
struct nodo *p;
p = a;
while (p->next != NULL) {
p = p->next;
}
p->next = b;
return;
}
struct nodo *crealista()
{
struct nodo *p, *start, *last;
int i, n, x;
start = NULL;
srand (time (NULL));
printf("quanti nodi ha la lista ? ");
scanf("%d", &n);
for (i=0; i<n; i++){
p = (struct nodo *) malloc (sizeof (struct nodo));
if (i == 0)
start = p;
if (i != 0)
last->next = p;
p->dato = rand()%10;
p->next = NULL;
last = p;
}
printf ("\n\n");
return(start);
}
void printlista(struct nodo *p)
{
while (p != NULL) {
printf("%d --> ", p->dato);
p = p->next;
}
printf("NULL\n\n\n");
}
NB questo programma che è simile svolge questo: Aggancio di due liste
Letti in input n e m, costruire due liste di n ed m numeri interi casuali compresi tra 0 e 9 e stamparle. Agganciare la lista la cui media dei valori sia minore in coda a quella con la media dei valori maggiore. Stampare la lista.