Esercizio su C++

di Anonimizzato30166 il
11 risposte
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

  • 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;
    }
    
  • Ah ok grazie .. pensavo fosse sbagliato, evidentemente interpretavo male il risultato. Grazie ancora!
  • 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.
  • 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;
  • 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
  • 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.
  • 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.
  • Si dovrebbe usare un ciclo do-while, giusto?
  • 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.
  • #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; 
    }
    
  • @ 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