Accoppiamenti..

di il
20 risposte

20 Risposte - Pagina 2

  • Re: Accoppiamenti..

    Ho provato, ora da errore core dump 

    #include<stdio.h>
    #include<time.h>
    #include<stdlib.h>
    
    typedef struct nodo
    {
      int valore;
      struct nodo *next;
    }nodoP;
    //struttura 
    
    
    //prototipi
    nodoP *inserisci_testa(nodoP *testa,int dato);
    int conta_nodi(nodoP *testa); 
    void stampa_testa (nodoP *testa);
    void stampa_accoppiamenti (nodoP *accoppiamenti);
     nodoP *accoppiamenti(nodoP *testa1,nodoP *testa2,nodoP *testa3);
    
    int main()
    {
      srand(time(NULL));
      
      nodoP *testa1=NULL;
      nodoP *testa2=NULL;
      nodoP *testa3=NULL;  
      nodoP *accoppiamento=NULL;
      testa1=malloc(sizeof(nodoP));
      testa2=malloc(sizeof(nodoP));
      testa3=malloc(sizeof(nodoP));
      accoppiamento=malloc(sizeof(nodoP));
      int num_nodi1;
      int num_nodi2;
      int num_nodi3;
      int i;
      int dato;
        
      printf("inserisci numero dei nodi della prima lista: ");
      scanf("%d",&num_nodi1);
      printf("inserisci numero dei nodi della seconda lista: ");
      scanf("%d",&num_nodi2);
      printf("inserisci numero dei nodi della terza lista: ");
      scanf("%d",&num_nodi3);
       
        for(i=0;i<num_nodi1;i++)
        {
          dato=rand()%100;
          testa1=inserisci_testa(testa1, dato);
      }
       for(i=0;i<num_nodi2;i++)
        {
          dato=rand()%100;
          testa2=inserisci_testa(testa2, dato);
      }
       for(i=0;i<num_nodi3;i++)
        {
          dato=rand()%100;
          testa3=inserisci_testa(testa3, dato);
      }
    accoppiamento=accoppiamenti(testa1,testa2,testa3);
        num_nodi1=conta_nodi(testa1);
        num_nodi2=conta_nodi(testa2);
        num_nodi3=conta_nodi(testa3);
    
    
        if(conta_nodi(testa1)<conta_nodi(testa2) && conta_nodi(testa1)<conta_nodi(testa3)) 
      {
        printf("la prima lista è la minore \n");
      } 
         
      else if(conta_nodi(testa2)<conta_nodi(testa1) && conta_nodi(testa2)<conta_nodi(testa3)) 
      {
        printf("la seconda lista è la minore \n");
      }  
      else
      {
        printf("la terza lista è la minore \n");
      }  
    
    
    stampa_testa(testa1);
    stampa_testa(testa2);
    stampa_testa(testa3);
    stampa_accoppiamenti(accoppiamento);
    }
    
    
    
    
    
    
    
    //funzioni
    nodoP *inserisci_testa(nodoP *testa, int dato)
    {
      nodoP *p=NULL;
      p=malloc(sizeof(nodoP));
      p->valore=dato;
      p->next=testa;
      testa=p;
      return testa;
    }
    
    int conta_nodi(nodoP *testa)
    {
      int num_nodi=0;
      nodoP *p=testa;
      while(p!=NULL)
      {
        num_nodi=num_nodi+1;
        p=p->next;
      }
      return num_nodi;
    }
    
    void stampa_accoppiamenti (nodoP *accoppiamenti) {
      printf("valori degli accoppiamenti: \n");
    nodoP *p=accoppiamenti;
     while (p->next!=NULL) {
     printf ("%d\n",p->valore);
     p=p->next;}
    }
    
    
    void stampa_testa (nodoP *testa) {
     printf("valori della lista: \n");
     nodoP *p=testa;
     while (p->next!=NULL) {
     printf ("%d\n",p->valore);
     p=p->next;}
    }
     
    nodoP *accoppiamenti(nodoP *testa1,nodoP *testa2,nodoP *testa3)
    {
       nodoP *accoppiamenti;
       
       nodoP *p1=testa1;
       while(p1 != NULL)
       {
            nodoP *p2=testa2;
            while(p2 != NULL)
            {
                nodoP *p3=testa3;
                while(p3 != NULL)
                {
                    accoppiamenti = inserisci_testa(accoppiamenti, testa1->valore);
                    accoppiamenti = inserisci_testa(accoppiamenti, testa2->valore);
                    accoppiamenti = inserisci_testa(accoppiamenti, testa3->valore);
                    p3 = p3->next;
                }
                p2 = p2->next;
                
            } //while(p2 != NULL)
            
           p1 = p1->next;
       } //while(p1 != NULL)
       
       return accoppiamenti;
    }
  • Re: Accoppiamenti..

    La variabile “accoppiamenti” ha lo stesso nome della funzione (ho corretto nel post precedente). Prova a cambiarle nome. 

  • Re: Accoppiamenti..

    Ora provo e ti dico

  • Re: Accoppiamenti..

    19/11/2022 - Alexv ha scritto:


    La variabile “accoppiamenti” ha lo stesso nome della funzione (ho corretto nel post precedente). Prova a cambiarle nome. 

    continua a darmi problemi di segmentazione

  • Re: Accoppiamenti..

    Appena posso lo provo anch'io. 

  • Re: Accoppiamenti..

    Allora, ho controllato un po' e aggiustato, adesso funziona.

    Le 3 malloc all'inizio del main non servono, se non ad aggiungere un inutile nodo vuoto.

    Ho anche aggiustato la funzione stampa_testa con while (p!=NULL).

    Nella funzione “accoppiamenti” avevo sbagliato io, visto che passavo sempre le teste alla funzione “inserisci_testa”, anziché passarle i puntatori p.

    #include<stdio.h>
    #include<time.h>
    #include<stdlib.h>
    
    typedef struct nodo
    {
      int valore;
      struct nodo *next;
    }nodoP;
    //struttura 
    
    
    //prototipi
    nodoP *inserisci_testa(nodoP *testa,int dato);
    int conta_nodi(nodoP *testa); 
    void stampa_testa (nodoP *testa);
    void stampa_accoppiamenti (nodoP *accoppiamenti);
     nodoP *accoppiamenti(nodoP *testa1,nodoP *testa2,nodoP *testa3);
    
    int main()
    {
      srand(time(NULL));
      
      nodoP *testa1=NULL;
      nodoP *testa2=NULL;
      nodoP *testa3=NULL;  
      nodoP *accoppiamento=NULL;
      int num_nodi1;
      int num_nodi2;
      int num_nodi3;
      int i;
      int dato;
        
      printf("inserisci numero dei nodi della prima lista: ");
      scanf("%d",&num_nodi1);
      printf("inserisci numero dei nodi della seconda lista: ");
      scanf("%d",&num_nodi2);
      printf("inserisci numero dei nodi della terza lista: ");
      scanf("%d",&num_nodi3);
      
        for(i=0;i<num_nodi1;i++)
        {
          dato=rand()%100;
          testa1=inserisci_testa(testa1, dato);
      }
       for(i=0;i<num_nodi2;i++)
        {
          dato=rand()%100;
          testa2=inserisci_testa(testa2, dato);
      }
       for(i=0;i<num_nodi3;i++)
        {
          dato=rand()%100;
          testa3=inserisci_testa(testa3, dato);
      }
      
    accoppiamento=accoppiamenti(testa1,testa2,testa3);
        num_nodi1=conta_nodi(testa1);
        num_nodi2=conta_nodi(testa2);
        num_nodi3=conta_nodi(testa3);
    
    
        if(conta_nodi(testa1)<conta_nodi(testa2) && conta_nodi(testa1)<conta_nodi(testa3)) 
      {
        printf("la prima lista è la minore \n");
      } 
         
      else if(conta_nodi(testa2)<conta_nodi(testa1) && conta_nodi(testa2)<conta_nodi(testa3)) 
      {
        printf("la seconda lista è la minore \n");
      }  
      else
      {
        printf("la terza lista è la minore \n");
      }  
    
    stampa_testa(testa1);
    stampa_testa(testa2);
    stampa_testa(testa3);
    printf("\n\n");
    stampa_testa(accoppiamento);
    }
    
    //funzioni
    nodoP *inserisci_testa(nodoP *testa, int dato)
    {
      nodoP *p=NULL;
      p=malloc(sizeof(nodoP));
      p->valore=dato;
      p->next=testa;
      testa=p;
      return testa;
    }
    
    int conta_nodi(nodoP *testa)
    {
      int num_nodi=0;
      nodoP *p=testa;
      while(p!=NULL)
      {
        num_nodi=num_nodi+1;
        p=p->next;
      }
      return num_nodi;
    }
    
    void stampa_accoppiamenti (nodoP *accoppiamenti) {
      printf("valori degli accoppiamenti: \n");
    nodoP *p=accoppiamenti;
     while (p->next!=NULL) {
     printf ("%d\n",p->valore);
     p=p->next;}
    }
    
    
    void stampa_testa (nodoP *testa) {
     printf("valori della lista: \n");
     nodoP *p=testa;
     while (p!=NULL) {
     printf ("%d\n",p->valore);
     p=p->next;}
    }
     
    nodoP *accoppiamenti(nodoP *testa1,nodoP *testa2,nodoP *testa3)
    {
       nodoP *accopp;
       
       nodoP *p1=testa1;
       while(p1 != NULL)
       {
            nodoP *p2=testa2;
            while(p2 != NULL)
            {
                nodoP *p3=testa3;
                while(p3 != NULL)
                {
                    accopp = inserisci_testa(accopp, p1->valore);
                    accopp = inserisci_testa(accopp, p2->valore);
                    accopp = inserisci_testa(accopp, p3->valore);
                    p3 = p3->next;
                }
                p2 = p2->next;
                
            } //while(p2 != NULL)
            
           p1 = p1->next;
       } //while(p1 != NULL)
       
       return accopp;
    }

    Tieni sempre conto del fatto che la testa è l'ultimo inserito.

    Come avrai notato, non ho usato la funzione stampa_accoppiamenti, visto che è identica a stampa_testa.

Devi accedere o registrarti per scrivere nel forum
20 risposte