|
|||||||
|
|
|
![]() |
|
|
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 22: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: 07:59.


















