PDA

Visualizza la versione completa : [C] Errore con la media aritmetica


goatboy
19-07-2011, 11:29
Salve a tutti. La mia intenzione e' quella di scrivere un programma che, inserite un certo numero di misure, ti restituisce:
1) il numero massimo
2) il numero minimo
3) la dispersione (massimo-minimo)
4) la somma dei numeri inseriti
5) la media dei numeri inseriti
6) l'incertezza relativa
7) l'incertezza percentuale

Il programma riesce a calcolarmi il numero massimo e minimo, la dispersione e la somma totale dei numeri. Il problema sorge con la media aritmetica, poich quando faccio andare il programma mi esce scritto "la media aritmetica e' 1.#INF". Ho cercato a cosa si poteva riferire questo tipo di errore ed ho trovato che identificabile con la divisione per zero. In effetti il mio N, che il numero di misure che l'utente vuole inserire, va man mano svuotandosi mentre si inseriscono le misure, e quindi il programma alla fine trova N=0 e non pu darmi la media. Il problema che senza la media non posso calcolare tutte le altre cose :dh:
Cosa posso fare ? Spero di essere stato abbastanza chiaro.

Questo il codice che ho scritto fin'ora:



#include <stdio.h>
#include <stdlib.h>

int main(){
float N; // indica il numero di misure che l'utente vuole inserire
float numero; // indica le misure man mano inserite dall'utente
float MAX, MIN; // MAX e MIN indicano il numero massimo e minimo inseriti
float totale; // indica la somma dei numeri inseriti
float media; // media dei numeri inseriti
float dispersione; // dispersione --> (max-min)
float incertrel; // incertezza relativa --> dispersione/media
float incertperc; // incertezza percentuale --> incertezza relativa * 100

printf("Quante misure vuoi inserire? ");
scanf("%f", &N);
if (N<=0){
printf("Errore. Il numero inserito non e' positivo");
} else {
printf("Inserisci una misura: ");
scanf("%f", &numero);
N=N-1;
MAX=numero;
MIN=numero;
totale=numero;
while (N>0){
printf("Inserisci una misura: ");
scanf("%f", &numero);
if (numero>MAX){
MAX=numero;
} else if (numero<MIN){
MIN=numero;
}
N=N-1;
totale=totale+numero;
}
printf("Il numero massimo inserito e' %.2f, il numero minimo e' %.2f.\n", MAX, MIN);
dispersione=MAX-MIN;
printf("La somma totale dei numero e' %.4f. La dispersione e' %.2f.\n", totale, dispersione);
media=totale/N;
printf("La media aritmetica e' %.4f.\n", media);
system("PAUSE");
}
}

deleted_29
19-07-2011, 11:35
non sono la persona adatta per fare rilievi, visto che in realt sono un filosofo gattolico.
per... diciamo che praticamente tutto da rifare, a partire dalla prima riga :stordita:

linoma
19-07-2011, 11:38
N 0 alla fine

goatboy
19-07-2011, 11:49
Originariamente inviato da linoma
N 0 alla fine

Se tu avessi letto ci che ho scritto, sapresti che a questa conclusione c'ero gi arrivato :)
Qualcuno sa propormi una soluzione? Anche se devo riscrivere il programma da capo, va bene, ma almeno sapere COME devo riscriverlo..

linoma
19-07-2011, 11:58
Usa il for fino ad N

goatboy
19-07-2011, 12:21
Originariamente inviato da linoma
Usa il for fino ad N
E poi come faccio ad individuare il massimo e il minimo?

clynamen
19-07-2011, 12:50
come facevi prima

MisterBean
19-07-2011, 13:17
Altrimenti crea una copia della variabile N dopo che l'utente ha detto quante osservazioni inserire, e dividi per quella al termine...

goatboy
19-07-2011, 13:23
Originariamente inviato da MisterBean
Altrimenti crea una copia della variabile N dopo che l'utente ha detto quante osservazioni inserire, e dividi per quella al termine...
Come si fa a fare una copia di una variabile? Semplicemente creando un'altra variabile e ponendola uguale ad N?

MisterBean
19-07-2011, 13:26
Esatto, creala all'inizio assieme alle altre, e dopo che hai acquisito N fai l'assegnamento... Comunque un for pi "pulito" e leggibile. :ciauz:

Loading