PDA

Visualizza la versione completa : [C] Calcolo media di vettore


sizeof
25-09-2013, 10:36
Ciao a tutti..ragazzi qualcuno sa dirmi perche pure dichiarando MEDIA come float, risultato che mi stampa di MEDIA sempre con le 2 cifre a destra della virgola pari a 0 ????




#include <stdio.h>
#include <stdlib.h>
#define n 30


int main()
{
int BETA[n];
int N, i, MIN, MAX, somma;
float MEDIA;

printf("Inserisci la dimensione del vettore : \n");
scanf("%d", &N);

/* LEGGE I NUMERI E LI METTE NEL VETTORE */
if ( N >= 3 && N <= 20 ) {
for ( i = 0; i < N; i++ ) {
printf("Inserisci l'elemento [%d]\n", i );
scanf("%d", &BETA[i] );
}
printf("\n\n");

/* STAMPA IL VETTORE BETA */
printf("Il vettore BETA : \n");
for ( i = 0; i < N; i++ ) {
printf("%d", BETA[i] );
printf("\t");
}
printf("\n\n");

/* RICERCA IL VALORE MINIMO */
MIN = BETA[0];
for ( i = 1; i < N; i++ ) {
if ( MIN > BETA[i] ) {
MIN = BETA[i];
}
}
/* STAMPA IL VALORE MINIMO */
printf("Il valore minimo : %d\n", MIN);

printf("\n\n");

/*RICERCA DEL VALORE MASSIMO */
MAX = BETA[0];
for ( i = 1; i < N; i++ ) {
if ( MAX < BETA[i] ) {
MAX = BETA[i];
}
}
/* STAMPA IL VALORE MASSIMO */
printf("Il valore massimo : %d\n", MAX);

printf("\n\n");

somma = 0;
for ( i = 0; i < N; i++ ) {
somma += BETA[i];
}
MEDIA = (somma / N);

printf("%d", somma);

printf("Il valore medio : %.2f\n", MEDIA);




} /* fine ramo if */


return 0;
}

Andrea Simonassi
25-09-2013, 11:06
il tipo di (somma / N) INT perch INT sono i due operandi.

dovresti fare ((float)somma / (float) N)

sizeof
25-09-2013, 11:12
Originariamente inviato da Andrea Simonassi
il tipo di (somma / N) INT perch INT sono i due operandi.

dovresti fare ((float)somma / (float) N)

Ho dichiarato anche somma come float ed ho risolto.
In questo caso in termini di tempo, eleborazione, occupazione della memoria quale delle 2 soluzioni pi conveniente ?

goatboy
25-09-2013, 11:15
Originariamente inviato da sizeof
Ho dichiarato anche somma come float ed ho risolto.
In questo caso in termini di tempo, eleborazione, occupazione della memoria quale delle 2 soluzioni pi conveniente ?
Per quanto ne so io, se i cast si possono evitare (soprattutto in un caso base come questo) sempre meglio. Rispecchiano una progettazione dell'applicazione poco attenta (cos mi stato sempre insegnato). Ovviamente, ci saranno le dovute eccezioni, suppongo.

Andrea Simonassi
25-09-2013, 11:19
In generale il calcolo fp in pi lento ed usa pi risorse di quello int, ma l'unico modo fare delle prove misurando il tempo ed il consumo di memoria delle due varianti su diversi hardware.

Ma detto tra noi meglio lasciare che sia il compilatore ad ottimizzare dove pu, abitualmente si usa dire che meglio evitare di ottimizzare prima che sia strettamente necessario, secondo alcuni ottimizzare prima che sia necessario un anti-pattern.

http://c2.com/cgi/wiki?PrematureOptimization

Andrea Simonassi
25-09-2013, 11:22
Originariamente inviato da goatboy
Per quanto ne so io, se i cast si possono evitare (soprattutto in un caso base come questo) sempre meglio. Rispecchiano una progettazione dell'applicazione poco attenta (cos mi stato sempre insegnato). Ovviamente, ci saranno le dovute eccezioni, suppongo.

Se hai in input degli int e devi ottenere float in output il cast necessario, che sia implicito o esplicito, entrambe le soluzioni hanno un cast, solo che la soluzione A fa un solo cast alla fine, la soluzione B fa il cast ad ogni iterazione del loop.

sizeof
25-09-2013, 13:03
Ok chiaro. Grazie a tutti!

Loading