PDA

Visualizza la versione completa : [C] Ritorno funzione float


Gauss92
31-08-2012, 13:23
Ciao a tutti !
Devo scrivere mediante l'uso delle liste una funzione che "valorizzi" la merce presente in magazzino. In pratica la funzione ricevuto l'elenco dei prodotti e il tipo di prodotto (classificato da una lettera, t nel mio caso) deve restituire il prodotto del numero dei componenti per il prezzo. Nel fare varie verifiche però ho notato che all'interno della funzione stessa i valori calcolati sono esatti mentre il valore restituito al main è errato. La funzione che ho scritto è questa :


float valorizza_magazzino(TList list, char t)
{ float v;
if (list == NULL)
return 0.0;
if (list->info.sat.tipologia == t)
{
v = (list->info.sat.prezzo*list->info.sat.numero_componenti)+ valorizza_magazzino(list->link, t);
printf ("vediamo %f\n", v);
return v;
}
else
{
v = valorizza_magazzino(list->link, t);
printf ("vediamo else %f\n", v);
return v;
}
}

Qualcuno può aiutarmi a trovare eventuali errori ?

Alex'87
31-08-2012, 13:30
Nel fare varie verifiche però ho notato che all'interno della funzione stessa i valori calcolati sono esatti mentre il valore restituito al main è errato. Errato in che senso?
Nella funzione ti stampa 0.5 e nel main ti stampa 23.23136?
Nel main come lo stampi il valore ottenuto?


edit

non c'entra col tuo problema me ne approfitto per darti un semplice consiglio per migliorare la leggibilità del codice.

Una funzione dovrebbe avere un solo punto di uscita (un singolo return). Tu nella tua nei hai, senza alcun motivo, ben tre.

Lo potresti riscrivere in questo modo ad esempio:


float valorizza_magazzino(TList list, char t) {
float v;

if (list == NULL)
v = 0f;
if (list->info.sat.tipologia == t) {
v = ...
} else {
v = ...
}

return v;
}

Variabile dichiarata all'inizio, modificata durante l'esecuzione della funzione e restituita alla fine. In questo modo è più chiaro il flusso ;)

my 2 cents

Gauss92
31-08-2012, 13:33
Esatto !
PS nel codice riportato sopra mi sono dimenticato di inizializzare v a 0 ma anche cosi il codice non va. Tutto ciò che riguarda questa funzione nel main è questo :


fflush(stdin);
do{
printf("Inserire la tipologia di cui effettuare la valorizzazione [E/M/C] \n");
scanf("%c", &t);
}while(t!='E' && t!='M' && t!='C');
valorizzazione=valorizza_magazzino(list,t);
printf("Il valore residuo di tutti i pezzi presenti in magazzino è : %f\n", valorizzazione);

Alex'87
31-08-2012, 13:56
Mi mostri un esempio di output completo del programma?

ps: ho aggiornato il post precedente ;)

Gauss92
31-08-2012, 13:58
Originariamente inviato da Alex'87
Mi mostri un esempio di output completo del programma?

Ehm, in che senso ? :D devo postare il progetto ? o basta il main ?

Alex'87
31-08-2012, 16:16
Originariamente inviato da Gauss92
Ehm, in che senso ? :D devo postare il progetto ? o basta il main ? L'output del programma, quello che ti viene stampato sul terminale durante l'esecuzione...

Gauss92
01-09-2012, 12:06
Allora, ho inserito un pezzo di una tipologia con prezzo=15 e quantità 2. La funzione mi stampa questo :


Inserire tipologia: E
vediamo 30.000000
Il valore residuo di tutti i pezzi presenti in magazzino è 1106247680.000000000
Premere un tasto per continuare . . .

:dhò:

Loading