|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 453
|
Aiuto veloce in c...vettori dichiarati dinamicamente
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. Codice:
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(); } Ciao. Ultima modifica di pmhwp : 15-07-2007 alle 21:36. |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: May 2005
Città: Bari
Messaggi: 349
|
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
__________________
Si può vincere una guerra in due...o forse anche da solo. Si può estrarre il cuore anche al più nero assassino, ma è più difficile cambiare un'idea! |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 453
|
Codice:
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(); } Come avresti fatto tu? Ciao. |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: May 2005
Città: Bari
Messaggi: 349
|
Codice:
#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(); } 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
__________________
Si può vincere una guerra in due...o forse anche da solo. Si può estrarre il cuore anche al più nero assassino, ma è più difficile cambiare un'idea! |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 02:05.