Module 02 · Leçon 2
Conditionnelles généralisée et à choix
Ce que vous saurez faire
- Écrire une cascade Si…Sinon Si…Sinon
- Utiliser la structure Selon pour des choix multiples
- Choisir la bonne structure selon le nombre de cas
Avant de commencer
Vous voulez afficher la mention en fonction de la note. Avec
Si...Sinon imbriqué, le code devient illisible dès 3-4 cas.
Existe-t-il une structure plus claire ?
1. La conditionnelle généralisée : Si…Sinon Si…Sinon
Si note >= 16 Alors
mention ← "Très Bien"
Sinon Si note >= 14 Alors
mention ← "Bien"
Sinon Si note >= 12 Alors
mention ← "Assez Bien"
Sinon Si note >= 10 Alors
mention ← "Passable"
Sinon
mention ← "Recalé"
FinSi
Si note >= 16 Alors
mention ← "Très Bien"
Sinon Si note >= 14 Alors
mention ← "Bien"
Sinon Si note >= 12 Alors
mention ← "Assez Bien"
Sinon Si note >= 10 Alors
mention ← "Passable"
Sinon
mention ← "Recalé"
FinSi
IF note >= 16 THEN
mention := 'Très Bien'
ELSE IF note >= 14 THEN
mention := 'Bien'
ELSE IF note >= 12 THEN
mention := 'Assez Bien'
ELSE IF note >= 10 THEN
mention := 'Passable'
ELSE
mention := 'Recalé';
2. La structure à choix : Selon
Quand on compare une même variable à plusieurs valeurs précises,
Selon (CASE en Pascal) est plus lisible.
Selon jour Faire
1, 2, 3, 4, 5 : Ecrire("Semaine")
6, 7 : Ecrire("Week-end")
Sinon : Ecrire("Jour invalide")
FinSelon
Selon jour Faire
1, 2, 3, 4, 5 : Ecrire("Semaine")
6, 7 : Ecrire("Week-end")
Sinon : Ecrire("Jour invalide")
FinSelon
CASE jour OF
1, 2, 3, 4, 5 : Writeln('Semaine');
6, 7 : Writeln('Week-end');
ELSE
Writeln('Jour invalide');
END;
Règles importantes
- La variable testée doit être de type ordinal (entier, caractère, booléen, énuméré). Pas de réel, pas de chaîne.
- Les branches sont exclusives : une seule s'exécute.
- On peut grouper des valeurs avec
,ou des intervalles avec..(Pascal accepte1..5).
CASE c OF
'a'..'z', 'A'..'Z' : Writeln('Lettre');
'0'..'9' : Writeln('Chiffre');
ELSE
Writeln('Autre');
END;
3. Quand utiliser quoi ?
| Situation | Structure |
|---|---|
| 2 cas | Si…Sinon |
Plusieurs intervalles >= | Si…Sinon Si…Sinon |
| Plusieurs valeurs précises (énuméré, entier petit) | Selon |
| Type réel ou chaîne | Si (Selon interdit) |
4. Exercices
Lire un mois (1 à 12), afficher la saison. Décembre, Janvier, Février = Hiver ; Mars-Mai = Printemps ; Juin-Août = Été ; Septembre-Novembre = Automne.
Voir le corrigé
CASE mois OF
12, 1, 2 : Writeln('Hiver');
3..5 : Writeln('Printemps');
6..8 : Writeln('Été');
9..11 : Writeln('Automne');
ELSE
Writeln('Mois invalide');
END;
Calculer le tarif d'entrée à la piscine selon l'âge :
0..5: gratuit6..12: 2 DT13..17: 4 DT18..64: 6 DT65 et plus: 3 DT
Voir le corrigé
PROGRAM Piscine;
VAR
age : integer;
tarif : real;
BEGIN
Write('Âge : ');
Readln(age);
CASE age OF
0..5 : tarif := 0;
6..12 : tarif := 2;
13..17 : tarif := 4;
18..64 : tarif := 6;
ELSE
tarif := 3; { 65 et plus }
END;
Writeln('Tarif : ', tarif:3:2, ' DT');
END.
Lire un caractère, indiquer s'il s'agit d'une voyelle, d'une consonne ou d'un autre caractère. Gérer majuscules et minuscules.
Voir le corrigé
PROGRAM Lettre;
VAR
c : char;
BEGIN
Readln(c);
CASE c OF
'a', 'e', 'i', 'o', 'u', 'y',
'A', 'E', 'I', 'O', 'U', 'Y' : Writeln('Voyelle');
'b'..'d', 'f'..'h', 'j'..'n', 'p'..'t', 'v'..'x', 'z',
'B'..'D', 'F'..'H', 'J'..'N', 'P'..'T', 'V'..'X', 'Z' : Writeln('Consonne');
ELSE
Writeln('Autre');
END;
END.
5. Erreurs fréquentes au bac
- Utiliser
Selonsur une variable réelle → erreur de compilation. - Oublier
Sinon(ouELSEPascal) → cas non couverts silencieusement. - Mauvais ordre des conditions dans
Sinon Si(du plus restrictif au moins).
6. Quiz
Quiz (5 questions)
La structure Selon (CASE) accepte une variable de type :
Pour gérer les notes >= 10 et plusieurs intervalles, on préfère :
Que se passe-t-il si aucune branche d'un CASE ne matche et qu'il n'y a pas de ELSE ?
En Pascal, peut-on écrire `CASE moyenne OF 10..20 : ...` ?
Dans `Si note >= 10 Sinon Si note >= 14`, où est l'erreur ?