If else annidati malfunzionamento

di il
5 risposte

If else annidati malfunzionamento

Stavo eseguendo un esercizio per impratichirmi sulla risoluzione di un problema con i costrutti if else.
il testo dell'esercizio recitava :
Scrivere un programma in grado di eseguire ripetutamente la conversione di un voto numerico tra 0 e 10 in un giudizio, secondo il seguente schema:
voto minore di 5 = giudizio insufficiente
voto maggiore di 5 e minore o uguale a 6.5 = giudizio sufficiente
voto maggiore di 6.5 e minore o uguale a 7.5 = giudizio buono
voto maggiore di 7.5 = giudizio ottimo

L’input deve essere un numero reale tra 0 e 10, oppure un numero negativo per indicare l'uscita dal programma. L’output una stringa di caratteri con il giudizio, oppure un messaggio di errore.
- - - - - - - - - - - - - -- -- - -- - - - - - - - - - -- - - - - - - - -- - - - - - - - -
mi sono fatto un programmino con una cascata di if else . tutto bene tranne che appena do dei valori che devono
restituire "buono" o "ottimo" , mi compare sempre il messaggio sufficiente. gli altri casi invece funzionano.
riporto il codice da me scritto.

#include <iostream>
#include <limits>
///#include <cstdint>
#include <string>
#include <sstream>
using namespace std;



int main ()

{
    float voto = 0;
    cout << "prego inserire il voto: ";
    cin >> voto;
    cout<< "il voto da voi espresso e':  " << voto << endl;


if (voto <0 || voto>10)
{
    cout<< "error\n";
}
else if (voto==0 || voto< 5)
{
    cout<< "insufficiente\n";
}
else if (voto > 5 || voto<= 6.5)
{
    cout << "sufficiente\n";
}
else if (voto >6.5 || voto== 7)
{
    cout << "buono\n";
}
else if (voto >= 7.5 || voto <= 10)
{
    cout << "ottimo\n";
}


    return 0;
}
rispetto al testo dell'esecizio al numero negativo ho fatto corrispondere il messaggio di errore

5 Risposte

  • Re: If else annidati malfunzionamento

    Attento alla differenza tra || (or) e && (and) ... sicuro che ci vogliano le || (or) ?
  • Re: If else annidati malfunzionamento

    Ho usato gli || (or) per poter "tagliare" un range di intervento. se avessi usato gli && (and) avrei dovuto avere vere tutte e due le condizioni
    per dar seguito alla stampa del messaggio.
    infatti nel range dei numeri negativi oppure al di sopra del valore 10 il programma mi da error, OK!;
    da zero a valore<5 mi da insufficiente, OK!;
    da == 5 (ho apportato una modifica altrimenti il valore 5 non sarebbe compreso in nessun range) a <=6.5 mi da sufficiente ,OK!
    da > 6.5 a ==7 mi da buono ,OK
    da >= 7.5 a <= 10 al posto di ottimo mi da ancora buono.
    non capisco dove si "annida" il guasto
  • Re: If else annidati malfunzionamento

    Hai sbagliato a indicare i limiti. Se guardi hai indicato "==7" anziché "<=7", e poi hai "<5" e ">5", il che esclude il caso "==5"; altrettanto esclusi dal tuo controllo sono i valori >7 e <7.5. L'esercizio richiede poi che il programma faccia qualcosa "ripetutamente", il che lascia intendere la richiesta di fare qualcosa di ciclico. Inoltre credo proprio che l'osservazione sugli || al posto degli && sia più che opportuna. Dai un'occhiata qui sotto, per dire. Ovvio che è solo un esempio, perché si potrebbe "risolvere" anche in altri modi.
    #include <iostream>
    using namespace std;
    
    int main () {
        float voto = 0.0f;
    
        do {
            cout << "\nprego inserire il voto: ";
            cin >> voto;
    
            if (voto>=0.0f && voto<=10.0f) {
                cout << "il voto da voi espresso e':  " << voto << endl;
    
                if (voto<=5.0f) {
                    cout << "insufficiente\n";
                }
                else if (voto<=6.5f) {
                    cout << "sufficiente\n";
                }
                else if (voto<=7.5f) {
                    cout << "buono\n";
                }
                else {
                    cout << "ottimo\n";
                }
            }
            else if(voto>10.0f) {
                cout << "errore\n";
            }
        } while (voto>=0.0f);
    
        return 0;
    }
    
  • Re: If else annidati malfunzionamento

    Questo

    if (voto <0 || voto>10)

    va bene ma per gli altri range ti ho detto cosa non va ... riflettici meglio ...
  • Re: If else annidati malfunzionamento

    Grazie per gli spunti. mi metto all'opera.
Devi accedere o registrarti per scrivere nel forum
5 risposte