PDA

View Full Version : Aiuto veloce in c...vettori dichiarati dinamicamente


pmhwp
15-07-2007, 21:23
Dato un vettore v di dimensione dim contenente informazioni float,
scrivi una funzione che riceva in ingresso tale vettore insieme alla sua dimensione,e restituisca un altro vettore w, allocato dinamicamente,con gli elementi uguali a quelli di v+1.


Come si fa in c a restituire l'altro vettore w?
Ciao.

float crea(float *v){
float *w;
int i;

w=(float *)malloc(sizeof(float)*2);

for (i=0;i<=2;i++){
w[i]=v[i]+1;
printf ("eseguo %f+1",v[i]);
getch();
}
return *w;
}

int main(){
int i;
float v[2];

for (i=0;i<=2;i++){
scanf("%f",&v[i]);
}

float *w;
w=(float *)malloc(sizeof(float)*2);


*w=crea(v);

printf("\nDopo");

for (i=0;i<=2;i++){
printf("\n%f",w[i]);
}

getch();
}

Cosi mi ritorna solo il primo valore di w, gli altri rimangono a 0...Come faccio?
Ciao.

mapomapo
15-07-2007, 21:45
innanzitutto la funzione, da traccia, deve avere come parametro un intero indicante la dim del vettore.
io passerei come argomento anche un "float **" e farei lì la malloc() (per mio modo di programmare...se posso creo funzioni void...non c'è un motivo preciso!)...comunque puoi provare a far restituire un "float *" e a fare quindi "return w" dovrebbe funzionare lo stesso. nel main, ovviamente, non devi fare quella malloc(), semplicemente w=crea(v,dim), dove dim è la dimensione del vettore di partenza.
ultima cosa, evita la dichiarazione del puntatore a "run-time"...stai compilando secondo la logica del C ed è opportuno che tutto sia dichiarato all'inizio.

Vito

pmhwp
15-07-2007, 22:02
float *crea(float *v){
float *w;
int i;

w=(float *)malloc(sizeof(float)*2);

for (i=0;i<=2;i++){
w[i]=v[i]+1;
printf ("eseguo %f+1",v[i]);
getch();
}
return w;
}

int main(){
int i;
float v[2];

for (i=0;i<=2;i++){
scanf("%f",&v[i]);
}


// float w[2];
float *w;
w=(float *)malloc(sizeof(float)*2);


w=crea(v);

printf("\nDopo");
for (i=0;i<=2;i++){
printf("\n%f",w[i]);
}

getch();
}

Risolto!
Come avresti fatto tu?
Ciao.

mapomapo
15-07-2007, 23:31
#define dim 2

float* crea(float *v)
{
float *w;
int i;

w=(float *)malloc(sizeof(float)*dim);

for (i=0;i<dim;i++)
{
w[i]=v[i]+1;
printf ("eseguo %f+1",v[i]);
getch();
}
return w;
}

void main()
{
int i;
float v[dim];
float *w=NULL;

for (i=0;i<dim;i++)
{
scanf("%f",&v[i]);
}

w=crea(v);

printf("\nDopo");
for (i=0;i<dim;i++)
{
printf("\n%f",w[i]);
}

getch();
}


penso che questo rispecchi meglio la traccia....se non altro perchè penso voglia un define all'inizio...

per il resto è solo una sottigliezza...al posto di far restituire "float*" alla funzione puoi pensare di operare su un "float **" come argomento...pensaci un po' a questo altro modo di procedere...se ti dò la soluzione non c'è gusto...è un ottimo esercizio con i puntatori!!!

Vito