Module 02 · Leçon 1
Structure conditionnelle : l'alternative
Ce que vous saurez faire
- Écrire une instruction Si…Alors…Sinon
- Évaluer une condition booléenne composée
- Imbriquer plusieurs conditionnelles
Avant de commencer
Tout programme a besoin de prendre des décisions : si la moyenne est supérieure à 10, l'élève est reçu, sinon il est recalé. Comment exprimer cela dans un algorithme ?
1. La structure Si…Alors…Sinon
Si moyenne >= 10 Alors
Ecrire("Reçu")
Sinon
Ecrire("Recalé")
FinSi
Si moyenne >= 10 Alors
Ecrire("Reçu")
Sinon
Ecrire("Recalé")
FinSi
IF moyenne >= 10 THEN
Writeln('Reçu')
ELSE
Writeln('Recalé');
Variante : Si sans Sinon
Si stock = 0 Alors
Ecrire("Rupture de stock")
FinSi
Quand on ne veut rien faire dans le cas faux, on omet le Sinon.
2. Conditions composées
Une condition peut combiner plusieurs tests avec les opérateurs logiques :
| Algo | Pascal | Sens |
|---|---|---|
ET | AND | Les deux conditions doivent être vraies |
OU | OR | Au moins une des deux doit être vraie |
NON | NOT | Inverse la valeur |
Exemple : tester une plage
Si (note >= 0) ET (note <= 20) Alors
Ecrire("Note valide")
Sinon
Ecrire("Note invalide")
FinSi
3. Imbrication
Quand il y a plus de deux cas, on peut imbriquer :
Si note >= 16 Alors
Ecrire("Très Bien")
Sinon
Si note >= 14 Alors
Ecrire("Bien")
Sinon
Si note >= 12 Alors
Ecrire("Assez Bien")
Sinon
Ecrire("Passable ou recalé")
FinSi
FinSi
FinSi
C'est lisible mais l'imbrication profonde vite illisible. La leçon suivante introduit la conditionnelle généralisée qui résout ce problème.
4. Exercices
Lire deux entiers a et b, afficher le plus grand.
Voir le corrigé
PROGRAM PlusGrand;
VAR
a, b : integer;
BEGIN
Readln(a, b);
IF a > b THEN
Writeln('Le plus grand : ', a)
ELSE
Writeln('Le plus grand : ', b);
END.
Une année est bissextile si elle est divisible par 4 et non divisible par 100, ou bien divisible par 400. Écrire un programme qui lit une année et indique si elle est bissextile.
Voir le corrigé
PROGRAM Bissextile;
VAR
a : integer;
bis : boolean;
BEGIN
Write('Année : ');
Readln(a);
bis := ((a MOD 4 = 0) AND (a MOD 100 <> 0)) OR (a MOD 400 = 0);
IF bis THEN
Writeln(a, ' est bissextile')
ELSE
Writeln(a, ' n''est pas bissextile');
END.
Lire trois entiers strictement positifs a, b, c. Indiquer si on peut
former un triangle (somme de deux côtés > troisième), et si oui s'il
est équilatéral, isocèle ou quelconque.
Voir le corrigé
PROGRAM Triangle;
VAR
a, b, c : integer;
BEGIN
Readln(a, b, c);
IF (a + b <= c) OR (b + c <= a) OR (a + c <= b) THEN
Writeln('Pas un triangle')
ELSE
BEGIN
IF (a = b) AND (b = c) THEN
Writeln('Équilatéral')
ELSE IF (a = b) OR (b = c) OR (a = c) THEN
Writeln('Isocèle')
ELSE
Writeln('Quelconque');
END;
END.
5. Erreurs fréquentes au bac
- Mettre un
;avantELSEen Pascal → erreur de compilation. - Oublier les parenthèses autour des sous-conditions composées.
- Confondre
=(égalité) et:=(affectation). - Ne pas couvrir le cas frontière (
>=vs>).
6. Quiz
Quiz (5 questions)
Que vaut `(5 > 3) ET (2 = 2)` ?
En Pascal, l'instruction correcte est :
Quelle expression teste si `x` est dans `[0, 100]` ?
Que fait `Si NON (a > b) Alors Ecrire(b)` ?
Combien de cas distincts peut-on gérer avec un Si...Sinon imbriqué de profondeur 2 ?