Calcolo la media di n voti

di Anonimizzato13231 il
14 risposte
Ciao a tutti,
dovrei scrivere un programma che mi calcoli la media di n voti, la cui sequenza è terminata da un numero negativo.
Io ho cercato di impostare il programma con la funzione while, ma non riesco a trovare l'errore che ho fatto.
Mi potreste dare un mano?

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

int main ()
{
   int x, y, n, media;
   
   y = 0;  
   n = 1;

   while (x > 0)
   {
       printf ("Inserire un numero: ");
       scanf ("%d", &x);  
	   
	   media = (x + y) / n;
	   
	   y = y + x;  
       n = n + 1;
   }
      
   printf ("La media è: %d\n", media);
   return EXIT_SUCCESS;
}

14 Risposte

  • Prima di tutto ti invito a leggerti il regolamento, per quanto riguarda il titolo e l'utilizzo del tag CODE.

    Per quanto riguarda l'esercizio in sé ho trovato diversi errori.
    Innanzitutto non inizializzando la variabile x essa può assumere un qualsiasi valore "casuale", per cui non è detto che sia soddisfatta la condizione del while e quindi potresti uscire subito dal loop (e quindi ti stamperebbe subito il contenuto della variabile "media", anch'esso casuale).

    In secondo luogo se vuoi che il calcolo della media avvenga all'interno del loop allora questa operazione deve avvenire dopo l'incremento di n e il calcolo della somma. Questo perché se no calcoleresti una media sbagliata.

    Quindi farei qualcosa del genere:
    
    Y=0;
    n=0;
    media=0;
    
    //prendi il valore di x dall'input
    
    while (...) {
        n++;
        y  += x;
        media = y/n;
    }
    
    if (n>0) {
       printf("La media è: %d\n", media);
    } else {
        printf("Sequenza non valida\n");
    }
    
  • Diversi problemi ...

    - la media non può essere un intero ...

    - nel ciclo calcolerai la somma dei voti e il loro numero, la media solamente una volta, fuori dal ciclo

    - il valore negativo di fine sequenza non devi sommarlo perché non fa parte della serie
  • 
    int main ()
    {
        int input,n,count;
    
        printf("Calcolo media numeri inseriti,-1 to exit:\n");
    
        for (input = 0, n = 0, count = 0; input != -1; count++,n += input)
        {
            printf("\tnumero: ");
            scanf ("%d", &input);
            fflush(stdin);
        }
        ++n;
        --count;
        printf ("La media è: %d\n", n / count);
    
        return EXIT_SUCCESS;
    }
    
    
    Perchè la media non può essere un intero???????
  • Grazie Della per la risposta.
  • In secondo luogo se vuoi che il calcolo della media avvenga all'interno del loop allora questa operazione deve avvenire dopo l'incremento di n e il calcolo della somma
    Questo anche se inizializzo la n a 1?
  • Se inizializzi la n a 1 il programma funziona lo stesso, però se con n indichi la quantità di numeri che hai letto allora commetti un errore "semantico"


    Sent from my iPhone using Tapatalk - now Free
  • vbextreme ha scritto:


    Perchè la media non può essere un intero???????
    Se hai 2 voti

    7 e 6

    quale sarà la media, vbextreme?
  • Se hai 2 voti

    7 e 6

    quale sarà la media, vbextreme?
    6,sempre il numero piu basso! eheheheh
  • vbextreme ha scritto:


    Se hai 2 voti

    7 e 6

    quale sarà la media, vbextreme?
    6,sempre il numero piu basso! eheheheh
    Se scherzi, ci facciamo una risata ... altrimenti
  • Se scherzi, ci facciamo una risata ... altrimenti
    dici che avrei dovuto generare un numero casuale fra 6 e 7 ???? sarebbe stato piu realistico???eheheheh
    ovvio che scherzo,secondo te che significa eheheheheheheh
  • Allora scherzavi anche quando hai fatto la domanda sul perché non si usa un intero ... vero ?
  • Si
    non sapendo che numeri si hanno per input non si puo sapere se gli interi non vanno bene.
    Se infatti si calcolano i voti in base centesimale allora gli interi vanno benissimo:
    (60+70)/2=65
  • vbextreme ha scritto:


    si
    Se infatti si calcolano i voti in base centesimale allora gli interi vanno benissimo:
    (60+70)/2=65
    Andiamo su ...
  • Come sei serioso.........
Devi accedere o registrarti per scrivere nel forum
14 risposte