Somma interi di 2 liste e visualizza il risultato in altra

di il
2 risposte

Somma interi di 2 liste e visualizza il risultato in altra

Rieccomi ancora qua!!!

Stavolta ho bisogno di voi per il seguente listato. In pratica inserisco manualmente interi in due liste e ne faccio la somma termine a termine, visualizzando il risultato in una terza lista.
All'atto della compilazione mi viene il seguente avviso:

in function main
[Linker error] undefined reference to `somma_liste'
e quindi mi esce senza eseguire il 'codice'


Mi servirebbe una mano ad inquadrare il tutto, può anche essere che non riesca a veder l'errore dato che il mio inconscio bypassa il vero problema!


/*accetta in ingresso una sequenza di interi e li memorizza
in una lista. Il numero di interi che compongono la sequenza
 è richiesto all'utente. La lista creata viene visualizzata*/
 
 #include<stdio.h>
 #include<stdlib.h>
 #include<malloc.h>
 
 /*struttura degli elementi della lista*/
 
 struct elemento{
        int inf;
        struct elemento *pun;
        };
        
        struct elemento *crea_lista();
        void visualizza_lista(struct elemento *);
        struct elemento *somma_liste(struct elemento *,struct elemento *);
        
   main()
 
 {
      struct elemento *punt_lista1,*punt_lista2,*punt_lista3;    /*puntatore alla testa della lista*/
      printf("\n PRIMA LISTA \n");
      punt_lista1=crea_lista();       /*chiamata funzione crea lista1*/
      
      printf("\n SECONDA LISTA \n");
      punt_lista2=crea_lista();      /*chiamata funzione crea lista2*/
      
      visualizza_lista(punt_lista1);  /*chiamata funzione visualizza lista1*/
      visualizza_lista(punt_lista2);  /*chiamata funzione visualizza lista2*/
      
                                                       /*INVOCAZIONE DELLA FUNZIONE PER LA SOMMA DELLE 2 LISTE*/
      punt_lista3=somma_liste(punt_lista1,punt_lista2);
      
      printf("\n TERZA LISTA \n");
      visualizza_lista(punt_lista3);  /*chiamata funzione visualizza lista3*/
         
      
      system("pause");
}

/*funzione crea lista, restituisce il puntatore alla testa*/

struct elemento *crea_lista(void)
{
       struct elemento *p,*paus;
       struct elemento x;
       
       printf ("\nInserisci un'informazione (0 per fine lista) : ");
       scanf("%d",&x.inf);
       
       if(x.inf==0)
       p=NULL;
       else {
            p=(struct elemento *)malloc(sizeof(struct elemento)); /*creo 1' elemento*/ 
            p->inf=x.inf;
            paus=p;
            
            while(x.inf!=0) {
                            printf ("\nInserisci un'informazione (0 per fine lista) : ");
                            scanf("%d",&x.inf);
                            if(x.inf!=0) {
                                         /*creazione elementi successsivi*/
                                         paus->pun = (struct elemento *)malloc(sizeof(struct elemento));
                                         paus=paus->pun;                  /*attualizzazione di paus*/
                                         paus->inf=x.inf;       /*inserimento dell'inf nell'elemento*/
                                         }
                                         else
                                            paus->pun=NULL;    /*marca di fine lista*/
                            }
                }
                return(p);
                }
                                         

       
/*somma gli elementi corrispondenti di 2 liste e inserisce il risultato in una terza lista*/

struct elemento *somme_liste(struct elemento *p1,struct elemento *p2)
{
       struct elemento *p3,*p3aus;
       p3=NULL;
       
       if(p1!=NULL && p2!=NULL){
                   p3=(struct elemento *)malloc(sizeof(struct elemento)); 
                   
                   /* crea il primo elemento della lista_somma*/
       
                   p3->inf= p1->inf + p2->inf ; 
                   p3aus=p3;                      /*p3aus punta 3 lista*/
                   p1=p1->pun;                    /*scorrimento prima lista*/
                   p2=p2->pun;                    /*scorrimento seconda lista*/
                   
/*creazione degli elementi successivi*/

                 for(;p1!=NULL && p2!=NULL;) {
                               p3aus->pun=(struct elemento *)malloc(sizeof(struct elemento));
                               p3aus=p3aus->pun;                /*scorrimento 3 lista*/
                               p3aus->inf = p1->inf + p2->inf;  /* somma*/
                               p1=p1->pun;               /* scorrimento 1 lista*/
                                                      
                               p2=p2->pun;             /*scorrimento 2 lista*/
                                             }
                               p3aus->pun = NULL; /* marca di fine 3 lista*/
                              }
                               return(p3);
                 }
                               
/*funzione per la visualizzazione della lista,
 il parametro in ingresso è il puntatore alla testa */
 
 void visualizza_lista(struct elemento *p)
 {
      printf("\npunt_lista----> ");
      
      /*ciclo di scansione della lista*/
      
      while(p!=NULL) {
                     printf("%d",p->inf); /*visualizza il campo informazioni*/
                     printf("---->");
                     p=p->pun;             /* scorri di un elemento in avanti*/
                     }
                     printf("NULL\n\n");
      }

2 Risposte

Devi accedere o registrarti per scrivere nel forum
2 risposte