Switch case

di il
5 risposte

Switch case

Salve,
stavo facendo un esercizio e la prima parte del codice è piuttosto semplice eccola:

#include <cstdlib>
#include <iostream>
#include <math.h>

using namespace std;

/*
 * 
 */
int main(int argc, char** argv) {
    cout << "Inserire i voti, separati da spazi e terminanti con zero:" << endl;
    const int MIN = 18, MAX = 33;
    const double FATTORE = 100;
    int min = 33, max = 18, voto, quanti = 0;
    double media = 0;
    
    do {
        cin >> voto;
        if (voto == 0)
            break;
        
        if (voto < min)
            min = voto;
        
        if (voto > max)
            max = voto;
        
        media = media + voto;
        quanti = quanti + 1;
    } while (voto != 0);
    
    media = media / quanti;
    cout << "voto minimo:\t" << min << endl
            << "voto massimo:\t" << max << endl
            << "voto medio:\t" << (int) (media * FATTORE + 0.5) / FATTORE;
però non ho capito come funziona la parte dello switch che ho spudoratamente copiato

 switch ((int) ((media - MIN) / (MAX - MIN)*5)) {
            case 0: cout << "\t(sufficiente)";
            break;
        case 1: cout << "\t(discreto)";
            break;
        case 2: cout << "\t(buono)";
            break;
        case 3: cout << "\t(distinto)";
            break;
        case 4: cout << "\t(ottimo)";
            break;
        default: cout << "\t(eccellente)";
    }
    cout << endl;
    return 0;
}
come fa a sapere quando è un caso o quando è un altro?? in altri esercizi ho un listato dove mi identifico con i casi ad esempio i mesi che hanno 31 giorni... basta scrivere:
codice non dell'esercizio

switch(mesi){
case 1: case 3: case 5: ..........
          cout << quello ke vuoi;
          break;
...........
}
ma nel codice sopra non riesco a capire da dove prende la divisione per capire se è sufficiente, buono o altro...

grazie

5 Risposte

  • Re: Switch case

    Prima viene eseguita questa espressione

    (int) ((media - MIN) / (MAX - MIN)*5)

    e dal risultato viene scelta la case ... è semplice
  • Re: Switch case

    Abbi pazienza (e beata ignoranza, ovviamente la mia!), l'espressione viene risolta ed è ok questo, ma poi come decide quale caso utilizzare? E' questo che ho difficoltà a capire, ovvero il parametro per cui mi sceglie un caso o l'atro. Ho provato anche a capirci qualcosa con il debug ma non ho acquisito particolari delucidazioni, se per cortesia puoi dirmi perché sceglie un caso invece di un altro e come..
  • Re: Switch case

    Scusa ma mi sembra ovvio dalla mia risposta precedente ...

    Quell'espressione ha un risultato, sei d'accordo?

    Se il risultato è 0 sceglie il case 0, se il risultato è 1 sceglie il case 1 e così via ...
  • Re: Switch case

    Ok grazie scusa se son sorbo hihi
    Ho scomposto il codice per venirne a capo mettendolo così:
    
     media;
        media=(media - MIN) / (MAX - MIN)*5;
        lround(media);
        switch ((int) media) {
                case 0: cout << "\t(sufficiente)";
                break;
            case 1: cout << "\t(discreto)";
                break;
            case 2: cout << "\t(buono)";
                break;
            case 3: cout << "\t(distinto)";
                break;
            case 4: cout << "\t(ottimo)";
                break;
            default: cout << "\t(eccellente)";
        }
    
    brutto ma almeno ho visto i valori con gli 'watch' e la tua spiegazione ha avuto riscontro,
    purtoppo la suddivisione è piuttosto approssimatva.. a me migliorarla
  • Re: Switch case

    Scritto così non cambia nulla per lo switch ... il funzionamento è il medesimo, semplicissimo ...
Devi accedere o registrarti per scrivere nel forum
5 risposte