PDA

Visualizza la versione completa : Funzione di funzione C++


BlackLion
30-03-2010, 12:08
ciao a tutti

avrei un problema nel richiamare una funzione che ha come argomento un Array

facci un esempio:


#include <iostream>
using namespace std;

void Prob(float *Array)
{
float P[9];
float Somma;
int x;

Somma=10000;
for (x=0;x<9;x++)
P[x]=Array[x]/Somma;
}

int main()
{
float Array[]={1000,2000,2000,500,1500,0,1000,1000,1000};
float P[9];
int x;

for (x=0;x<9;x++)
{
P[x]=Prob(*Array);
cout<<P[x]<<endl;
}
}

ma mi da errore dicendo che non riesce a convertire da float a float

come posso fare?

grazie

oregon
30-03-2010, 12:25
Prima di tutto, cosa c'entra il titolo "Funzione di funzione" ?

Per il resto, la funzione non restituisce nulla ( void), quindi non ha senso usarla come hai fatto nel main ... L'array P locale alla funzione .... per restituirlo dovresti allocarlo dinamicamente e restituirne il puntatore al chiamante.

Inoltre, il parametro da passare il puntatore all'array Array (usa dei nomi migliori altrimenti non fai altro che aumentare la confusione), che altro non che il suo nome (non *Array).

BlackLion
30-03-2010, 13:21
Originariamente inviato da oregon
Prima di tutto, cosa c'entra il titolo "Funzione di funzione" ?

Per il resto, la funzione non restituisce nulla ( void), quindi non ha senso usarla come hai fatto nel main ... L'array P locale alla funzione .... per restituirlo dovresti allocarlo dinamicamente e restituirne il puntatore al chiamante.

Inoltre, il parametro da passare il puntatore all'array Array (usa dei nomi migliori altrimenti non fai altro che aumentare la confusione), che altro non che il suo nome (non *Array).

il funzione di funzione sta per richiamare una funzione da una funzione.

invece ho trovato questo esempio dove il void restituisce un valore:

// passing parameters by reference
#include <iostream>
using namespace std;
void duplicate (int& a, int& b, int& c)
{
a*=2;
b*=2;
c*=2;
}
int main ()
{
int x=1, y=3, z=7;
duplicate (x, y, z);
cout << "x=" << x << ", y=" << y << ", z=" << z;
return 0;
}

MItaly
30-03-2010, 13:30
Il void l non restituisce nessun valore, semmai memorizza dei valori in variabili passate by reference.

BlackLion
30-03-2010, 14:05
ok

l'ho modificato ma ancora non va


#include <iostream>
using namespace std;

float Prob(float A)
{
float P[9];
float Somma;
int x;

Somma=10000;
for (x=0;x<9;x++)
P[x]=A[x]/Somma;
return(P);
}

int main()
{
float A[]={1000,2000,2000,500,1500,0,1000,1000,1000};
float P1[9];
int x;

P1=Prob(A);
for (x=0;x<9;x++)
cout<<P1[x]<<endl;

return(0);
}

MItaly
30-03-2010, 14:38
Scusa, tu devi restituire un array e dichiari e la funzione e il suo parametro come semplici float? Come speri che possa funzionare?
Il metodo corretto per fare quello che vuoi fare passare l'array per puntatore e modificarlo da dentro la funzione.

BlackLion
30-03-2010, 14:59
Originariamente inviato da MItaly
Scusa, tu devi restituire un array e dichiari e la funzione e il suo parametro come semplici float? Come speri che possa funzionare?
Il metodo corretto per fare quello che vuoi fare passare l'array per puntatore e modificarlo da dentro la funzione.

quindi come devo dichiarare la funzione?

MItaly
30-03-2010, 15:09
#include <iostream>
using namespace std;

void Prob(float * A)
{
float Somma = 10000.0f;
for (int x=0;x<9;x++)
A[x]/=Somma;
}

int main()
{
float A[]={1000,2000,2000,500,1500,0,1000,1000,1000};
int x;

Prob(A);
for (x=0;x<9;x++)
cout<<A[x]<<endl;

return(0);
}

oregon
30-03-2010, 15:35
Originariamente inviato da MItaly

#include <iostream>
using namespace std;

void Prob(float * A)
{
float Somma = 10000.0f;
for (int x=0;x<9;x++)
A[x]/=Somma;
}

int main()
{
float A[]={1000,2000,2000,500,1500,0,1000,1000,1000};
int x;

Prob(A);
for (x=0;x<9;x++)
cout<<A[x]<<endl;

return(0);
}


Cos distrugge l'array sorgente ... prova ad allocare un secondo array dinamicamente e a restituirlo con un puntatore (come ti avevo gi detto) oppure a passare un altro argomento con l'array di destinazione come ti ha suggerito MItaly ...

E rivedi tutti i concetti "teorici" legati ai puntatori e alle funzioni ...

P.S. Il fatto che una funzione chiamata da un'altra non giustifica quel titolo (che non ha senso) ... e poi, visto che il tuo problema nel passaggio di parametri in in/out, avresti dovuto indicare nel titolo questo tipo di problematica ...

BlackLion
30-03-2010, 15:37
si si me ne sono accorto e l'ho modificato come mi serviva


grazie a tutti per l'aiuto :ciauz:

Loading