Leçons de niveau 15

Langage Pascal/Instruction conditionnelle

Une page de Wikiversité.
Sauter à la navigation Sauter à la recherche
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
Icon falscher Titel.svg
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 | modifier le wikicode]

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 | modifier le wikicode]

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 | modifier le wikicode]

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 | modifier le wikicode]

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".