Ch. 03 · Leçon 1
Les structures de contrôle conditionnelles
Ce que vous saurez faire
- →Distinguer les trois formes d'instructions conditionnelles (simple, généralisée, à choix)
- →Écrire la syntaxe d'une structure Si...Alors...Sinon en analyse et en Pascal
- →Utiliser la forme généralisée avec des Sinon Si imbriqués
- →Mettre en œuvre la structure Selon...Faire (Case...Of) avec un sélecteur scalaire
- →Traduire un algorithme conditionnel en programme Pascal complet
id: 33-208-structures-controle-conditionnelles slug: 33-208-structures-controle-conditionnelles titre: Les structures de contrôle conditionnelles chapitre: 3 chapitre_titre: Les structures de contrôle conditionnelles lecon: 1 niveau: 4eme-sci ordre: 1 prerequis: [] duree_estimee_min: 60 mots_cles:
- conditionnelle
- si
- alors
- sinon
- selon
- case
- if
- then
- else
- pascal langages:
- analyse
- pascal objectifs:
- Distinguer les trois formes d'instructions conditionnelles (simple, généralisée, à choix)
- Écrire la syntaxe d'une structure Si...Alors...Sinon en analyse et en Pascal
- Utiliser la forme généralisée avec des Sinon Si imbriqués
- Mettre en œuvre la structure Selon...Faire (Case...Of) avec un sélecteur scalaire
- Traduire un algorithme conditionnel en programme Pascal complet status: published source_pdf: 33_208.pdf source_pages:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12 kind: cours
Les structures de contrôle conditionnelles
I. Définition générale
Il existe trois formes d'instructions conditionnelles :
- Forme simple (réduite ou alternative)
- Forme généralisée
- Forme à choix
Leçon 1 — La structure conditionnelle simple
A. La forme réduite
Vocabulaire et syntaxe
[Init]
Si condition Alors
Instruction 1
Instruction 2
...
Instruction N
FinSi
[Init]
Si condition Alors
Instruction 1
Instruction 2
...
Instruction N
FinSi
{Init}
IF condition THEN
Begin
Instruction_1;
Instruction_2;
...
Instruction_N;
End;
Activité 1 — Racine carrée d'un réel
Écrire un algorithme qui permet de calculer la racine carrée d'un réel x (uniquement si x est positif).
0) Début racine
1) Ecrire("Donner un réel "), lire(x)
2) Si x ≥ 0 alors
écrire("La racine carrée est = ", racine_carrée(x))
FinSi
3) Fin racine
Activité 2 — Parité d'un entier (forme réduite)
Écrire un programme qui permet de vérifier la parité d'un entier donné en utilisant la forme simple réduite.
0) Début parité
1) Ecrire("Donner un entier "), lire(n)
2) message ← "Pair"
3) Si n mod 2 ≠ 0 alors
message ← "impair"
FinSi
4) Ecrire(n, " est ", message)
5) Fin parité
T.D.O
| Objet | Type/Nature | Rôle |
|---|---|---|
| n | Entier | Entier à vérifier (parité) |
| message | chaîne | Contient le message à afficher |
0) Début parité
1) Ecrire("Donner un entier "), lire(n)
2) message ← "Pair"
3) Si n mod 2 ≠ 0 alors
message ← "impair"
FinSi
4) Ecrire(n, " est ", message)
5) Fin parité
T.D.O
| Objet | Type/Nature | Rôle |
|---|---|---|
| n | Entier | Entier à vérifier (parité) |
| message | chaîne | Contient le message à afficher |
program parite;
uses wincrt;
var
n : integer;
message : string;
begin
writeln('Donner un entier = ');
readln(n);
message := 'pair';
if n mod 2 <> 0 then
message := 'impair';
writeln(n, ' est ', message);
end.
B. La forme alternative
Vocabulaire et syntaxe
[Init]
Si condition Alors
Instruction 1 de TR1
Instruction 2 de TR1
...
Instruction m de TR1
Sinon
Instruction 1 de TR2
Instruction 2 de TR2
...
Instruction n de TR2
FinSi
[Init]
Si condition Alors
Instruction 1 de TR1
Instruction 2 de TR1
...
Instruction m de TR1
Sinon
Instruction 1 de TR2
Instruction 2 de TR2
...
Instruction n de TR2
FinSi
{Init}
IF condition THEN
Begin
Instruction_1_de_TR1;
Instruction_2_de_TR1;
...
Instruction_m_de_TR1;
End
ELSE
Begin
Instruction_1_de_TR2;
Instruction_2_de_TR2;
...
Instruction_n_de_TR2;
End;
Activité — Parité d'un entier (forme alternative)
0) Début parité2
1) Ecrire("Donner un entier "), lire(n)
2) Si n mod 2 = 0 alors
écrire("Pair")
sinon
écrire("impair")
FinSi
3) Fin parité
T.D.O
| Objet | Type/Nature | Rôle |
|---|---|---|
| n | Entier | Entier à vérifier (parité) |
0) Début parité2
1) Ecrire("Donner un entier "), lire(n)
2) Si n mod 2 = 0 alors
écrire("Pair")
sinon
écrire("impair")
FinSi
3) Fin parité
T.D.O
| Objet | Type/Nature | Rôle |
|---|---|---|
| n | Entier | Entier à vérifier (parité) |
program parite2;
uses wincrt;
var
n : integer;
begin
writeln('Donner un entier ');
readln(n);
if n mod 2 = 0 then
writeln('Pair')
{on ne met pas un ; avant le else de if}
else
writeln('impair');
End.
Leçon 2 — La structure conditionnelle généralisée
I. Définition
Vocabulaire et syntaxe
[Init]
Si condition 1 Alors
Traitement 1
Sinon Si condition 2 Alors
Traitement 2
Sinon Si condition 3 Alors
Traitement 3
....
Sinon Si condition N-1 Alors
Traitement N-1
Sinon
Traitement N
FinSi
[Init]
Si condition 1 Alors
Traitement 1
Sinon Si condition 2 Alors
Traitement 2
Sinon Si condition 3 Alors
Traitement 3
....
Sinon Si condition N-1 Alors
Traitement N-1
Sinon
Traitement N
FinSi
{Init}
IF condition_1 THEN
Traitement_1
ELSE IF condition_2 THEN
Traitement_2
ELSE IF condition_3 THEN
Traitement_3
....
ELSE IF condition_N-1 THEN
Traitement_N-1
ELSE
Traitement_N;
Activité — Résolution d'une équation du 1er degré
Écrire un programme qui résout l'équation du premier degré : ax + b = 0.
0) Début Equation
1) Ecrire("Donner a : "), lire(a)
2) Ecrire("Donner b : "), lire(b)
3) Si a ≠ 0 alors
S ← -b/a
Ecrire("La solution est ", S)
sinon
Si b = 0 alors
Ecrire("La solution est IR")
Sinon
Ecrire("La solution est vide")
FinSi
FinSi
4) Fin Equation
T.D.O
| Objet | Type/nature | Rôle |
|---|---|---|
| a, b | Réel | Paramètres à saisir |
| S | Réel | Une solution de l'équation à calculer |
0) Début Equation
1) Ecrire("Donner a : "), lire(a)
2) Ecrire("Donner b : "), lire(b)
3) Si a ≠ 0 alors
S ← -b/a
Ecrire("La solution est ", S)
sinon
Si b = 0 alors
Ecrire("La solution est IR")
Sinon
Ecrire("La solution est vide")
FinSi
FinSi
4) Fin Equation
T.D.O
| Objet | Type/nature | Rôle |
|---|---|---|
| a, b | Réel | Paramètres à saisir |
| S | Réel | Une solution de l'équation à calculer |
program equation;
uses wincrt;
var
a, b, s : real;
begin
writeln('Donner a : '); readln(a);
writeln('Donner b : '); readln(b);
if (a <> 0) then
begin
s := -b/a;
writeln('La solution est', s:5:2);
End
else
if (b = 0) then
writeln('La solution est IR')
else
writeln('La solution est vide');
end.
Exercice — Décision selon moyenne
Écrire un programme qui permet de saisir une moyenne (moy) puis affiche la décision correspondante :
- ADMIS si
moy >= 10 - CONTROLE si
9 <= moy < 10 - REDOUBLE si
moy < 9
Voir le corrigé
Pré-analyse
- But : afficher la décision.
- Données :
moy. - Formules : structure Si généralisée sur
moy.
Analyse
Nom : Décision
Résultat = Ecrire(message)
message = [] Si moy >= 10 alors message ← "ADMIS"
Sinon
Si moy >= 9 alors message ← "CONTROLE"
Sinon message ← "REDOUBLE"
FinSi
FinSi
moy = Donnée("Donner une moyenne ")
Fin Décision
T.D.O
| Objet | Type/nature |
|---|---|
| Moy | Réel |
| Message | Chaîne de caractère |
0) Début décision
1) Écrire("Donner une moyenne"), lire(Moy)
2) Si moy >= 10 alors
message ← "ADMIS"
Sinon
Si moy >= 9 alors
message ← "CONTROLE"
Sinon
message ← "REDOUBLE"
FinSi
FinSi
3) Ecrire(message)
4) Fin décision
0) Début décision
1) Écrire("Donner une moyenne"), lire(Moy)
2) Si moy >= 10 alors
message ← "ADMIS"
Sinon
Si moy >= 9 alors
message ← "CONTROLE"
Sinon
message ← "REDOUBLE"
FinSi
FinSi
3) Ecrire(message)
4) Fin décision
program decision;
uses wincrt;
var
moy : real;
message : string;
Begin
write('Donner une moyenne'); readln(Moy);
if moy >= 10 then
message := 'ADMIS'
else
if moy >= 9 then
message := 'CONTROLE'
else
message := 'REDOUBLE';
Writeln(Message);
end.
Exercice — Plusieurs mots dans une chaîne
Saisir une chaîne de caractères et vérifier si elle est composée de plusieurs mots.
Voir le corrigé
0) Début mots
1) Ecrire("Saisir une chaine de caractère :"), lire(ch)
2) Si pos(" ", ch) = 0 alors
écrire("un seul mot")
sinon
écrire("Plusieurs mots")
FinSi
3) Fin Mots
T.D.O
| Objet | Type/Nature | Rôle |
|---|---|---|
| Ch | chaîne | Chaîne à saisir |
Exercice — Ajouter 5 minutes à une heure
Écrire un programme qui permet de saisir un temps (heure et minute), lui ajoute 5 minutes puis l'affiche.
Exemples :
| Heure | Minute | Après 5 minutes |
|---|---|---|
| 10 | 20 | 10 : 25 |
| 10 | 57 | 11 : 02 |
| 23 | 55 | 00 : 00 |
Voir le corrigé
0) Début plus5min
1) Ecrire("Heure: "), lire(hh)
2) Ecrire("Minute: "), lire(mm)
3) Si mm < 55 alors
mm ← mm + 5
sinon
Si hh < 23 alors
hh ← hh + 1
mm ← mm - 55
sinon
hh ← 0
mm ← mm - 55
FinSi
FinSi
4) Ecrire("Après 5 min : ", hh, " :", mm)
5) Fin Plus5min
0) Début plus5min
1) Ecrire("Heure: "), lire(hh)
2) Ecrire("Minute: "), lire(mm)
3) Si mm < 55 alors
mm ← mm + 5
sinon
Si hh < 23 alors
hh ← hh + 1
mm ← mm - 55
sinon
hh ← 0
mm ← mm - 55
FinSi
FinSi
4) Ecrire("Après 5 min : ", hh, " :", mm)
5) Fin Plus5min
program plus5min;
uses wincrt;
var
hh, mm : integer;
Begin
write('Heure : '); readln(hh);
write('minute : '); readln(mm);
if mm < 55 then
mm := mm + 5
else
if hh <> 23 then
begin
hh := hh + 1;
mm := mm + 5 - 60;
end
else
begin
hh := 0;
mm := mm - 55;
end;
writeln('Après 5 min : ', hh, ' :', mm);
End.
Leçon 3 — La structure conditionnelle à choix
I. Définition
Vocabulaire et syntaxe
[Init]
Selon sélecteur Faire
Valeur 1 : Action 1
Valeur 2 : Action 2-1
Action 2-2
Action 2-n
Valeur 3 : Action 3
Val4, valeur 6, valeur 8 : Action 4
Val5, valeur 7, valeur 9 : Action 5
Valeur 10 .. Valeur 19 : Action 6
.....
Valeur N : Action N
Sinon
Action R
FinSelon
[Init]
Selon sélecteur Faire
Valeur 1 : Action 1
Valeur 2 : Action 2-1
Action 2-2
Action 2-n
Valeur 3 : Action 3
Val4, valeur 6, valeur 8 : Action 4
Val5, valeur 7, valeur 9 : Action 5
Valeur 10 .. Valeur 19 : Action 6
.....
Valeur N : Action N
Sinon
Action R
FinSelon
Case selecteur OF
Valeur_1 : Action_1;
Valeur_2 : Begin
Action_2_1;
Action_2_2;
...
Action_2_n;
End;
Valeur_3 : Action_3;
Val_4, valeur_6, valeur_8 : Action_4;
Val_5, valeur_7, valeur_9 : Action_5;
Valeur_10 .. Valeur_19 : Action_6;
.....
Valeur_N : Action_N;
ELSE
Action_R;
END;
Activité — Saison d'un mois
Écrire un programme qui permet de saisir le n° d'un mois puis affiche la saison correspondante.
| Mois | Saison |
|---|---|
| 12, 1, 2 | saison hiver |
| 3, 4, 5 | saison printemps |
| 6, 7, 8 | saison été |
| 9, 10, 11 | saison automne |
Exemple : n°mois = 7 → affiche saison été.
0) Début Saison
1) Ecrire("Donner le n° de mois"), lire(mois)
2) Selon mois faire
12, 1, 2 : M ← "saison hiver"
3 .. 5 : M ← "saison printemps"
6 .. 8 : M ← "saison été"
9 .. 11 : M ← "saison automne"
sinon
M ← "Erreur"
FinSelon
3) Écrire(M)
4) Fin saison
T.D.O
| Objet | Type/Nature | Rôle |
|---|---|---|
| Mois | Entier | Saisir le mois |
| M | Chaîne de caractère | Contient le message à afficher |
0) Début Saison
1) Ecrire("Donner le n° de mois"), lire(mois)
2) Selon mois faire
12, 1, 2 : M ← "saison hiver"
3 .. 5 : M ← "saison printemps"
6 .. 8 : M ← "saison été"
9 .. 11 : M ← "saison automne"
sinon
M ← "Erreur"
FinSelon
3) Écrire(M)
4) Fin saison
T.D.O
| Objet | Type/Nature | Rôle |
|---|---|---|
| Mois | Entier | Saisir le mois |
| M | Chaîne de caractère | Contient le message à afficher |
Program saison;
uses wincrt;
var
mois : integer;
m : string;
begin
writeln('Donner le n° de mois'); readln(mois);
case mois of
12, 1, 2 : M := 'saison hiver';
3..5 : M := 'saison printemps';
6..8 : M := 'saison été';
9..11 : M := 'saison automne';
else
M := 'Erreur';
End;
writeln(M);
End.
Exercice — Nature d'une touche
Écrire un programme intitulé TOUCHE, qui affiche selon le cas la nature du caractère (consonne, voyelle, chiffre ou symbole) correspondant à une touche saisie.
On considère que le clavier est verrouillé en minuscule.
Voir le corrigé
Program touche;
uses wincrt;
var
nature : string;
c : char;
begin
writeln('Taper une touche');
readln(c);
case c of
'a'..'z', 'A'..'Z' :
if upcase(c) in ['A', 'E', 'I', 'O', 'U', 'Y'] then
nature := 'voyelle'
else
nature := 'consonne';
'0'..'9' : nature := 'Chiffre';
else
nature := 'symbole';
end;
writeln(nature);
end.
Exercice — Nombre de jours d'un mois
Écrire un programme qui permet d'afficher le nombre de jours d'un mois donné (en tenant compte des années bissextiles pour février).
Voir le corrigé
0) Début mois
1) Ecrire("Donner le n° de mois"), lire(n)
2) Selon n faire
1, 3, 5, 7, 8, 10, 12 : nb ← 31
4, 6, 9, 11 : nb ← 30
2 : Ecrire("Donner l'année "), lire(a)
Si (a mod 400 = 0) ou
((a mod 4 = 0) et (a mod 100 <> 0))
alors
nb ← 29
sinon
nb ← 28
FinSi
FinSelon
3) Ecrire("Le nombre de jour est ", nb)
4) Fin mois
0) Début mois
1) Ecrire("Donner le n° de mois"), lire(n)
2) Selon n faire
1, 3, 5, 7, 8, 10, 12 : nb ← 31
4, 6, 9, 11 : nb ← 30
2 : Ecrire("Donner l'année "), lire(a)
Si (a mod 400 = 0) ou
((a mod 4 = 0) et (a mod 100 <> 0))
alors
nb ← 29
sinon
nb ← 28
FinSi
FinSelon
3) Ecrire("Le nombre de jour est ", nb)
4) Fin mois
Program mois;
uses wincrt;
var
n, a, nb : integer;
begin
Write('Donner le n° de mois '); readln(n);
case n of
1, 3, 5, 7, 8, 10, 12 : nb := 31;
4, 6, 9, 11 : nb := 30;
2 : begin
write('Donner l''année '); readln(a);
if (a mod 400 = 0) OR
((a mod 4 = 0) AND (a mod 100 <> 0)) then
nb := 29
else
nb := 28;
End;
End;
writeln('Le nombre de jour est ', nb);
End.
Application complémentaire — Régulateur de température
Traduction en Pascal d'un algorithme REGULATEUR qui déclenche une alarme si la température sort de l'intervalle [18, 24].
PROGRAM REGULATEUR;
USES WINCRT;
VAR
Temp : INTEGER;
Message : STRING;
Bip : CHAR;
BEGIN
WRITE('Entrer la valeur de la température : ');
READLN(Temp);
Bip := '';
Message := 'Régulateur non déclenché';
IF (Temp < 18) OR (Temp > 24) THEN
BEGIN
Message := 'Régulateur déclenché';
Bip := Chr(7);
END;
WRITE(Bip, Message);
END.
Quiz : structures conditionnelles
Vérifiez votre maîtrise des structures `Si` et `Selon`.
Quiz (5 questions)
Quelle est la différence entre la forme **simple** (`Si … Alors`) et la forme **alternative** (`Si … Alors … Sinon`) ?
Dans une instruction `Selon … Faire` (Case en Pascal), l'expression à évaluer doit obligatoirement être :
Soit l'algorithme : ``` Si (n mod 2 = 0) et (n > 0) Alors Ecrire("OK") FinSi ``` Pour quelles valeurs de `n` affiche-t-on "OK" ?
Quelle structure est la **plus appropriée** pour afficher le nom du jour à partir d'un numéro (1 à 7) ?
L'instruction `Si C1 Alors Si C2 Alors A FinSi FinSi` est équivalente à :