Sommaire

Les structures de contrôles itératives

1. Complète

Définition

Une structure itérative complète est utilisée pour répéter une suite d'instructions, un nombre fini de fois connu à l'avance.

Activité 1

Ecrire un programme qui calcule la somme de n entiers saisis au clavier.

{Algorithmique}
s ⟵ 0
pour i de 1 à n faire
  Ecrire("Donner un nombre : ")
  Lire(v)
  s ⟵ s + v
fin pour
{Pascal}
s := 0;
for i := 1 to n do
begin
  Write('Donner un nombre : '); Readln(v);
  s := s + v;
end;

Activité 2

Ecrire un programme qui permet d'inverser une chaine.

Exemple : pour ch = "sami" le programme affiche "imas"

{Algorithmique}
ch1 ⟵ ""
pour i de Long(ch) à 1 faire
  ch1 ⟵ ch1 + ch[i]
fin pour
{Pascal}
ch1 := '';
for i := Length(ch) downto 1 do
  ch1 := ch1 + ch[i];

Faute fréquente

L'élève croit que la boucle suivante va afficher toutes les valeurs de 1 à n, mais le programme affiche uniquement une seule valeur (n+1).

Correction : enlever le point virgule (;) devant do.

 { Version incorrecte }
for i:=1 to n do; { <-- notez bien le point virgule ici }
Write(n);
 { Version corrigée }
for i:=1 to n do
    Write(n);

Faute fréquente

L'élève croit que la boucle suivante permet de remplir le tableau t. Cependant, la boucle affiche le message Donner t[1] : Donner t[2] : ..., et permet de saisir une seule valeur dans t[n+1].

Correction : Sans begin et end; la boucle concerne uniquement la première instruction qui suit la boucle. Pour corriger, il faudra ajouter begin et end;.

 { Version incorrecte }
for i:=1 to n do
Write('Donner t[', i, '] : ');
Readln(t[i]);
 { Version corrigée }
for i:=1 to n do
begin
  Write('Donner t[', i, '] : ');
  Readln(t[i]);
end;

Faute fréquente

L'élève croit que la boucle suivante permet d'afficher les valeurs de 0 à (-5), hors la boucle n'affiche rien.

Correction : Rappelez-vous que 0 > (-5). Dans ce cas, on doit utiliser downto au lieu de to.

 { Version incorrecte }
for i:=0 to -5 do
  Writeln(i);
 { Version corrigée }
for i:=0 downto -5 do
  Writeln(i);

2. Structure à condition d'arrêt : Répéter ... jusqu'à

Définition

Une structure à condition d'arrêt est utilisée pour répéter une suite d'actions jusqu'à ce qu'une condition soit vraie.

Activité 3

Ecrire un programme qui permet de retrouver si une lettre c existe dans une chaine ch sans utiliser la fonction prédéfinie pos.

{Algorithmique}
i ⟵ 1
répéter
  tr ⟵ (ch[i] = c)
  i ⟵ i + 1
jusqu'à (i > long(ch)) ou (tr)
{Pascal}
i := 1;
repeat
  tr := ch[i] = c;
  i := i + 1;
until (i > Length(ch)) or (tr);

Activité 4

Ecrire un programme qui permet de saisir un entier n (2 ≤ n ≤ 100).

{Algorithmique}
répéter
  Ecrire("Donner n [2, 100] : ")
  Lire(n)
jusqu'à (n dans [2..100])
{Pascal}
repeat
  Write('Donner n [2, 100] : ');
  Readln(n);
until (n in [2..100]);

3. Structure à condition de marche : Tantque ... Faire

Définition

Une structure itérative à condition de marche est utilisée pour répéter une suite d'actions tant que une condition est vraie.

Activité 5

Ecrire un programme qui permet de déterminer si un mot ch est palindrôme.

Exemple : RADAR, AZIZA se lisent de la même façon de gauche à droite ou de droite à gauche.

{Algorithmique}
palin ⟵ Vrai
i ⟵ 1
j ⟵ Long(ch)
Tantque (j > i) et (palin) Faire
  palin ⟵ ch[i] = ch[j]
  i ⟵ i + 1
  j ⟵ j - 1
Fin Tantque
{Pascal}
palin := True;
i := 1;
j := Length(ch);
While (j > i) and (palin) do
begin
  palin := ch[i] = ch[j];
  i := i + 1;
  j := j - 1;
end;

Faute fréquente

L'élève croit que la boucle suivante va calculer le PGCD(a, b) en utilisant la méthode de soustraction. Mais, elle résulte en une boucle infinie comme a est toujours différent de b puisque l'instruction if n'est jamais atteinte.

Correction : enlever le point virgule (;) devant do.

{ Version incorrecte }
a := 100;
b := 120;
while (a <> b) do; { <-- notez bien le point virgule ici }
  if (a > b) then
    a := a - b
  else
    b := b - a;
{ Version corrigée }
a := 100;
b := 120;
while (a <> b) do
  if (a > b) then
    a := a - b
  else
    b := b - a;

Faute fréquente

L'élève croit que la boucle suivante permet de calculer le PGCD(a, b) en utilisant la méthode d'euclide. Mais, lors de l'exécution le programme se bloque puisque b est toujours différent de 0.

Correction : Sans begin et end; la boucle concerne uniquement la première instruction qui suit la boucle. Pour corriger, il faudra ajouter begin et end;.

{ Version incorrecte }
while (b <> 0) do
  r := a mod b;
  a := b;
  b := r;
{ Version corrigée }
while (b <> 0) do
begin
  r := a mod b;
  a := b;
  b := r;
end;