Come faccio a far ritornare ad una funzione due valori??![]()
Se è possibile come dovrei fare?
grazie mille
Andrea![]()
![]()
Come faccio a far ritornare ad una funzione due valori??![]()
Se è possibile come dovrei fare?
grazie mille
Andrea![]()
![]()
Vediamo..sogni che diventano professione...passioni che diventano vita...Free as in Freedom...
Non è possibile far ritornare due valori ad una funzione, anche perchè non ha nessun senso, per definizione di funzione.
Se ti interessa avere un risultato multiplo, la soluzione da adottare è quella di far restituire un array di valori, esempio:
Ciao.codice:int* funzione(int x) { int * mioArray; ... /* corpo della funzione*/ return mioArray; }![]()
"Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza
2 modi:
- Restituisci una struct con i due valori
- Restituisci 1 o nessun valore; i valori rimanendi li restituisci come argomenti in uscita.
Ecco come:
Se usi il C++ è consigliabile il secondo modo.codice:// C e C++ // Uso: duenum(&var1, &var2); void duenum(int *a, int *b){ *a = 30; *b = *a + 15; } // solo C++ // Uso: duenum(var1, var2); void duenum(int &a, int &b){ a = 30; b = a + 15; }
ma una funzione in C non puo' ritornare un'array vero?Originariamente inviato da LeleFT
Non è possibile far ritornare due valori ad una funzione, anche perchè non ha nessun senso, per definizione di funzione.
Se ti interessa avere un risultato multiplo, la soluzione da adottare è quella di far restituire un array di valori, esempio:
Ciao.codice:int* funzione(int x) { int * mioArray; ... /* corpo della funzione*/ return mioArray; }![]()
![]()
![]()
Vediamo..sogni che diventano professione...passioni che diventano vita...Free as in Freedom...
ti posto il codice da me scritto della funzione...Originariamente inviato da iguana13
2 modi:
- Restituisci una struct con i due valori
- Restituisci 1 o nessun valore; i valori rimanendi li restituisci come argomenti in uscita.
Ecco come:
Se usi il C++ è consigliabile il secondo modo.codice:// C e C++ // Uso: duenum(&var1, &var2); void duenum(int *a, int *b){ *a = 30; *b = *a + 15; } // solo C++ // Uso: duenum(var1, var2); void duenum(int &a, int &b){ a = 30; b = a + 15; }dovrebbe ritornare sia prodotto che sum_parcodice:float calcolo_par(int app2, float *req_par){ /* calcolo del valore delle resistenze in parallelo mediante la tecnica della produttoria del vettore */ float prodotto=1; //accomulatore per il prodotto tra le res. in par(IMPORANTE!! deve essere POSTA =1,ALTRIMENTI LA PRODUTTORIA SI ANNULERA' SEMPRE !! float somma_par=0; //accomulatore per la somma tra le res. in par float ris_par=0; //risultato del calcolo delle res. in parallelo for (i=0; i<app2; i++){ prodotto=prodotto*req_par[i]; somma_par=somma_par+req_par[i]; } return prodotto; return somma_par; }vorrei farli ritornare con una sola funzione..come potrei fare??
![]()
Grazie mille
![]()
Vediamo..sogni che diventano professione...passioni che diventano vita...Free as in Freedom...
E chi l'ha detto? Se fosse così mi sarei sognato il progetto di Sistemi Operativi....Originariamente inviato da andrea_NET-_DSL
ma una funzione in C non puo' ritornare un'array vero?![]()
![]()
Ciao.![]()
"Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza
era una domanda o meglio a scuola ci hanno spiegato che una funzione in C puo' ricevere come argomento un array ma non resituirlo...Originariamente inviato da LeleFT
E chi l'ha detto? Se fosse così mi sarei sognato il progetto di Sistemi Operativi....
Ciao.![]()
Ho appreso una nuova cosA!grazie
![]()
senti in merito al codice che ho postato sopra della funzione da me scritta come potrei fare?![]()
Vediamo..sogni che diventano professione...passioni che diventano vita...Free as in Freedom...
La mia era una affermazione in stile piuttosto ironico!!
Per restituire i due valori puoi fare come ti ha suggerito iguana13, costruendo una struct in cui vai ad inserire i due valori da ritornare e, di conseguenza, ritornare la struct.
Oppure crei un array di float e assegni ad ogni valore ciò che devi restituire, quindi restituire l'array di float:
A questo punto puoi trovare i due risultati nell'array:codice:float *calcolo_par(...) { float *tmp = (float *) malloc(2 * sizeof(float)); ... // Elaborazione dei due valori tmp[0] = prodotto; tmp[1] = somma_par; return tmp; }
Ciao.codice:float *array_risultato; float prodotto; float somma_par; ... array_risultato = calcolo_par( <parametri>); prodotto = array_risultato[0]; somma_par = array_risultato[1];![]()
"Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza
grazie mille :gren:
alla prossima![]()
![]()
Vediamo..sogni che diventano professione...passioni che diventano vita...Free as in Freedom...
Un'altra soluzione può essere quella di passare alla funzione due puntatori o due indirizzi in modo tale che la funzione li possa modificare.
![]()
Windows Xp
[Java]
[PHP]Notepad++
[Fortran90-77]elf90 g77
[C++ /WinAPI] DevC++ VisualC++