[C++, Algoritmi]
Buonasera devo inserire una sequenza di numeri reali positivi. Di questi numeri inseriti dovrei calcolare il minimo, massimo e la media.
Il programma deve all'inserimento di un numero negativo.
Ho sviluppato questo programma in C, l'errore è legato al fatto che quando eseguo, nel calcolo del minimo tiene conto del numero negativo inserito per terminare l'esecuzione.
Mi scuso in anticipo se ho commesso qualche errore nella scrittura, ma sono nuovo nell'ambiente informatico.
Il programma deve all'inserimento di un numero negativo.
Ho sviluppato questo programma in C, l'errore è legato al fatto che quando eseguo, nel calcolo del minimo tiene conto del numero negativo inserito per terminare l'esecuzione.
Mi scuso in anticipo se ho commesso qualche errore nella scrittura, ma sono nuovo nell'ambiente informatico.
#include <stdio.h> #include <stdlib.h> /* Calcolare il massimo, il minimo e la media di una sequenza di numeri reali positivi */ int main(void) { float n,max,min,media,somma=0,i=0; while (n>=0) { printf("\nInserisci numero:"); scanf("%f", &n); if (max<n) { max=n; } else if (n<min) { min=n; } i++; somma=somma+n; } i--; somma=somma-n; media=somma/i; printf("\nHai inserito %f numeri",i); printf("\nIl numero massimo inserito vale: %f",max); printf("\nIl numero massimo inserito vale: %f",min); printf("\nLa media vale: %f",media); return 0; }
Risposte
Alcuni commenti:
[list=1][*:l0cdxnsp] Quello è C e non C++.[/*:m:l0cdxnsp]
[*:l0cdxnsp] Usi n, min e max senza inizializzarli. Per quanto riguarda n ne parlo più avanti. max lo puoi inizializzare a 0, mentre min lo devi inizializzare ad infinito o ad un numero molto grande (per esempio usando INFINITY o HUGE_VALF definiti in math.h oppure usando FLT_MAX definita in float.h). Se non vuoi usare le librerie puoi inserire manualmente un numero che sai andare in overflow.[/*:m:l0cdxnsp]
[*:l0cdxnsp] La variabile che conta gli elementi dovrebbe essere un int e non un float.[/*:m:l0cdxnsp]
[*:l0cdxnsp] C'è un errore nel testo del penultimo printf.[/*:m:l0cdxnsp]
[*:l0cdxnsp] il return 0 alla fine del main non è indispensabile. (oltre a non essere più indispensabile definire tutto all'inizio del ciclo da circa 15 anni) [/*:m:l0cdxnsp][/list:o:l0cdxnsp]
Riguardo al tuo problema puoi o fare come hai fatto tu di risommarlo oppure usare una delle seguenti due costruzioni:
[list=1][*:l0cdxnsp] Quello è C e non C++.[/*:m:l0cdxnsp]
[*:l0cdxnsp] Usi n, min e max senza inizializzarli. Per quanto riguarda n ne parlo più avanti. max lo puoi inizializzare a 0, mentre min lo devi inizializzare ad infinito o ad un numero molto grande (per esempio usando INFINITY o HUGE_VALF definiti in math.h oppure usando FLT_MAX definita in float.h). Se non vuoi usare le librerie puoi inserire manualmente un numero che sai andare in overflow.[/*:m:l0cdxnsp]
[*:l0cdxnsp] La variabile che conta gli elementi dovrebbe essere un int e non un float.[/*:m:l0cdxnsp]
[*:l0cdxnsp] C'è un errore nel testo del penultimo printf.[/*:m:l0cdxnsp]
[*:l0cdxnsp] il return 0 alla fine del main non è indispensabile. (oltre a non essere più indispensabile definire tutto all'inizio del ciclo da circa 15 anni) [/*:m:l0cdxnsp][/list:o:l0cdxnsp]
Riguardo al tuo problema puoi o fare come hai fatto tu di risommarlo oppure usare una delle seguenti due costruzioni:
while(1) { printf("..."); scanf("%f", &n); if(n < 0) { break; } // resto del ciclo }oppure
printf("..."); scanf("%f", &n); while(n < 0) { // resto del ciclo printf("..."); scanf("%f", &n); }