Cours et exercices: les instructions conditionnelles enchaînées

Lors des séances précédentes, nous avons manipulé des conditionnelles simples, permettant de distinguer entre deux cas à traiter avec des actions différentes.

    if ( condition ) {
        bloc d'instruction 1;   // Instructions dans le premier cas
    } else {
        bloc d'instruction 2;   // Instructions dans le deuxième cas
    }

Comment faire lorsqu’il y a plus de deux cas à traiter? Nous allons voir qu’il n’y a pas besoin de nouvelle instruction; il suffit d”enchaîner les instructions conditionnelles.

Exercice:

  • Observez le programme suivant, sans l’exécuter, que fait-il?

  • Vérifiez votre intuition en l’exécutant avec plusieurs valeurs de note.

int note;
std::string resultat;
note = 14;
if        ( note < 0  or note > 20 ) {
    resultat = "La note n'est pas correcte.";
} else {
    if ( note < 10 ) {
        resultat = "Vous avez raté l'examen!";
    } else {
        resultat = "Vous avez réussi l'examen!";
    }
}

resultat

Comment est-ce que cela marche?

Pour gérer trois cas, nous avons simplement distingué entre deux cas (note incorrecte ou correcte), puis distingué ce deuxième cas en deux (examen raté ou réussi).

Comparez maintenant le programme ci-dessus avec le programme ci-dessous:

if ( note < 0  or note > 20 ) {
    resultat = "La note n'est pas correcte.";
} else if ( note < 10 ) {
    resultat = "Vous avez raté l'examen!";
} else {
    resultat = "Vous avez réussi l'examen!";
}

resultat

La seule chose qui a changé, c’est une paire d’accolades en moins (laquelle?), ainsi que l”indentation (les espaces en début de ligne). Les deux programmes sont en fait équivalents (vérifiez le!) car:

  • le deuxième if forme une seule instruction;

  • les accolades ne sont pas requises en C++ lorsqu’un bloc est formé d’une seule instruction.

Cependant le deuxième programme est plus lisible, et exprime une intention différente: il y a trois cas, tous sur le même plan, et non deux cas dont le deuxième avec sous-cas.

À vous de jouer

Recopiez le programme précédent ci-dessous en l’adaptant pour qu’il affiche en plus la mention (de 12 à 14, mention assez bien, de 14 à 16 mention bien et au dessus de 16, mention très bien):

/// BEGIN SOLUTION
if (note < 0  or note > 20) {
    resultat = "La note n'est pas correcte.";
} else if (note < 10) {
    resultat = "Vous avez raté l'examen!";
} else if (note < 12) {
    resultat = "Vous avez réussi l'examen sans mention.";
} else if (note < 14) {
    resultat = "Vous avez réussi l'examen avec mention assez bien.";
} else if (note < 16) {
    resultat = "Vous avez réussi l'examen avec mention bien.";
} else {
    resultat = "Vous avez réussi l'examen avec mention très bien.";
}
/// END SOLUTION
resultat

Bilan

Bravo, vous maîtrisez maintenant les instructions conditionnelles avec cas multiples.