Programma che legge una sequenza di numeri interi

di Anonimizzato18496 il
17 risposte
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

  • Non ho capito dove ti blocchi ... mostra il codice che hai scritto, tra tag CODE...
  • #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
  • 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.
  • E per la media? Se non conosco il numero di numeri interi inseriti come faccio a fare somma/ numeri inseriti?
  • Anche per questo ti ho detto del contatore ...
  •   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?
  • 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?
  •   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?
  • 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"
  • Quindi:
    media = somma / contatore?
  • Sì ma per ottenere il risultato float devi scrivere

    media = (float)somma / contatore
  • 
       /* 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.
  • 
    	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;
    			}
    		}
    	}
    
  • 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