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 la fonction suivante, sans l’exécuter, que fait-elle?
Vérifiez votre intuition en l’appelant sur plusieurs notes.
Pour les curieux : à quoi sert la ligne suivante
Le type std::string
de la bibliothèque standard de C++ permet de manipuler des chaînes de caractères (du texte).
L’incantation magique ci-dessous permet d’utiliser le raccourci string
.
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
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)
Essayez votre fonction sur quelques exemples.
Êtes vous convaincus que votre fonction est correcte?
commentaire(14)
Exercice (fin)
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.