Visualizzazione dei risultati da 1 a 2 su 2

Discussione: [C] Problema liste

  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2011
    Messaggi
    4

    [C] Problema liste

    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);
    }

  2. #2
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    Ciao,
    beccato l'errore!
    Era nella funzione printListI. La versione corretta è questa:

    codice:
    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(t->lista_divisori);
            printf("\n");
        }
    }

    Invece tu avevi scritto

    codice:
    printListD(p->lista_divisori);

    cioè una "p" al posto di una "t".


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.