Salve ragazzi sto gestendo una lista a puntatori a più cambi 2 double, uno char e ovviamente il next.
Questo programma deve poter prendere il primo cambi operarlo con il secondo eseguendo l'operazione che il char gli dice di fare. Mi spiego meglio es. i campi della struttura sono 5 3 +
allora si deve fare la somma di 5 e 3
i campi sono 5 3 -
si sottraggono e così via ecco tutto il mio codice il problema è nell'inserimento credo va a sovrascrivere i vecchi valori salvandomi solamente gli ultimi due inseriti.
#include <stdio.h>
#include <stdlib.h>
struct nodo
{
double dato1,dato2;
char operazione;
struct nodo *next;
};
struct nodo * creanodo(struct nodo *inizio,double dato1,double dato2,char operazione);
struct nodo *inserisci(struct nodo *inizio,double dato1,double dato2,char operazion);
double componi_numeri(struct nodo*);
void stampa(struct nodo *inizio);
int main(int argc, const char * argv[])
{
struct nodo *inizio=NULL;
inizio=creanodo(inizio,0,2,'+');
inizio=inserisci(inizio,1,8,'+');
inizio=inserisci(inizio,3,4,'+');
inizio= inserisci(inizio,5,6,'+');
inizio=inserisci(inizio,1,9,'+');
stampa(inizio);
return 0;
}
struct nodo *creanodo(struct nodo *inizio,double dato1,double dato2,char operazion)
{
struct nodo *app;
app=(struct nodo *)malloc(sizeof(struct nodo));
app->next=NULL;
app->dato1=dato1;
app->dato2=dato2;
app->operazione=operazion;
return app;
}
struct nodo *inserisci(struct nodo *inizio,double dato1,double dato2,char operazion)
{
struct nodo *app = NULL;
struct nodo *copia;
copia=inizio;
app=creanodo(app,dato1,dato2,operazion);
while(copia->next!=NULL)
copia=copia->next;
copia->next=app;
return copia;
}
double componi_numeri(struct nodo*inizio)
{
char operatore;
operatore=inizio->operazione;
switch(operatore)
{
case '+':
return inizio->dato1+inizio->dato2;
break;
case '-':
return inizio->dato1-inizio->dato2;
break;
case '*':
return inizio->dato1*inizio->dato2;
break;
case '/':
return inizio->dato1/inizio->dato2;
break;
}
return -1;
}
void stampa(struct nodo *inizio)
{
if(inizio==NULL)
return ;
//else
while(inizio!=NULL)
{
printf("%g\n",componi_numeri(inizio));
inizio=inizio->next;
}
}