salve a tutti,
devo scrivere una funzione che dati tre numeri i tipo float, restituisca la somma e la media.
La funzione in arduino, da quello che ho letto, restituisce un solo valore.
Come si risolve ?
Puoi usare variabili globali.
Puoi anche se proprio serve dare il valore calcolato come valore di restituzione scrivere 2 Funzioni, una che calcola la somma e l' altra che calcola la media.
Altra soluzione piú pulita ma piú difficile da capire é usare puntatori. Dai alla funzione i puntatori delle variabili del risultato.
Ciao Uwe
solman:
La funzione in arduino, da quello che ho letto, restituisce un solo valore.
NON in Arduino, una funzione in 'C' restituisce un valore (di qualsiasi tipo), quindi crei una bella struttura, con dentro tutte le variabili che ti pare e restituisci il puntatore alla struttura o ... molto più semplicemente, la funzione la fai che restituisce void, ovvero non restituisce nulla, e da essa, come ti ha detto Uwe, aggiorni due variabili esterne alla funzione e leggibili dal chiamante.
Guglielmo
Comunque se usi 2 variabili globali per la media e la somma la funzione non é cosí generale da poterla usare anche per altri valori.
Per esempio se vuoi calcolare al media della velocitá e del tempo per un giro devi scrivere 2 funzioni oppure copiare dopo la chiamata della funzione i risultati dalle variabili globali in quelle della velocitá e tempo.
Se lo fai con 2 funzioni distinte (media e somma) oppure usi dei puntatori per dire alla funzione dove deve memorizzare i risultati puoi usare la funzione piú volte su diverse variabili.
Spero di essere stato chiaro.
Ciao Uwe
Senza scomodare i puntatori, ricordiamo che in C++ esistono le reference:
void sommaMedia (int a, int b, int& somma, int& media) {}
Tuttavia in un caso come questo consiglio anch'io due funzioni separate.
Ma questo non sono puntatori che passi alla funzione?
Ciao Uwe
Dietro le quinte il funzionamento è simile, servendo entrambi i meccanismi a realizzare il passaggio di argomenti by reference, ma la sintassi è diversa. Quella delle reference è sicuramente più intuitiva ed evita il problema dei possibili NULL.
Grazie
SukkoPera:
Senza scomodare i puntatori, ricordiamo che in C++ esistono le reference:void sommaMedia (int a, int b, int& somma, int& media) {}
Tuttavia in un caso come questo consiglio anch'io due funzioni separate.
ma in questo caso, allesterno della funzione, devo prima dichiarare le variabili somma e media ?
Ovvero:
int somma, media;
int a,b;
a=1;
b=5;
sommaMedia(a,b,somma,media)
void sommaMedia (int a, int b, int& somma, int& media) {}
E' corretto ?
ma in questo caso, allesterno della funzione, devo prima dichiarare le variabili somma e media ?
Si serve la dichiarazione delle variabili che hai indicato ma non è necessario che siano globali anzi possono essere locali alla funzione che chiama sommaMedia(), in questo modo al termine del chiamante la memoria stack viene liberata e tornano disponibili tot byte.
Ciao.
ok.
grazie a tutti.