Langage Pascal/Instruction conditionnelle

Début de la boite de navigation du chapitre
Instruction conditionnelle
Icône de la faculté
Chapitre no 5
Leçon : Langage Pascal
Chap. préc. :Les tableaux
Chap. suiv. :Instruction itérative
fin de la boite de navigation du chapitre
En raison de limitations techniques, la typographie souhaitable du titre, « Langage Pascal : Instruction conditionnelle
Langage Pascal/Instruction conditionnelle
 », n'a pu être restituée correctement ci-dessus.

if ... then ... modifier

Une instruction conditionnelle permet d'exécuter des instructions seulement dans une certaine condition.

var 
    age : integer;

begin
    writeln('Quel est ton âge?');
    readln(age);
    
    if (age < 18) then
    
        writeln('Tu es mineur.');
    
end.

Ainsi, dans l'exemple ci-dessus, le programme indiquera à l'utilisateur qu’il est mineur seulement s'il son âge est strictement inférieur à 18.

if ... then ... else ... modifier

On peut également préciser ce que le programme doit faire dans le cas contraire. Les deux exemples suivants sont donc presque équivalents.

Sans "else" Avec "else"
var 
    age : integer;

begin
    writeln('Quel est ton âge?');
    readln(age);
    
    if (age < 18) then
    begin
        writeln('Tu es mineur.')
    end;
    
    if (age >= 18) then
    begin
        writeln('Tu es majeur.')
    end ;
end.
var 
    age : integer;

begin
    writeln('Quel est ton âge?');
    readln(age);
    
    if age < 18 then
    begin
        writeln('Tu es mineur.');
    end
    else
    begin
        writeln('Tu es majeur.');
    end;
end.

Dans les deux cas, le programme indiquera si l'utilisateur est mineur ou majeur. Cependant, le code de gauche consiste à faire deux fois le test, tandis que celui de droite consiste à ne faire qu'un seul test. Ce dernier est donc à préférer.

On peut encore combiner plusieurs tests à la suite, permettant des if en cascade. Dans l'exemple suivant, si une condition est remplie, les conditions suivantes ne sont pas testées du tout.

var 
    age : integer;

begin
    writeln('Quel est ton âge?');
    readln(age);
    
    if age <= 10 then
    begin
        writeln('Mais tu es tout petit! Oo')
    end
    else if age < 18 then
    begin
        writeln('Tu es encore mineur.')
    end
    else if age >= 60 then
    begin
        writeln('Wouaw, tu vieillis dis donc...');
    end 
end.

Les if en cascade permettent du cas par cas:

  • Ceux qui ont 10 ans ou moins recevront le message Mais tu es tout petit! Oo.
  • Parmi ceux qui ont plus de 10 ans, ceux qui ont également moins de 18 ans recevront Tu es encore mineur..
  • Ceux qui ont 60 ans ou plus, verront apparaitre le message Wouaw, tu vieillis dis donc....
  • Et enfin, les derniers, ceux qui ont 18 ans ou plus et moins de 60 ans, ne verront aucun message apparaitre.

case ... of ... modifier

Imaginons un cas dans lequel il nous faudrait utiliser une longue série de if en cascade, celle-ci peut devenir rapidement difficile à lire. Pour cela, il existe une autre structure : le case of.

Prenons un exemple qui attend un chiffre et l'écrit en toute lettre. On peut bien entendu en faisant des copier-coller écrire cela :

var 
    age : integer;

begin
    writeln('Quel est ton âge?');
    readln(age);
    
    if age = 1 then
    begin
        writeln('un')
    end
    else if age = 2 then
    begin
        writeln('deux')
    end
    else if age = 3 then
    begin
        writeln('trois')
    end
    else if age = 4 then
    begin
        writeln('quatre')
    end
    else if age = 5 then
    begin
        writeln('cinq')
    end
    else if age = 6 then
    begin
        writeln('six')
    end
    else if age = 7 then
    begin
        writeln('sept')
    end
    else if age = 8 then
    begin
        writeln('huit')
    end
    else if age = 9 then
    begin
        writeln('neuf')
    end
    else
    begin
        writeln('Je veux un chiffre')
    end
end.

Ça peut vite devenir lourd à lire et à écrire. Voyons ce que donne le même résultat en utilisant la structure case of :

var 
    age : integer;

begin
    writeln('Quel est ton âge?');
    readln(age);
    
    case age of
    1 : writeln('un');
    2 : writeln('deux');
    3 : writeln('trois');
    4 : writeln('quatre');
    5 : writeln('cinq');
    6 : writeln('six');
    7 : writeln('sept');
    8 : writeln('huit');
    9 : writeln('neuf');
    else writeln('je veux un chiffre');
    end;
end.

Et voila comment le case of peut fournir un code beaucoup plus compréhensible et compact que les if en cascade.

Liste des opérateurs modifier

Opérateur Description
= égal à
< strictement inférieur à
<= inférieur ou égal à
> strictement supérieur à
>= supérieur ou égal à
<> différent de
AND le "et" logique
OR le "ou" inclusif
XOR le "ou" exclusif
NOT le "non" logique

Le XOR consiste à vérifier si une et une seule des deux conditions est vraie. "A xor B" est l'équivalent de "soit A soit B".