Ch. 04 · Leçon 1
Les structures de contrôle itératives complètes
Ce que vous saurez faire
- →Identifier une définition itérative complète
- →Utiliser la boucle Pour en parcours croissant et décroissant
- →Traduire une boucle Pour de l'algorithmique au Pascal
- →Tracer l'exécution d'une boucle Pour
- →Appliquer la boucle Pour sur les tableaux et les chaînes
id: 33-209-structures-iteratives-completes slug: 33-209-structures-iteratives-completes titre: Les structures de contrôle itératives complètes chapitre: 4 chapitre_titre: Les structures de contrôle itératives lecon: 1 niveau: 4eme-sci ordre: 1 prerequis: [] duree_estimee_min: 75 mots_cles:
- boucle pour
- iteration
- compteur
- parcours croissant
- parcours decroissant
- tableau
- pascal langages:
- analyse
- pascal objectifs:
- Identifier une définition itérative complète
- Utiliser la boucle Pour en parcours croissant et décroissant
- Traduire une boucle Pour de l'algorithmique au Pascal
- Tracer l'exécution d'une boucle Pour
- Appliquer la boucle Pour sur les tableaux et les chaînes status: published source_pdf: 33_209.pdf source_pages:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9 kind: cours
I. Définition itérative complète
1. Parcours croissant
Vocabulaire et syntaxe :
[Init] Pour c de 1 à n faire
Instruction 1
Instruction 2
...
Instruction p
FinPour
R : la répétition de p instructions (n fois), n nombre de répétitions.
[Init] Pour c de 1 à n faire
Instruction 1
Instruction 2
...
Instruction p
FinPour
R : la répétition de p instructions (n fois), n nombre de répétitions.
....... ; {Init}
FOR c:=1 TO n DO
Begin
Instruction_1;
Instruction_2;
.................;
Instruction_p;
End;
2. Parcours décroissant
L'avancement du compteur se fait par un pas = -1.
[inst1, inst2, ...instm]
Pour i de n à 1 (pas=-1) faire
Instruction 1
Instruction 2
...
Instruction p
FinPour
[inst1, inst2, ...instm]
Pour i de n à 1 (pas=-1) faire
Instruction 1
Instruction 2
...
Instruction p
FinPour
....... ; {Init}
FOR i:=n DOWNTO 1 DO
Begin
Instruction_1;
Instruction_2;
.................;
Instruction_p;
End;
Décrémentation automatique du compteur (passage au prédécesseur de la valeur en cours).
II. Activités d'introduction
Afficher le message « Bonjour » 10 fois
Pour i de 1 à 10 faire
écrire("Bonjour")
FinPour
Pour i de 1 à 10 faire
écrire("Bonjour")
FinPour
program bonjour;
uses wincrt;
var i : integer;
Begin
For i:=1 to 10 do
writeln('Bonjour');
End.
Afficher les entiers de 1 à 10
Pour i de 1 à 10 faire
écrire(i)
FinPour
Pour i de 1 à 10 faire
écrire(i)
FinPour
For i:=1 to 10 do
writeln(i);
Afficher les entiers de 1 à 10 en ordre inverse
Pour i de 10 à 1 (pas=-1) faire
écrire(i)
FinPour
Pour i de 10 à 1 (pas=-1) faire
écrire(i)
FinPour
For i:=10 downto 1 do
writeln(i);
Afficher les lettres de A à K
Pour i de "A" à "K" faire
écrire(i)
FinPour
Pour i de "A" à "K" faire
écrire(i)
FinPour
Var i : char;
...
For i:='A' to 'K' do
writeln(i);
III. Exercices résolus
Écrire un programme qui permet de faire la somme de 5 réels.
Voir le corrigé
Algorithme :
0) Début Somme
1) [S ← 0] pour i de 1 à 5 faire
Ecrire("Donner un réel : "), lire(x)
S ← S + x
FinPour
2) Ecrire("La somme est ", S)
3) Fin Somme
Tableau de déclaration des objets :
| Objet | Type/Nature | Rôle |
|---|---|---|
| i | Entier | Compteur |
| x | Réel | Réels à saisir |
| S | Réel | Somme des réels |
Trace d'exécution (avec S initialisé à 0) :
| N° | Instruction | i | x | S |
|---|---|---|---|---|
| 01 | ··· | ? | ? | ? |
| 02 | ··· | ? | ? | ? |
| 03 | ··· | ? | ? | ? |
| 04 | ··· | ? | ? | ? |
| 05 | ··· | ? | ? | ? |
| 06 | ··· | ? | ? | ? |
Traduction en Pascal :
program somme;
uses wincrt;
var
x, s : real;
i : integer;
begin
s := 0;
for i:=1 to 5 do
begin
write(' Donner un réel : ');
readln(x);
s := s + x;
end;
writeln('La somme est ', s:5:2);
End.
Écrire un programme qui permet de calculer le factoriel d'un entier n donné.
Exemples : 3! = 1 × 2 × 3 = 6 ; 6! = 1 × 2 × 3 × 4 × 5 × 6 = 720.
Voir le corrigé
Algorithme :
0) Début Factoriel
1) Ecrire("Donner un entier"), lire(n)
2) [f ← 1] pour i de 2 à n faire
f ← f * i
FinPour
3) Ecrire("Le factoriel est ", f)
4) Fin Factoriel
Trace d'exécution (pour n = 6) :
| N° | Instruction | i | f |
|---|---|---|---|
| 01 | ··· | ? | ? |
| 02 | ··· | ? | ? |
| 03 | ··· | ? | ? |
| 04 | ··· | ? | ? |
| 05 | ··· | ? | ? |
| 06 | ··· | ? | ? |
Traduction en Pascal :
program factoriel;
uses wincrt;
var
i, n : integer;
f : longint;
begin
write(' Donner un entier : ');
readln(n);
f := 1;
for i:=2 to n do
f := f * i;
writeln('Le factoriel est ', f);
End.
Écrire un programme qui permet d'afficher la table de multiplication d'un entier donné n.
Exemple pour n = 8 :
Table de multiplication pour : 8
1 x 8 = 8
2 x 8 = 16
3 x 8 = 24
...
10 x 8 = 80
Voir le corrigé
program multiplication;
uses wincrt;
var i, n : integer;
begin
Writeln('Donner un entier=');
readln(n);
Writeln('Table de multiplication pour ', n);
for i:=1 to 10 do
writeln(i, ' x ', n, '= ', i*n);
end.
Écrire un programme qui permet d'afficher un nombre x à la puissance n (avec x et n à saisir).
Exemple : x = 5, n = 3 donne p = x^n = 5³ = 5×5×5 = 125.
Voir le corrigé
program puissance;
uses wincrt;
var n, x, p, i : integer;
begin
write('donner x= '); readln(x);
write('donner n= '); readln(n);
p := 1;
for i:=1 to n do
p := p * x;
writeln(x, ' à la puissace ', n, ' = ', p);
end.
Écrire un programme qui permet de saisir un mot en majuscule puis de le convertir en minuscule sauf le premier caractère, puis l'affiche.
Voir le corrigé
0) Début conversion
1) Ecrire("Donner un mot en majuscule"),
lire(mot)
2) Pour i de 2 à long(mot) faire
Mot[i] ← chr( ord(mot[i])+32 )
FinPour
3) Ecrire("Le mot après conversion", mot)
4) Fin Conversion
T.D.O :
| Objet | Type/Nature | Rôle |
|---|---|---|
| Mot | Chaîne | Chaîne à saisir |
| i | Entier | Compteur |
0) Début conversion
1) Ecrire("Donner un mot en majuscule"),
lire(mot)
2) Pour i de 2 à long(mot) faire
Mot[i] ← chr( ord(mot[i])+32 )
FinPour
3) Ecrire("Le mot après conversion", mot)
4) Fin Conversion
T.D.O :
| Objet | Type/Nature | Rôle |
|---|---|---|
| Mot | Chaîne | Chaîne à saisir |
| i | Entier | Compteur |
Program conversion;
Uses wincrt;
Var Mot : string;
i : integer;
Begin
Writeln('Donner un mot en majuscule');
Readln(mot);
For i:=2 to length(mot) do
Mot[i] := chr( ord(mot[i])+32 );
Writeln('Le mot après conversion=', mot);
End.
Écrire un programme qui permet de saisir une chaîne Ch puis une lettre L, ensuite calcule et affiche le nombre d'occurrences de L dans Ch.
Voir le corrigé
Program occurrence;
uses wincrt;
var i, occ : integer;
ch : string;
L : char;
begin
writeln('Donner un mot'); readln(Ch);
writeln('donner une lettre'); readln(L);
occ := 0;
for i:=1 to length(Ch) do
if ch[i] = L then occ := occ + 1;
writeln('Le nombre d''occurrence est ', occ);
end.
Écrire un programme qui permet de vérifier si un entier nb est premier.
Rappel : Un nombre premier est un entier naturel qui admet exactement deux diviseurs distincts entiers et positifs (1 et lui-même). Cette définition exclut 1 et 0.
Exemples : les nombres premiers inférieurs à 100 sont : 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89 et 97.
Voir le corrigé
Algorithme :
0) Début nombre_premier
1) Écrire("Donner un entier"), lire(n)
2) [nb ← 0] pour i de 1 à n faire
Si n mod i = 0 Alors nb ← nb + 1
FinSi
FinPour
3) Si nb = 2 alors Écrire("Premier")
sinon Écrire("Non premier")
FinSi
4) Fin nombre_premier
T.D.O :
| Objet | Type/Nature | Rôle |
|---|---|---|
| i | Entier | Compteur |
| nb | Entier | Nombre de diviseurs de n |
| n | Entier | Nombre à vérifier |
Pascal :
Program nombre_premier;
uses wincrt;
var i, n, nb : integer;
begin
Writeln('Donner un entier = ');
Readln(n);
nb := 0;
for i:=1 to n do
if n mod i = 0 then nb := nb + 1;
if nb = 2 then Writeln('Premier')
else Write('Non premier');
end.
Écrire un programme qui permet d'afficher tous les entiers premiers entre 1 et 100.
Voir le corrigé
program nombre_premier2;
uses wincrt;
var i, nb, n : integer;
begin
for n:=1 to 100 do
begin
nb := 0;
for i:=1 to n do
if n mod i = 0 then nb := nb + 1;
if nb = 2 then Writeln(n);
end;
end.
IV. Rappel : les tableaux
Remplissage d'un tableau :
Pour i de 1 à n faire
Écrire("donner l'élément n° ", i), lire(T[i])
FinPour
Affichage des éléments d'un tableau :
Pour i de 1 à n faire
Écrire(" l'élément n° ", i, " est ", T[i])
FinPour
Déclaration d'un tableau en Pascal :
Var t : array [1..20] of integer;
ou bien (en utilisant Type) :
Type
Tab = array[1..20] of integer;
Var
t : tab;
Remplissage et affichage d'un tableau d'entiers de taille n à saisir.
Voir le corrigé
program tableau;
uses wincrt;
var t : array[1..20] of integer;
i, n : integer;
Begin
Writeln('Donner la taille du tableau');
Readln(n);
For i:=1 to n do
Begin
Writeln('Donner l''élément n°', i);
Readln(t[i]);
End;
For i:=1 to n do
Writeln('l''élément n°', i, ' est ', t[i]);
End.
Écrire un programme qui permet de remplir un tableau T par n entiers puis détermine le maximum de ce tableau.
Voir le corrigé
Analyse :
Nom : Maximum
Résultat = Ecrire("Le maximum est ", max)
Max = [max ← T[1]] Pour i de 2 à n faire
Si T[i] > max alors max ← T[i]
FinSi
FinPour
T = Pour i de 1 à n faire
T[i] = Donnée("Donner l'entier n°", i)
FinPour
n = Donnée("Donner le nombre d'entiers : ")
Fin Maximum
T.D.O :
| Objet | Type/Nature | Rôle |
|---|---|---|
| T | Tableau de 20 entiers | Tableau d'entiers |
| i | Entier | Compteur |
| max | Entier | Le max du tableau |
Algorithme :
0) Début Maximum
1) Ecrire("Donner le nombre d'entiers : "), lire(n)
2) Pour i de 1 à n faire
Ecrire("Donner l'entier n°", i), lire(T[i])
FinPour
3) max ← T[1]
4) Pour i de 2 à n faire
Si T[i] > max alors max ← T[i]
FinSi
FinPour
5) Ecrire("Le maximum est ", max)
6) Fin Maximum
Programme Pascal :
program maximum;
uses wincrt;
type
tab = Array [1..20] of integer;
var
t : tab;
n, i, max : integer;
begin
writeln('Donner le nombre d''entiers :');
readln(n);
for i:=1 to n do
begin
writeln('Donner l''entier n°', i);
readln(T[i]);
end;
max := T[1];
for i:=2 to n do
if t[i] > max then max := T[i];
writeln('Le maximum est ', max);
end.
Activité 1 : Ajouter un contrôle de saisie sur n (la taille du tableau) pour que la valeur de n soit dans l'intervalle [1..20].
répéter
Ecrire("Donner le nombre d'entiers : ")
Lire(n)
jusqu'à n dans [1..20]
répéter
Ecrire("Donner le nombre d'entiers : ")
Lire(n)
jusqu'à n dans [1..20]
repeat
writeln('Donner le nombre d''entiers :');
readln(n);
until n in [1..20];
Quiz : boucles et structures itératives
Vérifiez que vous savez choisir et écrire la bonne boucle pour chaque situation.
Quiz (6 questions)
Quelle boucle utiliser quand le **nombre de répétitions est connu d'avance** ?
Différence essentielle entre `Tant que` et `Répéter … Jusqu'à` :
Que vaut `s` après ce code ? ``` s ← 0 Pour i de 1 à 4 Faire s ← s + i FinPour ```
Quelle est la condition de **terminaison** d'une boucle `Tant que` ?
Une **boucle infinie** se produit si :
Pour parcourir tous les éléments d'un tableau `T` de taille `n` (en Analyse, indices 1 à n), on écrit :