Programma che legge una sequenza di numeri interi

di il
17 risposte

Programma che legge una sequenza di numeri interi

Non riesco a risolvere questo programma:
"Scrivere un programma C++ che legge da uno standard input una sequenza di numeri interi terminata da un numero negativo, calcola la media aritmetica dei numeri (non negativi) letti, e scrive il risultato sullo standard output (il programma controlla anche che la sequenza non sia vuota, nel caso informa l'utente con opportuno messaggio in output) SUGG: Si utilizza una variabile somma in cui accumulare, man mano, la somma pariale dei numeri letti da input, inserendo all'interno del ciclo uno statement somma = somma + x, dove x è la variabile che contiene l'ultimo numero letto da input,)

Mi blocco particolarmente nell'impostare che il programma deve inserire la media di tutti i numeri che inserisco in input (quindi media = somma / n (numeri inseriti in input).

17 Risposte

  • Re: Programma che legge una sequenza di numeri interi

    Non ho capito dove ti blocchi ... mostra il codice che hai scritto, tra tag CODE...
  • Re: Programma che legge una sequenza di numeri interi

    #include <iostream>
    using namespace std;
    int main()
    {
     int x;
     float media;
     int somma = 0;
     
     cout << "\nInserisci una sequenza di numeri interi terminata da un numero negativo" << endl;
     cin >> "x";
     
     if (x == '\n') {
             cout << "Devi inserire una sequenza di numeri interi\n" << endl;
            }
    
     while (x >= 0) {
            somma = somma + x;
            media = somma/ 
            cin >> somma;
            } 
    
     cout << "La sequenza 
    
    Questo sono riuscito a scrivere
  • Re: Programma che legge una sequenza di numeri interi

    La if x == '\n' non ha senso.

    L'input di x lo fai con

    cin >> x;

    senza virgolette perché x è una variabile. E nel ciclo devi ripetere questo input, non l'input di somma ... (somma la calcoli non la inserisci da tastiera). La media non la calcoli nel ciclo ma dopo, alla fine del ciclo.

    La questione della "sequenza vuota" è che non devi inserire subito -1. Puoi contare i valori con un contatore che inizializzi a 0 e aumenti per ogni numero valido. Di questo occupatene dopo che il programma calcola e visualizza correttamente la media.
  • Re: Programma che legge una sequenza di numeri interi

    E per la media? Se non conosco il numero di numeri interi inseriti come faccio a fare somma/ numeri inseriti?
  • Re: Programma che legge una sequenza di numeri interi

    Anche per questo ti ho detto del contatore ...
  • Re: Programma che legge una sequenza di numeri interi

      GNU nano 2.2.6                                  File: numeri.cpp                                                                              
    
    /*Programma che legge da standard input una sequenza di numeri interi terminata da un numero negativo
      Calcola la media aritmetica dei numeri non negativi e scrive il risultato sullo standard output. */
    
    #include <iostream>
    using namespace std;
    int main()
    {
     int x;
     float media;
     int somma = 0;
     int contatore = 0;
     
     cout << "\nInserisci una sequenza di numeri interi terminata da un numero negativo" << endl;
     cin >> x;
     
     if (contatore <= 0) {
             cout << "Devi inserire una sequenza di numeri interi\n" << endl;
             ++ contatore;
            }
    
     while (x >= 0) {
            somma = somma + x;
            contatore = contatore + 1;
            media = x/contatore;
            cin >> x;
            }
    
     cout << "Il risultato e'" << "x" << endl;
    
     return 0;
    }
    
    Ora me lo compila ma non esegue il risultato desiderato. Gli errori dove sono?
  • Re: Programma che legge una sequenza di numeri interi

    Ti avevo detto che la media non la devi calcolare nel ciclo ... se non segui quello che ti dico ...

    E il risultato non è x ... se calcoli la media devi visualizzare la media ... no?
  • Re: Programma che legge una sequenza di numeri interi

      GNU nano 2.2.6                                  File: numeri.cpp                                                                  Modificato  
    
       /* Programma che legge da standard input una sequenza di numeri interi terminata da un numero negativo
          Calcola la media aritmetica dei numeri non negativi e scrive il risultato sullo standard output. */
    
        #include <iostream>
        using namespace std;
        int main()
        {
        int x;
        float media;
        int somma = 0;
        int contatore = 0;
    
        cout << "\nInserisci una sequenza di numeri interi terminata da un numero negativo" << endl;
        cin >> x;
    
        if (contatore < 0) {
                 cout << "Devi inserire una sequenza di numeri interi\n" << endl;
                 ++ contatore;
                }
    
        while (x >= 0) {
                somma = somma + x;
                contatore = contatore + 1;
                cin >> x;
                }
        media = somma/x;
    
        cout << "Il risultato e'" << "media" << endl;
    
        return 0;
        }
    
    Cosi?
  • Re: Programma che legge una sequenza di numeri interi

    La media non si calcola in quel modo. L'hai detto tu stesso prima come si calcola ...

    Se devi visualizzare una variabile questa non va tra virgolette ... non devi scrivere "media"
  • Re: Programma che legge una sequenza di numeri interi

    Quindi:
    media = somma / contatore?
  • Re: Programma che legge una sequenza di numeri interi

    Sì ma per ottenere il risultato float devi scrivere

    media = (float)somma / contatore
  • Re: Programma che legge una sequenza di numeri interi

    
       /* Programma che legge da standard input una sequenza di numeri interi terminata da un numero negativo
          Calcola la media aritmetica dei numeri non negativi e scrive il risultato sullo standard output. */
    
        #include <iostream>
        using namespace std;
        int main()
    {
        int x;
        float media;
        int somma = 0;
        int contatore = 0;
    
    
        while (x >= 0){
                 cout << "\nInserisci una sequenza di numeri interi terminata da un numero negativo" << endl;
                 cin >> x;
        if (contatore <= 0)
                 cout << "Devi inserire una sequenza di numeri interi\n" << endl;
       else somma = somma + x;
            contatore = contatore + 1;
            cin >> x;
                      }
    
        media = (float)somma/contatore;
        cout << "Il risultato e'" << media << endl;
    
        return 0;
    }
    
    Aggiornato: mi va in loop infinito.
  • Re: Programma che legge una sequenza di numeri interi

    
    	cout << "\nInserisci una sequenza di numeri interi terminata da un numero negativo" << endl;
        while (x >= 0)
    	{
            cin >> x;
    
    		if(x>=0)
    		{
    			somma = somma + x;
    			contatore = contatore + 1;
    		}
    		else
    		{
    			if(contatore==0)
    			{
    				cout << "Devi inserire una sequenza di numeri interi\n" << endl;
    				x=0;
    			}
    		}
    	}
    
  • Re: Programma che legge una sequenza di numeri interi

    Ecco il programma definitivo, cosi mi va.
    Grazie per i consigli
       /* Programma che legge da standard input una sequenza di numeri interi terminata da un numero negativo
          Calcola la media aritmetica dei numeri non negativi e scrive il risultato sullo standard output. */
    
        #include <iostream>
        using namespace std;
        int main()
    {
        int x;
        float media;
        int somma = 0;
        int contatore = 0;
    
        cout << "\nInserisci una sequenza di numeri interi terminata da un numero negativo" << endl;
    
        while (x >= 0)
        {
           cin >> x;
    
              if (x >= 0)
                 {
                     somma = somma + x;
                     contatore = contatore + 1;
                 }
              else
                 {
                      if (contatore <= 0)
                             {cout << "Devi inserire una sequenza di numeri interi\n" << endl;
                                   x=0;
                             }
                 }
         }
    
        media = (float) somma/contatore;
        cout << "Il risultato e'" << media << "\n" << endl;
    
     return 0;
    }
    
Devi accedere o registrarti per scrivere nel forum
17 risposte