Accueil        Lexique        Unités        Algorithmes        TUTORIEL        Groupe Facebook   

Sommaire Tutoriel

Instructions conditionnelles

Lorsque vous écrivez un programme, vous pouvez avoir besoin de tester des valeurs pour exécuter un bloc d'instructions. Le langage Pascal utilise l'instruction If ("si") pour n'importe quelle condition et l'instruction "Case" (Au cas où) pour des valeurs au cas par cas.

  1. Instruction If...then... else
  2. Opérateur "In"
  3. Instruction"Case"
  4. Notions vues dans ce cours

  1. If .. then .. else

    Programme

    Soit le programme suivant :
    Program monage;
    var
    	age : 1..100;
    Begin
        Write('Entrez votre âge : ');
        Readln(age);
        if age <= 2 then
            writeln('Vous êtes un bébé')
        else if age <= 11 then
            writeln('Vous êtes un enfant')
        else if age <= 16 then
            writeln('Vous êtes un adolescent')
        else if age <= 22 then
            writeln('Vous êtes un jeune adulte')
        else if age <= 64 then
            writeln('Vous êtes un adulte')
        else if age <= 70 then
            writeln('Vous êtes un jeune retraité')
        else
            writeln('Vous êtes un vieillard');
    End.
    
    Ce programme vous indique, en fonction de l'âge que vous avez entré (entre 1 et 100) quel est votre statut d'âge.
    Il teste d'abord si vous n'avez pas plus de 2 ans... si ce n'est pas le cas, il testera si vous n'avez pas plus de 11 ans (et puisque vous avez forcément plus de 2 ans puisque le premier test a été invalidé, vous êtes âgé entre 3 et 11 ans)... etc.
    L'instruction "If" (Si) teste la validité d'au moins une condition. Si elle n'est pas vérifiée et s'il y a une alternative "Else" (Sinon) le programme exécutera ce qu'il y a dans ce bloc "Else".
    Remarques :
    • Vous pouvez consulter la liste des opérateurs de comparaison sur cette page du site internet
    • Avant le mot clé else il n'y a JAMAIS de ";" y compris s'il y avait une fin de bloc "end" avant.
    • Il peut y avoir plusieurs conditions dans une même instruction if, exemple :
      {...}
          if (i mod 2 <> 0) and (i mod 3 <> 0) and (i mod 5 <> 0) then
          {bloc d'instructions}
      {...}
      
    • Du fait que les opérateurs de comparaison ont la priorité la plus faible, en cas de plusieurs tests à la suite, vous devez mettre chaque test entre parenthèses.
    • L'opérateur booléen (sur opérandes TRUE ou FALSE) AND (ET) indique que les 2 conditions à gauche et à droite du AND doivent être vérifiées.
    • L'opérateur booléen (sur opérandes TRUE ou FALSE) OR (OU) indique qu'une seule des 2 conditions à gauche ou à droite du OR doit être vérifiée.
    • Il existe une option de compilation ({B-}) dans Pascal permettant d'arrêter les tests d'un ensemble de tests avec les opérateurs OR dès le premier test validé ou dès le premier test invalidé pour l'opérateur AND. Si on a le code suivant :
      {...}
          if (i mod 2 <> 0) or (i mod 3 <> 0) or (i mod 5 <> 0) or (i mod 7  <> 0) then
          {bloc d'instructions}
      {...}
      
      les tests s'arrêteront dès le 2ème test si i n'est pas divisible par 3 (par exemple). Cette directive de compilation permet d'augmenter les performances des programmes à condition de bien choisir l'ordre de priorité des tests de gauche à droite. Ici, un nombre a plus de chance d'être divisible par 2 que par 3, plus de chance d'être divisible par 3 que par 5 etc...
    • Les instructions conditionnelles peuvent s'imbriquer et il faut faire preuve d'une rigueur absolue pour les différentes conditions. Vous pouvez, par exemple, tester si vous avez un ensemble de valeurs puis un sous ensemble de cet ensemble. Cela devient compliqué quand vous testez 2 variables (par exemple, âge et couleur de cheveux) de ne pas se tromper.

    Exercices

    • Ecrivez un test sur l'age indiquant à la fois si l'âge se termine par 5 ET si le chiffre des dizaines est pair. Cette condition se fait en une seule ligne!!
    • Ecrivez un test (If) qui, une fois saisi un nombre entier, teste si le bit 5 de ce nombre est allumé
    • Ecrivez un programme qui demande la saisie de 2 textes (a et b de type string) et vérifie si a est plus grand, égal ou plus petit que b

  2. Opérateur de comparaison IN

    Le langage Pascal possède un opérateur de comparaison in n'existant que dans peu de langage de programmation. L'opérateur "IN" est une facilité d'écriture pou tester une variable entre 2 bornes de valeurs de type ORDINALE (tout type d'entier et char). Ainsi le programme suivant :
    Begin test_in;
    var
        c: 'A'..'z';
    begin
        writel('Entrez le caractère (entre ''A'' et ''z'')');
        readln(c);
        if c in ['a'..'z'] then
            writeln('Lettre minuscule')
        else if c in ['A'..'Z'] then
            writeln('Lettre majuscule')
        else
            writeln('Ce n''est pas une lettre');
        readln;
    END.
    
    est le même programme que :
    Begin test_in;
    var
        c: 'A'..'z';
    begin
        writel('Entrez le caractère (entre ''A'' et ''z'')');
        readln(c);
        if (c >= 'a') and (c <= 'z') then
            writeln('Lettre minuscule')
        else if (c >= 'A') and (c <= 'Z') then
            writeln('Lettre majuscule')
        else
            writeln('Ce n''est pas une lettre');
        readln;
    END.
    

    Exercice

    • A combien de comparaisons un opérateur IN correspond-il ?
    • Ecrivez un programme n'utilisant que des opérateurs de comparaison IN, indiquant votre décennal (Vingtenaire, trentenaire, quadragénère etc jusqu'à la catégorie Sexagénaire incluse) en fonction de l'âge que vous entrez. Les quadra sont des personnes âgées de 40 à 49 ans. Dans ce programme, est-il nécessaire d'avoir des mot-clés "ELSE" ?
    • Ecrivez le même programe mais en utilisant la méthode du premier programme entré dans ce chapitre avec des "else"
    • Dans chacun des 2 programmes, calculez le nombre de tests de comparaisons effectués... Quel est le programme réclamant le moins de tests, c'est à dire le moins d'opérations, effectués ? Qu'en déduisez vous sur la pertinence de l'opérateur "IN" ? Quelle méthode sera le plus rapide à l'exécution ?

  3. Instruction CASE

    L'instruction Case est une instruction permettant de traiter facilement des valeurs de variables ordinales (entiers et char) suivant leurs résultats.

    L'instruction CASE..OF est une forme de traitement d'instruction conditionnelle simplifiant la forme "else" MAIS n'agissant que sur les valeurs d'une seule variable (contrairement à IF qui peut agir sur un nombre quelconque de variables). Lorsque l'instruction parcourt les "cas", au premier cas correspondant à la variable, les instructions correspondantes seront traitées et plus aucun cas ne sera traité par la suite. Si, par exemple, un des cas était un nombre inclus entre 1 et 100 et qu'un des cas suivant était un nombre inclus entre 1 et 20, si le nombre était 19, le premier cas sera traité mais pas le suivant.

    Reprenons l'exemple précédent des âges avec CASE :

    Program monage;
    var
    	age : 1..100;
    Begin
        Write('Entrez votre âge : ');
        Readln(age);
        CASE age OF
            0..2 : writeln('Vous êtes un bébé');
            3..11 : writeln('Vous êtes un enfant');
            12..16:  writeln('Vous êtes un adolescent');
            17..22 : writeln('Vous êtes un jeune adulte');
            23 .. 64 : writeln('Vous êtes un adulte');
            65..70 : writeln('Vous êtes un jeune retraité')
            else writeln('Vous êtes un vieillard');
        end;
    End.
    
    Vous pouvez énumérer les cas de 2 façons: soit par des valeurs soit par les bornes d'un ensemble de valeurs. Ainsi le premier cas énoncé dans le programme précédent esi équivalent à :
    {...}
        CASE age OF
            0, 1, 2 : writeln('Vous êtes un bébé');
    {...}
        end;
    End.
    

    Exercice

    • Ecrire un programme à 2 variables de type longInt, que vous demandez de saisir, et, une fois ceci fait, affiche un menu à 5 entrées demandant votre choix de 5 opérations entre +, -, *, div et mod. Le choix se fera par lettres 'a' à 'e'. Une fois le caractère lu, le programme lance l'opération correspondante et affiche le résultat.

  4. Notions vues dans ce cours

    • If ... then .. else
    • Liste des opérateurs de comparaison
    • Priorité des opérateurs de comparaison comparé aux autres opérateurs
    • Opérateur IN
    • Instruction CASE

Sommaire Tutoriel


Copyright © 2021 par Albatros Concept (Bruno Aubin)