Les instructions conditionnelles enchaînées

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 instructions 1;   // Instructions dans le premier cas
    } else {
        bloc d instructions 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#

À faire

  1. Mettre le programme ci-dessus et ci-dessous sous forme d’une fonction

  2. Leur dire d’essayer sur quelques exemples

  3. Êtes vous convaincus que votre fonction est correcte?

  4. Rajouter une cellule de test systématique affichant la note et le résultat pour toutes les notes entre -1 et 21

Recopiez ci-dessous le programme précédent en l’adaptant pour qu’il affiche en plus la mention éventuelle :

  • de 12 à 14 exclu, mention assez bien;

  • de 14 à 16 exclu, mention bien;

  • 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.