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