Lista a puntatori salva solo gli ultimi due dati

di il
4 risposte

Lista a puntatori salva solo gli ultimi due dati

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;


    }



}



4 Risposte

  • Re: Lista a puntatori salva solo gli ultimi due dati

    Direi che nel main dovrebbe esserci
    
        inizio=creanodo(inizio,0,2,'+');
        inserisci(inizio,1,8,'+');
        inserisci(inizio,3,4,'+');
        inserisci(inizio,5,6,'+');
        inserisci(inizio,1,9,'+');
    
  • Re: Lista a puntatori salva solo gli ultimi due dati

    Grazie...adesso funziona...quindi inserisci lo devo fare viid mi conviene....secondo te è abbastanza ottimizzato il mio programma?? oramai mi fido solo del tuo parere xd visto che sei sempre tu che mi consigli bene!
  • Re: Lista a puntatori salva solo gli ultimi due dati

    Void mi correggo il mio computer da le fastidiosissime correzioni automatiche !!
  • Re: Lista a puntatori salva solo gli ultimi due dati

    Non ho avuto il tempo per controllare tutto il tuo codice (e qualunque codice è migliorabile).

    Una cosa che potresti modificare è quella di far funzionare la inserisci anche per il primo nodo al posto di fare

    inizio=creanodo(inizio,0,2,'+');

    La funzione creanodo dovrebbe essere utilizzata solamente dalla inserisci.

    Ovviamente dovrai fare delle modifiche.
Devi accedere o registrarti per scrivere nel forum
4 risposte