Une structure conditionnelle simple à forme réduite admet un seul traitement qui sera exécuté uniquement si une condition est vraie.
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.
Une structure conditionnelle simple à forme alternative admet deux traitements différents :
Ecrire un programme qui demande à l'utilisateur de saisir les coordonnées de 2 vecteurs
du plan et
, et qui
détermine si les vecteurs sont orthogonaux entre eux ou pas.
NB : Le produit scalaire de deux vecteurs orthogonaux est égal à 0.
{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');
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.
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é');
Ecrire un programme qui détermine la nature d'un triangle à partir de la longueur de ses cotés.
{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.
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).
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;