Programma che calcola il/i maggiore/i tra un elenco di 10 numeri

di il
9 risposte

Programma che calcola il/i maggiore/i tra un elenco di 10 numeri

Ho scritto un altro semplice programma per determinare il maggiore di una serie di 10 numeri, ma se nell'esecuzione scrivo un numero negativo, allora mi considera come valore più alto, quello inserito prima del numero negativo. Allego uno screen:



questo è il codice:
#include <iostream>

using namespace std;

int main()
{
    int counter = 1;
    int number = 0;
    int largest = 0;

    cout << "Inserire una serie di 10 numeri, il programma restituira' il valore maggiore tra quelli inseriti." << endl;
    cout << "\nInserire il valore: ";
    cin >> number;

    while (counter < 10)
    {
        if (number > largest)
        {
            largest = number;
        }

        counter++;

        cout << "\nInserire il valore: ";
        cin >> number;
    }

    cout << "\nIl numero piu' grande tra quelli inseriti e': " << largest << endl;

    return 0;
}
Come mai succede questo?

9 Risposte

  • Re: Programma che calcola il/i maggiore/i tra un elenco di 10 numeri

    Devi invertire nell'if le istruzioni.

    Prima devi inserire il numero e dopo devi fare il controllo. Invece di inizializzare largest a 0 devi inizializzarlo con il primo valore che inserisci fuori dal while.
  • Re: Programma che calcola il/i maggiore/i tra un elenco di 10 numeri

    Ti consiglierei di modificare il codice così ...
    
        cout << "Inserire una serie di 10 numeri, il programma restituira' il valore maggiore tra quelli inseriti." << endl;
    
        while (counter <= 10)
        {
    	    cout << "\nInserire il valore: ";
    	    cin >> number;
    
            if (number > largest)
            {
                largest = number;
            }
    
            counter++;
        }
    
    Ti lascio il compito di capire il perché ... tieni presente che il 77 che hai inserito era l'ultimo numero ...
  • Re: Programma che calcola il/i maggiore/i tra un elenco di 10 numeri

    oregon ha scritto:


    Ti consiglierei di modificare il codice così ...
    
        cout << "Inserire una serie di 10 numeri, il programma restituira' il valore maggiore tra quelli inseriti." << endl;
    
        while (counter <= 10)
        {
    	    cout << "\nInserire il valore: ";
    	    cin >> number;
    
            if (number > largest)
            {
                largest = number;
            }
    
            counter++;
        }
    
    Ti lascio il compito di capire il perché ... tieni presente che il 77 che hai inserito era l'ultimo numero ...
    credo di aver capito l'errore logico, praticamente l'input di ricezione del numero nel while piazzato dopo l'if faceva si che l'ultimo valore (77 nell'esempio) non venisse confrontato con il valore presente in largest, nell'ultimo controllo.


    L'unica cosa con la quale ho ancora delle difficoltà è la seguente:

    Ad esempio nel codice che mi hai consigliato, se scrivo nella condizione del while (counter <= 10) con counter impostato a 1 mi effettua 11 controlli, per farlo fungere a dovere ho dovuto riscrivere la condizione come (counter < 10).
    Ma nelle convenzioni di programmazione, il contatore a che valore si deve inizializzare ?
  • Re: Programma che calcola il/i maggiore/i tra un elenco di 10 numeri

    Quasi sempre a 0. Però se nel tuo codice fai il primo inserimento fuori dal while la condizione cambia a < 9.
  • Re: Programma che calcola il/i maggiore/i tra un elenco di 10 numeri

    Andava bene il contatore iniziale a zero. Non ci sono regole ma se lo usi come indice di un vettore allora devi tenere presente che l'indice piú piccolo è zero
  • Re: Programma che calcola il/i maggiore/i tra un elenco di 10 numeri

    Eduadie ha scritto:


    Quasi sempre a 0. Però se nel tuo codice fai il primo inserimento fuori dal while la condizione cambia a < 9.

    oregon ha scritto:


    Andava bene il contatore iniziale a zero. Non ci sono regole ma se lo usi come indice di un vettore allora devi tenere presente che l'indice piú piccolo è zero
    Grazie mille ragazzi.


    Ho un ulteriore quesito riguardo allo stesso programma, e se volessi visualizzare i due valori più grandi di una lista di 10, come potrei modificarlo ?
  • Re: Programma che calcola il/i maggiore/i tra un elenco di 10 numeri

    Diciamo che dipende dall'approccio che vuoi fare, ovvero "serio" o "da esercizio".
    Nel caso "serio" sarebbe l'ideale per un vero e proprio loop unrolling, se i valori fossero tanti potresti fare meccanismi più o meno "furbi".

    Nel tuo caso potresti limitarti a fare "vice" (cioè il massimo che trovi < del campione)
  • Re: Programma che calcola il/i maggiore/i tra un elenco di 10 numeri

    +m+ ha scritto:


    Diciamo che dipende dall'approccio che vuoi fare, ovvero "serio" o "da esercizio".
    Nel caso "serio" sarebbe l'ideale per un vero e proprio loop unrolling, se i valori fossero tanti potresti fare meccanismi più o meno "furbi".

    Nel tuo caso potresti limitarti a fare "vice" (cioè il massimo che trovi < del campione)
    Ancora non ho fatto i cicli for e do...while, quindi non credo di poter capire il loop unrolling, per il momento mi limito all'approccio "da esercizio", quindi provo qualche combinazione di codice per vedere se riesco ad ottenere questo vice
  • Re: Programma che calcola il/i maggiore/i tra un elenco di 10 numeri

    Stavo impazzendo per capire una cosa semplicissima hahahaha Mi piace davvero la programmazione, ti insegna cosa vuol dire "guardare il problema da ogni angolazione"

    Comunque per ottenere i due numeri più grandi di una serie di 10, ho scritto questo codice, provato con svariate combinazioni mirate a provocare errori, ma sembra tutto ok
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        int counter = 0;
        int largest = 0;
        int vice = 0;
        int number = 0;
    
        cout << "Inserire una serie di 10 numeri, il programma restituira' i due valori piu' grandi tra quelli inseriti." << endl;
    
        while (counter < 10)
        {
            cout << "\nInserire il valore: ";
            cin >> number;
    
            if (number > largest)
            {
                vice = largest;
    
                largest = number;
            }
            else
            {
                if (number > vice)
                {
                    vice = number;
                }
            }
    
            counter++;
    
        }
    
        cout << "\nI numeri piu' grandi tra quelli inseriti sono: \n1) " << largest << "\n2) " << vice << endl;
    
        return 0;
    }
    
Devi accedere o registrarti per scrivere nel forum
9 risposte