Sommaire

Les structures de contrôles conditionnelles

1. Forme réduite

Définition

Une structure conditionnelle simple à forme réduite admet un seul traitement qui sera exécuté uniquement si une condition est vraie.

Activité 1

Ecrire un programme qui calcule et affiche la valeur absolue d'un entier donné sans utiliser la fonction prédéfinie abs.

{Algorithmique}
si x < 0 alors
  x ⟵ -x
fin si
{Pascal}
if x < 0 then
  x := -x;

Faute fréquente

{ Instruction à traduire }
si a < 0 alors
  a ⟵ -a
fin si
{ Erreur }
if a < 0 then
  a := -a;
end;
{ Correction }
if a < 0 then
  a := -a;

L'élève a procédé à une traduction mot par mot de l'algorithme. Pour cette raison il pense que fin si doit être toujours traduite en end. La règle est : puisqu'il n'y a pas de begin il n'y aura pas de end.

Faute fréquente

{ Instruction à traduire }
si a < b alors
  aux ⟵ a
  a ⟵ b
  b ⟵ aux
fin si
{ Erreur }
if a < b then
  aux := a;
  a := b;
  b := aux;
{ Correction }
if a < b then
begin
  aux := a;
  a := b;
  b := aux;
end;

Comme nous avons mentionné que l'utilisation de end doit être précédée par une utilisation du mot clé begin l'élève a suivi le conseil et il est tombé dans le piège. Si la condition est correcte il faudra exécuter plusieurs traitements (ici 3 traitements). La règle est : puisqu'il y a plusieurs traitements : il faudra ajouter begin au début et end à la fin des traitements.

Faute fréquente

{ Instruction à traduire }
si a < b et a < c alors
  min ⟵ a
fin si
{ Erreur }
if a < b and a < c then
  min := a;
{ Correction }
if (a < b) and (a < c) then
  min := a;

Dans le cas d'une traduction systémique, l'élève oublie d'ajouter les parenthèses. La règle est : Les parenthèses sont obligatoires en Pascal lorsqu'il y a plus d'une condition.

2. Forme alternative

Définition

Une structure conditionnelle simple à forme alternative admet deux traitements différents :

Forme alternative

Activité 2

Ecrire un programme qui demande à l'utilisateur de saisir les coordonnées de 2 vecteurs du plan Vecteur u et Vecteur v, et qui détermine si les vecteurs sont orthogonaux entre eux ou pas.

NB : Le produit scalaire de deux vecteurs orthogonaux est égal à 0.

produit scalaire de deux vecteurs

{Algorithmique}
ps ⟵ xu * xv + yu * yv
si ps = 0 alors
  Ecrire("Vecteurs orthogonaux")
sinon
  Ecrire("Vecteurs non orthogonaux")
fin si
{Pascal}
ps := xu * xv + yu * yv;
if ps = 0 then
  Writeln('Vecteurs orthogonaux')
else
  Writeln('Vecteurs non orthogonaux');

3. Forme généralisée

Définition

Une structure conditionnelle simple à forme généralisée admet plus de deux traitements différents qui seront exécutés en fonction de plusieurs conditions.

Forme alternative

Activité 3

Un élève est admis s'il obtient une moyenne supèrieure ou égale à 10, il est refusé s'il obtient une moyenne infèrieure à 9, sinon il est contrôle.

Ecrire un programme qui affiche l'appréciation d'un 'élève selon sa moyenne.

{Algorithmique}
si moy >= 10 alors
  Ecrire("Admis")
sinon si moy >= 9 alors
  Ecrire("Contrôle")
sinon
  Ecrire("Refusé")
fin si
{Pascal}
if moy >= 10 then
  Writeln('Admis')
else if moy >= 9 then
  Writeln('Contrôle')
else
  Writeln('Refusé');

Activité 4

Ecrire un programme qui détermine la nature d'un triangle à partir de la longueur de ses cotés.

Solution

{Algorithmique}
si (AB=AC) et 
   (AC=BC) alors
  Ecrire("triangle équilatéral")
sinon si (AB=AC) ou 
         (AB=BC) ou 
         (AC=BC) alors
  Ecrire("triangle isocèle")
sinon si (AB*AB+AC*AC=BC*BC) ou 
         (AC*AC+BC*BC=AB*AB) ou
         (BC*BC+AB*AB=AC*AC) alors
  Ecrire("triangle rectangle")
sinon
  Ecrire("triangle quelconque")
fin si
{Pascal}
if (AB=AC) and
   (AC=BC) then
  Writeln('triangle équilatéral')
else if (AB=AC) or 
        (AB=BC) or 
        (AC=BC) then
  Writeln('triangle isocèle')
else if (AB*AB+AC*AC=BC*BC) or 
        (AC*AC+BC*BC=AB*AB) or
        (BC*BC+AB*AB=AC*AC) then
  Writeln('triangle rectangle')
else
  Writeln('triangle quelconque');

Faute fréquente

{ Instruction à traduire }
si a < b alors
  Ecrire("a < b")
sinon si a > b alors
  Ecrire("a > b")
sinon
  Ecrire("a = b")
fin si
{ Erreur }
if a < b then
  Writeln('a < b');
else if a > b then
  Writeln('a > b');
else
  Writeln('a = b');
{ Correction }
if a < b then
  Writeln('a < b')
else if a > b then
  Writeln('a > b')
else
  Writeln('a = b');

Les élèves prennent l'habitude d'ajouter un point-virgule (;) à la fin de chaque instruction en Pascal. Or la règle est : Il ne faut jamais précéder else par un point-virgule.

Faute fréquente

{ Instruction à traduire }
si a < b alors
  min ⟵ a
  max ⟵ b
sinon
  min ⟵ b
  max ⟵ a
fin si
{ Erreur }
if a < b then
  min := a
  max := b
else 
  max := a
  min := b
{ Correction }
if a < b then
begin
  min := a;
  max := b;
end
else 
begin
  max := a;
  min := b;
end;

Pas de point-virgule (;) avant else. L'élève ne sait plus où les mettre, il les a ôté. La règle : Comme il y a plusieurs traitements après then, il faudra utiliser begin et end sans mettre de (;) après le end qui précède une instruction else.

4. Structure à choix

Définition

Une structure conditionnelle à choix est une version simplifiée de la structure conditionnelle généralisée.

L'exécution d'un traitement dépend d'un sélecteur de type ordinal (scalaire).

Activité 5

Ecrire un programme qui saisit une lettre puis détermine sa nature : Chiffre, Lettre miniscule, Lettre majuscule ou Symbole.

{Algorithmique}
selon car faire
  "0".."9": msg ⟵ "Chiffre"
  "A".."Z": msg ⟵ "Lettre majuscule"
  "a".."z": msg ⟵ "Lettre miniscule"
sinon
  msg ⟵ "Symbole"
fin si
{Pascal}
case car of
  '0'..'9': msg := 'Chiffre';
  'A'..'Z': msg := 'Lettre majuscule';
  'a'..'z': msg := 'Lettre miniscule';
else
  msg := 'Symbole';
end;