PDA

Visualizza la versione completa : [C] Vettore dove ogni indice k contiene prodotto dei k elementi di un altro vettore


pietroA
16-02-2011, 12:56
salve, dovrei scrivere una funzione, che dato un vettore di float passato come argomento, restituisca un vettore delle stesse dimensioni in cui ogni elemento di indice k conterr il prodotto dei primi k elementi.

ho fatto questa funzione che segue, ma purtroppo il vettore risultante un vettore che contiene solo degli 0.00, ho provato a cambiare e modificare varie volte il ciclo for, ma ho sempre avuto dei risultati sbagliati, ila massimo che ho ottenuto avere il primo elemento corretto ma solo perche impostato all'esterno del ciclo for uguale al primo elemento del vettore passato come argomento. il codice che ho scritto il seguente:


float* pvettore (float *vettore, int n)
{
int i = 0;
float *vettore2;

vettore2 = (float*) malloc (n* sizeof(float*));
vettore2[0]= vettore[0];
for(i=1; i<=n; i++)
{
vettore2[i] = vettore2[i-1] * vettore[i];

}
return vettore2;
}


mi date qualche suggerimento per riuscire ad ottenere il risultato desiderato, visto che il compilatore non mi segnala errori e che ho esaurite le idee sfruttando le mie poche conoscenze del c. vi ringrazio a tutti dell' aiuto!

Laikius91
16-02-2011, 13:19
Se ho capito bene tu vuoi che, dato ad esempio il vettore formato da (2, 3, 4), il vettore risultato sia (2, 6, 24) ?

Se cos, come hai fatto tu, crei il vettore nuovo con una malloc.. poi con un ciclo sugli indici "i", trovi il prodotto che desideri e poi inserisci tale prodotto nella posizione giusta, quindi:



float prod;

for (i = 0; i < n; i++)
{
prod = 1.0;
for (k = 0; k < i + 1; k++);
prod = prod * vettore[k];

vettore2[i] = prod;
}

return vettore2;


Non l'ho provato ma dovrebbe funzionare!

pietroA
16-02-2011, 14:29
grazie per il suggerimento ma ottengo sempre lo stesso risultato, il vettore vettore2 composto da tutti i valori uguali a 0.00, tranne l ultimo che diventa un numero senza senso!

Laikius91
16-02-2011, 14:40
Originariamente inviato da pietroA
grazie per il suggerimento ma ottengo sempre lo stesso risultato, il vettore vettore2 composto da tutti i valori uguali a 0.00, tranne l ultimo che diventa un numero senza senso!

Non mi ero accorto di un errore gravuccio nella malloc:


vettore2 = (float*) malloc (n* sizeof(float*));

Il vettore deve essere riempito di "float" non di "float*"... Quindi:

[CODE] vettore2 = (float*) malloc (n* sizeof(float));

pietroA
16-02-2011, 15:57
purtroppo continua a darmi lo stesso errore... ecco il codice dell'intero programma magari riesci a vedere qualche errore che io non trovo... ti ringrazio per l aiuto!!



#include <stdlib.h>
#include <stdio.h>
float* inserimento (int n);
float* pvettore (float *vettore, int n);

int main (void)
{
int n, i;
float *vettore;
float *vettoreprodotto;

printf("Inserire numero elementi : ");
scanf("%i",&n);

vettore = inserimento (n);
vettoreprodotto = pvettore (vettore, n);

printf ("vettore prodotto: \n");
for(i=0; i<n; i++)
{
printf("%f \n", vettoreprodotto[i]);
}
system ("pause");
return 0;
}

float* pvettore (float *vettore, int n)
{
int i, k;
float *vettore2;
float prod;
vettore2 = (float*) malloc (n* sizeof(float));
for (i = 0; i < n; i++)
{
prod = 1.0;
for (k = 0; k < i + 1; k++);
prod = prod * vettore[k];

vettore2[i] = prod;
}

return vettore2;
}



il vettore ottenuto sempre una sequenza di 0.00

Laikius91
16-02-2011, 21:22
Puoi postare anche il codice della funzione:


float* inserimento (int n);

??

Cos cerchiamo di capirci per bene! :)


Edit: comunque mi sono accorto di un errore di battitura che ti avevo riportato:



float* pvettore (float *vettore, int n)
{
int i, k;
float *vettore2;
float prod;
vettore2 = (float*) malloc (n* sizeof(float));
for (i = 0; i < n; i++)
{
prod = 1.0;
for (k = 0; k < i + 1; k++);
prod = prod * vettore[k];

vettore2[i] = prod;
}

return vettore2;
}


Nella parta evidenziata non ci va il ';' dopo il for! Diventa un ciclo inutile! Accidenti alla fretta nello scrivere :dh: :dh: :D

pietroA
16-02-2011, 22:23
#include <stdlib.h>
#include <stdio.h>
float* inserimento (int n);
float* pvettore (float *vettore, int n);

int main (void)
{
int n, i;
float *vettore;
float *vettoreprodotto;

printf("Inserire numero elementi : ");
scanf("%i",&n);

vettore = inserimento (n);
vettoreprodotto = pvettore (vettore, n);

printf ("vettore prodotto: \n");
for(i=0; i<n; i++)
{
printf("%f \n", vettoreprodotto[i]);
}
system ("pause");
return 0;
}

float* pvettore (float *vettore, int n)
{
int i, k;
float *vettore2;
float prod;
vettore2 = (float*) malloc (n* sizeof(float));
for (i = 0; i < n; i++)
{
prod = 1.0;
for (k = 0; k < i + 1; k++)
prod = prod * vettore[k];

vettore2[i] = prod;
}

return vettore2;
}


float* inserimento (int n)
{
float *vettore;
int i;

vettore = (float*) malloc(n* sizeof(int*));

for (i=0; i<n; i++)
{
printf("Inserire elemento %i: ",i+1);
scanf("%i", &vettore[i]);
}

return vettore;
}



ecco qui c' tutto il codice del programma, purtroppo prima con la confusione non me ne sono accorto di avertelo inviato a met... cmq anche togliendo il ";" che mi hai indicato continua a darmi lo stesso errore, a questo punto penso che avro sicuramente fatto qualche errore nella funzione di inserimento... cmq sei stato molto gentile a darmi tutto questo aiuto!!! :mem:

Laikius91
16-02-2011, 22:36
B ma mi caschi su un errorino cos di confusione?!



float* inserimento (int n)
{
float *vettore;
int i;

vettore = (float*) malloc(n* sizeof(int*));

for (i=0; i<n; i++)
{
printf("Inserire elemento %i: ",i+1);
scanf("%i", &vettore[i]);
}

return vettore;
}


Nella malloc mi fai "n * sizeof(int*)" quando il vettore deve essere riempito di float, non di puntatori a intero!!!!
Quindi deve essere:



vettore = (float*) malloc (n*sizeof(float));


Poi quando vai ad inserire ogni elemento, fai una scanf con "%i", ma il tipo di dato sempre float, quindi devi farla con "%f"!

E stavolta dovremmo esserci! :)

pietroA
16-02-2011, 22:56
laikius!!!!!!!!!!!!!!!! grazie!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ORA SI, FINALMENTE RIUSCITO ALLE PERFEZIONE!!!!!! so che sono errori veramente di niente ma io essendo al mio primo approccio con la programmazione non ci sarei mai arrivato!!! ti ringrazio di cuore per il favore!!! (anche perche non riuscivo a darmi pace)
spero di poterti ricambiare il favore in futuro!!! :unz:

Laikius91
17-02-2011, 07:52
Originariamente inviato da pietroA
laikius!!!!!!!!!!!!!!!! grazie!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ORA SI, FINALMENTE RIUSCITO ALLE PERFEZIONE!!!!!! so che sono errori veramente di niente ma io essendo al mio primo approccio con la programmazione non ci sarei mai arrivato!!! ti ringrazio di cuore per il favore!!! (anche perche non riuscivo a darmi pace)
spero di poterti ricambiare il favore in futuro!!! :unz:

E' stato un piacere aiutarti! :ciauz:

Loading