PDA

View Full Version : [c++] una function può restituire più di un output?


vermaccio
07-06-2006, 17:12
ovvero anzoche definire

double funzionemia (double input) {...}
e richiamarla con

double output;
output=unzionemia (...);

si può fare, nel caso io abbia bisogno che la mia funzione restituisca due valori

(double, double) altrafunzionemia (double input) {...}

e richiamarla con

double output1;
double output2;

(output1, output2)=altrafunzionemia(...)

?????


so che in uscita non può dare un vettore. ma due double separati?

ilsensine
07-06-2006, 17:21
Puoi restituire un oggetto complesso (struttura, classe...)

vermaccio
07-06-2006, 17:32
uffa!
quindi come al solito gli passo in ingresso il puntatore ad un array di due double e poi da detnro la funziona assegno i valori alle celle dell'array.
che noia....
le variabili di appoggio si sprecano!

double funzionemia (double input, double *output) {...}
e richiamarla con
double output[2];
output=unzionemia (..., &output[0]);

certo che è una bella limitazione!!!!!

wingman87
07-06-2006, 19:16
Puoi fare come ti ha detto ilsensine:


typedef struct mio{
double val1;
double val2;
};

struct mio funzionemia (double input) {...}

e lo richiami con

struct mio output;
output=funzionemia (...);

vermaccio
07-06-2006, 21:34
e se voglio poi asssegnare i due double della struttura a due double esterni come faccio?

double primo;
double secondo;

primo=???
secondo=???
come li assegno se voglio assegnare
primo=val1 e secondo=val2?

andbin
07-06-2006, 21:41
e se voglio poi asssegnare i due double della struttura a due double esterni come faccio?

double primo;
double secondo;

primo=???
secondo=???
come li assegno se voglio assegnare
primo=val1 e secondo=val2?Se una funzione deve restituire 2 double, a me vengono in mente 3 soluzioni:

A)
void funzione (double *pd1, double *pd2) { .. }B)
typedef struct
{
double d1;
double d2;
} DOUBLE2;

DOUBLE2 funzione (void) { .. }C)
typedef struct
{
double d1;
double d2;
} DOUBLE2;

void funzione (DOUBLE2 *pd2) { .. }

tomminno
07-06-2006, 21:52
e se voglio poi asssegnare i due double della struttura a due double esterni come faccio?

double primo;
double secondo;

primo=???
secondo=???
come li assegno se voglio assegnare
primo=val1 e secondo=val2?

Se usi il codice di wingman87:
primo = mio.val1;
secondo = mio.val2;

vermaccio
08-06-2006, 07:44
e per il caso di andbin, casi B) e C)?

da dentro la funzione come assegno valori al contenuto della struttura che ho passato alla funzione?

se ad esempio dentro la funzione voglio passare:
soluz1 al primo double della struttura
soluz2 al secondo double della struttura

in B) e C) che devo scrivere?


e nel caso B) devo mettere a fine funzione return(struttura);
?

andbin
08-06-2006, 08:52
in B) e C) che devo scrivere?Caso B)
typedef struct
{
double d1;
double d2;
} DOUBLE2;

DOUBLE2 funzione (void)
{
DOUBLE2 dbl2;

dbl2.d1 = 1.5;
dbl2.d2 = 5.5;

return dbl2;
}

int main (void)
{
DOUBLE2 dbl2;

dbl2 = funzione ();
}
Caso C)
typedef struct
{
double d1;
double d2;
} DOUBLE2;

void funzione (DOUBLE2 *pdbl2)
{
pdbl2->d1 = 1.5;
pdbl2->d2 = 5.5;
}

int main (void)
{
DOUBLE2 dbl2;

funzione (&dbl2);
}

sydarex
08-06-2006, 10:01
I puntatori ci sono apposta.
Passi alla funzione 2 puntatori a double e la funzione ci scrive i risultati.