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

  1. Observez la fonction suivante, sans l’exécuter, que fait-elle?

  2. Vérifiez votre intuition en l’appelant sur plusieurs notes.

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

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 la fonction ci-dessus avec la fonction ci-dessous:

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

Explications

La seule différence, c’est une paire d’accolades en moins (laquelle?), ainsi que l”indentation (les espaces en début de ligne). Les deux fonctions sont en fait équivalentes (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 un sous-cas.

À vous de jouer#

Exercice

  1. Recopiez ci-dessous la fonction précédente en l’adaptant pour qu’elle indique en plus la mention éventuelle :

    • de 12 inclus à 14 exclu, mention assez bien;

    • de 14 inclus à 16 exclu, mention bien;

    • au dessus de 16, mention très bien.

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

Exercice (suite)

  1. Essayez votre fonction sur quelques exemples.

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

commentaire(14)

Exercice (fin)

  1. Vérifiez le ci-dessous :

#include <iostream>
for (int note = -1; note < 22; note++) {
    cout << "Note : " << note << " Commentaire : " << commentaire(note) << endl;
}

Bilan#

🎉 Bravo, vous maîtrisez maintenant les instructions conditionnelles enchaînées pour traiter des cas multiples.