Ho un problema con questo programma. Genero 10 numeri interi pseudo-casuali e per ognuno calcolo per quali numeri interi nell'intervallo [2,10] è divisibile. Voglio inserire i numeri generati casualmente in una lista i cui nodi contengono un puntatore ad un'altra lista che contiene i divisori di quel nodo.
Il problema è che inserisce per tutti i numeri gli stessi divisori del primo numero generato.
Qualcuno può aiutarmi a scovare l'errore?
codice:#include <stdio.h>#include <stdlib.h> #include <time.h> struct divisore { int div; struct divisore *next; }; struct numero { int n; struct numero *next; struct divisore *lista_divisori; }; void printListI(struct numero *p); void printListD(struct divisore *p); struct numero * insertTail(struct numero * head,struct numero * n); struct numero * nuovoNumero(int num); struct divisore * inserisciDivisore(struct divisore * head, struct divisore * n); struct divisore * nuovoDivisore(int divis); int main() { srand(time(NULL)); struct numero *head = NULL; struct numero *newNumb = NULL; struct divisore *divis = NULL; int num, i, j; for(i=0; i<10; ++i){ num = 1 + rand()%99; newNumb = nuovoNumero(num); for(j=2; j<=10; ++j) { if((newNumb->n % j) == 0){ divis = nuovoDivisore(j); newNumb->lista_divisori = inserisciDivisore(newNumb->lista_divisori, divis); } } head = insertTail(head, newNumb); } printListI(head); printf("\n"); return 0; } struct numero * nuovoNumero(int num) { struct numero *nuovo = malloc(sizeof(struct numero)); nuovo->n = num; nuovo->next = NULL; nuovo->lista_divisori = NULL; return nuovo; } struct divisore * nuovoDivisore(int divis) { struct divisore *nuovo = malloc(sizeof(struct divisore)); nuovo->div = divis; nuovo->next = NULL; return nuovo; } struct divisore * inserisciDivisore(struct divisore * head, struct divisore * n){ if(head==NULL) return n; struct divisore * t=head; while(t->next!=NULL) t=t->next; t->next=n; return head; } struct numero * insertTail(struct numero * head, struct numero * n){ if(head==NULL) return n; struct numero * t=head; while(t->next!=NULL) t=t->next; t->next=n; return head; } void printListI(struct numero *p) { struct numero *t = p; for(;t!=NULL; t = t->next) { printf("%3d DIVISORI nell'intervallo [2,10]: ", t->n); printListD(p->lista_divisori); printf("\n"); } } void printListD(struct divisore *head) { struct divisore *t = head; for(;t!=NULL; t = t->next) printf("%d ", t->div); }


Rispondi quotando
