Esercizio su C++

di il
11 risposte

Esercizio su C++

Salve a tutti, sono nuovo e sto iniziando a programmare con C++ ma ho dei problemi con questo programma. Potreste aiutarmi e dirmi dove sbaglio per favore?
- scrivere un programma c++ che legga in input una sequenza di interi positivi terminata dal valore sentinella zero
e conti quante volte il valore inserito è maggiore del valore inserito precedentemente

#include <iostream>
using namespace std;

int main ()
{
int numero;
int numero_prec;
int cont=0;

cout << "inserisci numero" << endl;
cin >> numero_prec;

while (numero>0)
{
cout << "inserisci numero" << endl;
cin >> numero;

if (numero > numero_prec)
cont++;
}
cout << "il valore inserito è " << cont << " volte maggiore del valore inserito precedentemente" << endl;
return 0;
}

11 Risposte

  • Re: Esercizio su C++

    Il programma funziona, interpreti bene il risultato?

    se usi il tastino [</>] (tag coode) il codice si presenta così:
    
    #include <iostream>
    using namespace std;
    
    int main ()
    {
        int numero;
        int numero_prec;
        int cont=0;
    
        cout << "inserisci numero" << endl;
        cin >> numero_prec;
    
        while (numero>0)
        {
            cout << "inserisci numero" << endl;
            cin >> numero;
    
            if (numero > numero_prec)
                cont++;
        }
        cout << "il valore inserito e' " << cont << " volte maggiore del valore inserito precedentemente" << endl;
        return 0;
    }
    
  • Re: Esercizio su C++

    Ah ok grazie .. pensavo fosse sbagliato, evidentemente interpretavo male il risultato. Grazie ancora!
  • Re: Esercizio su C++

    Non funziona.
    La variabile numero_prec andrebbe aggiornata ogni volta.
    Nel ciclo while la prima volta ci entra "per fortuna", visto che la variabile numero non è inizializzata.
  • Re: Esercizio su C++

    Alexv ha scritto:


    Non funziona.
    La variabile numero_prec andrebbe aggiornata ogni volta.
    Nel ciclo while la prima volta ci entra "per fortuna", visto che la variabile numero non è inizializzata.
    si
     int numero;
    deve essere
     int numero = 1;
    Mi era sfuggito, invece precedente l'ho interpretato come il primo numero inserito, visto anche il codice.
    Se invece precedente significa il penultimo numero inserito, allora nel while manca l'istruzione:
    numero_prec = numero;
  • Re: Esercizio su C++

    Ok così dovrebbe funzionare..
    #include <iostream>
    using namespace std;
    
    int main ()
    {
    int numero=1;
    int numero_prec;
    int cont=0;
    
    cout << "inserisci numero" << endl;
    cin >> numero_prec;
    
    while (numero>0)
    {
        cout << "inserisci numero" << endl;
        cin >> numero;
    
        if (numero > numero_prec)
        cont++; 
    
        numero_prec = numero;
    }
    cout << "il valore inserito è " << cont << " volte maggiore del valore inserito precedentemente" << endl;
    return 0; 
    }
    praticamente il programma mi dice quante volte il valore che inserisco è maggiore del primo valore che ho inserito
  • Re: Esercizio su C++

    cavamr ha scritto:


    Ok così dovrebbe funzionare..
    #include <iostream>
    using namespace std;
    
    int main ()
    {
    int numero=1;
    int numero_prec;
    int cont=0;
    
    cout << "inserisci numero" << endl;
    cin >> numero_prec;
    
    while (numero>0)
    {
        cout << "inserisci numero" << endl;
        cin >> numero;
    
        if (numero > numero_prec)
        cont++; 
    
        numero_prec = numero;
    }
    cout << "il valore inserito è " << cont << " volte maggiore del valore inserito precedentemente" << endl;
    return 0; 
    }
    praticamente il programma mi dice quante volte il valore che inserisco è maggiore del primo valore che ho inserito
    Attenzione c'è ambiguità in quello che affermi, il codice che hai postato ti dice quante volte il valore dell'ultimo numero inserito è maggiore del penultimo numero inserito.
    Se esegui il codice presente in questo post e inserisci:
    10
    5
    6
    7
    0
    restituisce 2, perché 7>6 6>5

    Invece il codice senza la riga :
    
    numero_prec = numero;
    
    ti dice quante volte il valore che inserisci è maggiore del primo valore che hai inserito.
    10
    5
    6
    7
    0
    restituisce 0, perché nessun valore è maggiore di 10

    Non è pignoleria, purtroppo tradurre la lingua italiana in un programma, genera innumerevoli ambiguità, se non si usano le parole con precisione.
  • Re: Esercizio su C++

    C'e' ancora un bug.

    Se all'avvio del programma si inserisce subito il valore "0" dovrebbe uscire, ed invece chiede per una seconda volta l'inserimento di un valore.
    In pratica il valore sentinella "0" se inserito la prima volta non viene tenuto in considerazione.

    Ovviamente questa modifica al sorgente comporta tutta una serie di cambiamenti che permetterebbero di rendere più snello ed elegante il tutto.
    In pratica non basta scrivere un semplicissimo "IF" subito dopo il primo "cin":
    cin >> numero_prec;
    sarebbe troppo semplice e poco elegante uscire dal programma con un blocco nell' IF.
  • Re: Esercizio su C++

    Si dovrebbe usare un ciclo do-while, giusto?
  • Re: Esercizio su C++

    Fai una prova,
    è abbastanza semplice ed intuitivo il modo di mettere a posto quest'altro bug, e ti assicuro che se riesci a farlo ti si aprirà, mentalmente, un modo nuovo di sviluppare codice fatto bene.
  • Re: Esercizio su C++

    #include <iostream>
    using namespace std;
    
    int main ()
    {
    int numero;
    int numero_prec;
    int cont=0;
    
    do
    {
    cout <<"inserisci un intero" << endl;
    cin >> numero;
    
    if (numero>numero_prec)
    cont++;
    
    numero_prec=numero;
    } while (numero>0);
    
    cout << "il valore inserito è " << cont << " volte maggiore del valore inserito precedentemente" << endl;
    return 0; 
    }
    
  • Re: Esercizio su C++

    @ cavamr

    Senza cambiare nulla nella logica di funzionamento, si può aumentarne la comprensione d'uso...
    
    #include <iostream>
    using namespace std;
    
    int main ()
    {
        int numero;
        int numero_prec;
        int cont=0;
    
        do
            {
            cout <<"inserisci un intero (0=esci): ";
            cin >> numero;
    
            if (numero>numero_prec){
                cont++;
                cout << endl << "il valore inserito e' maggiore del precedente, Totali contati: " << cont << endl << endl;
            }
    
            numero_prec=numero;
        } while (numero>0);
    
        cout << endl << "i valori inseriti maggiori del precedente sono : " << cont << endl;
        return 0;
    }
    
    La cosa è prettamente estetica, buono studio.
Devi accedere o registrarti per scrivere nel forum
11 risposte