GENISTA (1971) : TUTORIEL "BBC BASIC FOR WINDOWS" EN FRANÇAIS : CHAPITRE 09 : EXÉCUTION CONDITIONNELLE



Logo Genista, fondé en 1971

Guide Tutoriel de BBC BASIC for Windows, Ch. 09

BBC BASIC (BB4W) Tutorial: Conditional Execution

Exécution conditionnelle (Tutoriel BBC BASIC, Ch. 09) [Genista]

Par Peter Nairn  •  Traduction : Guy Schaffner (Texte et images) (Genista)

informatique et programmation Vous avez pu apprendre comment on donne à l'ordinateur, au moment où il en a besoin, des données sous forme de valeurs numériques ou de chaînes alphanumériques.
Dans ce Chapitre, vous découvrirez toutes les façons de faire des comparaisons entre des nombres et des chaînes, vous rencontrerez le problème des conditions dans lesquelles un programme peut ou non se dérouler, vous connaîtrez les tables de vérité et la priorité des opérateurs.
Chapitre 8   •   Chapitre 9   •   Chapitre 10      

Chapitre 9 — Exécution conditionnelle


Jusque là, dans tous les cas que nous avons vus, le code est exécuté lorsque le programme est lancé. Très souvent, ce n'est pas cela que l'on veut faire. On a besoin d'un moyen pour « faire tourner » un bloc de code seulement si certaines conditions existent. Ce besoin est tellement fondamental pour les langages de programmation qu'ils en ont tous un, et beaucoup d'entre eux (le Pascal, le  C  ou le  C++ , le Java et, bien sûr, le BASIC, pour n'en citer que quelques-uns) utilisent le même mot : IF.

Exemple :


      INPUT "Entrez votre score: " Score%
      IF Score%>40 THEN PRINT "Vous êtes reçu !"
      END
    

On remarquera le mot  THEN qui signifie alors. Il faut comprendre :
Si la condition est remplie, alors faire ceci ou cela.

La ligne 2 fait un test sur la variable Score% et l'instruction PRINT n'est lancée que si la condition est vérifiée comme vraie. On trouvera ci-dessous une liste de toutes les comparaisons, mais comme on le voit, on s'est servi pour les construire de bon sens et de mathématiques de base.


Expressionest évaluée comme vraie si
A < BA est plus petit que B
A <= BA est inférieur ou égal à B
A = BA égale B
A >= BA est supérieur ou égal à B
A > BA est plus grand que B
A <> BA n'est pas égal à B

Nous pouvons étendre notre programme de contrôle :


      INPUT "Entrez votre score : " Score%
      IF Score%>40 THEN PRINT "Vous êtes reçu !"
      IF Score%=40 THEN PRINT "Reçu de justesse !"
      IF Score%<40 THEN PRINT "Vous avez échoué !"
      END
    

De plus, les variables A et B peuvent être des expressions en elles-mêmes :


      IF MonAge%=VotreAge%+5 THEN PRINT "Je suis plus âgé"
    

Quand il est utilisé dans une expression comme celle qui précède, le signe égale [ = ] agit comme une comparaison, et non comme une affectation, ce qui signifie qu'en fait aucune valeur ne sera modifiée pendant ce test.

Il est parfaitement possible de tester également des chaînes. Dans ce cas, le test est fait sur la valeur des caractères prise dans le tableau ASCII, comme cela a été mentionné dans le chapitre sur les chaînes. Lorsqu'il compare des chaînes, le BASIC commence avec le premier caractère de la première chaîne et le compare avec le premier caractère de la deuxième chaîne. S'ils sont identiques, il testera le deuxième caractère des deux chaînes et ainsi de suite, jusqu'à ce qu'il puisse prendre une décision. Voici quelques exemples :


      IF "abc"="abc" PRINT "les deux sont identiques"
      IF "abc"<"bcde" PRINT "a vient avant b"
      IF "abc"<"abde" PRINT "c vient avant d"
      IF "abc"<>"ABC" PRINT "les casses sont différentes"
      IF "ABC"<"abc" PRINT "les capitales d'abord"
      END
    

Utilisation du couple IF (si) et THEN (alors) pour les conditions



AND et OR


Tapez et lancez ce petit programme :


      REM Quiz
      INPUT "Londres est-elle capitale du Royaume-Uni";A$
      IF A$="O" THEN PRINT "Correct"
      IF A$="N" THEN PRINT "Faux"
      END
    

La ligne 3 ci-dessus ne fonctionnerait que si l'utilisateur tapait la capitale « O » (la lettre O). S'il tapait « ? », il ne découvrirait jamais combien il est malin. Pas très gentil. Il est possible de combiner plus d'une condition en même temps en utilisant les mots-clés AND et OR. Nous pouvons modifier les lignes 3 et 4 dans ce sens :


      REM Quiz
      INPUT "Londres est-elle capitale du Royaume-Uni";A$
      IF A$="O" OR A$="o" THEN PRINT "Correct"
      IF A$="N" OR A$="n" THEN PRINT "Faux"
      END
    

C'est beaucoup plus utilisable.


Utilisation d'une conditions possible sur deux : IF (si)... OR (ou)..., THEN (alors) faire ceci

Nous pouvons aussi ajouter un blocage pour les réponses incorrectes :


      REM Quiz
      INPUT "Londres est-elle capitale du Royaume-Uni";A$
      IF A$="O" OR A$="o" THEN PRINT "Correct"
      IF A$="N" OR A$="n" THEN PRINT "Faux"
      IF A$<>"O" AND A$<>"o" \
      \ AND A$<>"N" AND A$<>"n" \
      \ THEN PRINT "Réponse non valide"
      END
    

Utilisation de deux conditions simultanées : IF (si)... AND (et)..., THEN (alors) faire ceci

Habituellement, à ce point, on fournit une table de vérité des diverses conditions :


Table de vérité AND (et)
Quand A estAND (et) B estRésultat
FauxFauxFaux
VraiFauxFaux
FauxVraiFaux
VraiVraiVrai


Table de vérité OR (ou)
Quand A estOR (ou) B estRésultat
FauxFauxFaux
VraiFauxVrai
FauxVraiVrai
VraiVraiVrai

En lisant la troisième ligne de la table AND, on voit que si A est faux et B est vrai, le résultat global sera jugé faux. En fait, c'est du bon sens.



EOR


EOR (c'est le délice des étudiants partout où cela se prononce comme le cri de l'âne dans « Winnie l'Ourson ») signifie « Exclusive OR ». Il effectuera le test d'une condition comme OR mais ne sera vrai que si un seul des deux tests est vrai, mais pas les deux. Peut-être une table de vérité expliquera-t-elle mieux cela :


Table de vérité EOR (ou exclusif)
Quand A estEOR (ou exclusif) B estRésultat
FauxFauxFaux
VraiFauxVrai
FauxVraiVrai
VraiVraiFaux



NOT


NOT est un autre mot qui peut être utilisée dans les comparaisons. À la différence de ANDAND, OR et EOREOR, il n'est pas utilisé pour relier des instructions mais il transforme simplement une condition en condition négative. Comme exemple, prenez le test de réponse négative à la fin de notre programme de « Quiz » :


      REM ...
      IF A$="O" OR A$="o" THEN PRINT "Correct"
      IF A$="N" OR A$="n" THEN PRINT "Faux"
      IF A$<>"O" AND A$<>"o" \
      \ AND A$<>"N" AND A$<>"n" \
      \ THEN PRINT "Réponse non valide"
      END
    

Comme la ligne 4 est un peu longue, nous décidons que toute réponse qui n'est ni « O » ni « o » peut produire le même message. La ligne 4 peut être réécrite et la ligne 3 ôtée :


      IF NOT(A$="O" OR A$="o") THEN PRINT "Faux"
      END
    

Utilisation de deux conditions simultanées : IF (si)... AND (et)... avec NOT (négation)

Il y a une grande variété de mots utilisables ici. Ne les mélangez pas : ils sont là pour servir à rendre votre programme plus intelligible. Si vous avez l'impression que vos tests logiques vous donnent une tête de linotte (ou de li-NOT, hé ! hé !), il y a probablement une meilleure façon de les exprimer : essayez de faire une restructuration.



ELSE


Dans cet exemple, nous voulons définir une variable pour indiquer si l'utilisateur a réussi un test non. La variable pourrait être utilisée dans des instructions IF dans tout le reste du programme. Nous pourrions faire ceci :


      INPUT "Entrez votre score : " Score%
      IF Score%>=40 THEN Reussi=1
      IF Score%<40 THEN Reussi=0
      END
    

Pourtant, il semble bien inefficace d'utiliser deux lignes qui s'excluent mutuellement. Dans ce cas, IF peut être combiné avec ELSE.


      INPUT "Entrez votre score : " Score%
      IF Score%>=40 THEN Reussi=1 ELSE Reussi=0
      END
    

Si Score%>=40, la première instruction est exécutée. Si elle est fausse, la deuxième est exécutée. Ce n'est pas tellement différent de la langue française, somme toute, et dans le cas où le niveau de réussite change, il n'y a qu'une ligne à modifier.


Utilisation des deux conditions avec IF (si)... THEN (alors) fais ceci ELSE (sinon), cela

Le mot THEN n'est habituellement pas obligatoire dans des instructions IF sur une seule ligne (les instructions sur plusieurs lignes arrivent juste un peu plus bas), à la condition que le sens soit clair :


      IF Score%>=40 Reussi=1 ELSE Reussi=0
    


Instructions IF sur plusieurs lignes


« BB4W » vous permet de répartir les instructions IF sur des lignes multiples. Par exemple, il est possible de faire quelque chose comme cela :


      IF Salaire>1E6 THEN AchatYacht=1 : AchatVilla=1
    

Si Salaire est supérieur à 1 million (admettons qu'ici, on n'est pas en Turquie !), alors les deux variables seront mises à 1. Si nous étions vraiment dans l'abondance, nous aurions peut-être aussi envie d'acheter un hélicoptère. Si on ajoute des éléments à notre ligne, on court le risque d'avoir des éléments qui deviennent illisibles parce qu'ils vont sortir de l'écran. N'est-ce pas plus facile de le lire ainsi :


      IF Salaire>1000000 THEN
        AchatYacht=1
        AchatVilla=1
        AchatHelico=1
      ENDIF
    

De cette façon, on peut lancer une grande quantité de codes conditionnels. Lorsque THEN est la dernière instruction sur une ligne (même une REM n'est pas autorisée ici), « BB4W » sait qu'il va lui être soumis un IF à lignes multiples. La fin du bloc est signalée par l'instruction correspondante ENDIF. Ne mettez jamais d'espace dan ENDIF. D'autres formes de BASICaccepteront END IF comme deux mots séparés. BBC BASIC non. Il prendra le premier END comme la fin du programme et s'arrêtera net. L'éditeur repoussera vers l'intérieur (décalera) automatiquement des blocs comme celui-ci pour qu'il soit plus facile de les lire. Si le « rentré » (le décalage) se fait de travers, c'est un avertissement que quelque chose est erroné.

Vous pouvez aussi utiliser ELSE dans cette structure :


      IF Salaire>1000000 THEN
        AchatYacht=1
        AchatVilla=1
        AchatHelico=1
      ELSE
        PRINT "Du boulot, toujours plus de boulot"
      ENDIF
    

Chaque instruction IF ne peut avoir qu'un seul ENDIF correspondant et un ELSE, mais ce dernier n'est pas obligatoire. Il est possible d'imbriquer les instructions :


      IF Salaire>1000000 THEN
        AchatYacht=1
        IF TresDepensier=1 THEN
          AchVilla=1
          AchHelico=1
        ENDIF
      ELSE
        PRINT "Du boulot, toujours plus de boulot"
      ENDIF
    


Priorité des opérateurs


Il est possible de combiner les comparaisons avec les instructions AND et OR, dans toute forme de combinaison permise par la logique, mais attention : l'interprétation par le BASIC ne sera peut-être pas la vôtre.


      IF Pluie=1 OR Neige=1 AND Bottes=0 THEN
        PRINT "Mets tes bottes"
      ENDIF
    

Si nous remontons au tableau de priorité des opérateurs dans le Chapitre 5, nous voyons que AND a la priorité sur OR. La ligne sera interprétée comme ceci :


      IF Pluie=1 OR (Neige=1 AND Bottes=0) THEN
      PRINT "Mets tes bottes"
      ENDIF
    

S'il pleut, on vous dira toujours de prendre vos bottes, que vous les portiez ou non. Ce n'est qu'en cas de neige ou si vous n'avez pas de bottes qu'on vous demandera de les mettre. Quand vous êtes dans le doute, utilisez des parenthèses :


      IF (Pluie=1 OR Neige=1) AND Bottes=0 THEN
      PRINT "Mets tes bottes"
      ENDIF
    


TRUE et FALSE


Pour terminer cette section, je voudrais signaler que BBC BASIC a deux variables prédéfinies : TRUE et FALSE. Elles ont en fait une valeur ; pour vous en rendre compte, passez en Mode direct (immédiat) tapez :


      PRINT TRUE, FALSE
    

On dirait qu'elles ne paraissent pas très utiles, mais elles sont formidables pour tester des situations de « oui / non » et pour rendre un programme plus lisible.


      REM Utilisation de TRUE / FALSE
      INPUT "Entrez votre mot de passe " MotPasse$
      IF MotPasse$="Super" THEN
        Superviseur%=TRUE
      ELSE
        Superviseur%=FALSE
      ENDIF
      IF Superviseur% THEN
        REM Voir l'écran de configuration principal
        PRINT "Bienvenue, maître"
      ELSE
        REM Voir l'écran d'un utilisateur ordinaire
        PRINT "Que voulez-vous faire ?"
      ENDIF
      END
    

La variable utilisée pour tester la situation vraie ou fausse est souvent appelée un drapeau (ou « flag »). Si ce programme était beaucoup plus gros, nous pourrions utiliser le drapeau de façon répétée plutôt que de refaire la même comparaison. De cette façon, lorsque le mot de passe change, nous n'avons à changer qu'une seule ligne de code, et non de nombreuses lignes. Regardez la ligne 8. Ceci est équivalent à :


      IF Superviseur%=TRUE ...
    

mais le BASIC est assez intelligent pour insérer le =TRUE implicite à notre place quand il fonctionne, rendant ainsi à nouveau le code plus lisible. Si vous vouliez tester la condition inverse, il vous faudrait toujours mettre :


      IF Superviseur%=FALSE ...
    

ou bien


      IF NOT Superviseur% ...
    
Un truc : Pour désactiver un bloc de code

Toute expression avec IF est évaluée jusqu'à ce qu'elle renvoie TRUE ou FALSE. Pour désactiver du code pendant les tests, nous pouvons l'insérer dans un bloc, comme suit :


          REM Code divers
          IF FALSE THEN
            CLS
            PRINT "Écrans de présentation"
          ENDIF
          REM Reste du code
        
IF recherche une condition vraie. FALSE, par définition, n'est jamais vrai, par conséquent le code ne sera jamais lancé.




Exercice


09.1
Voici un échantillon de la sortie de deux lancements d'un programme qui agit comme une simple calculatrice :


      Entrez le premier nombre : 5
      Entrez le second nombre : 6
      Tapez 1 pour additioner ; 2 pour soustraire : 1
      5 + 6 = 11
      >RUN
      Entrez le premier nombre : 45
      Entrez le second nombre : 55
      Tapez 1 pour additioner ; 2 pour soustraire : 2
      45 - 55 = -10
      >
    

Pouvez-vous écrire le programme qui produit l'écran ci-dessus ? Introduisez un INPUT pour chaque nombre, un INPUT pour les opérations. Utilisez IF pour choisir l'instruction PRINT correcte pour afficher le résultat. Vous aurez des points en plus si vous élargissez le programme pour y inclure la multiplication et la division.



Fin du Chapitre 9





Haut de Page  •  [Top of Page]

Page suivante (Ch. 10)  •  [Next Page (Ch. 10)]

Page précédente (Ch. 8)  •  [Previous Page (Ch. 8)]

Page d'entrée : BASIC, BBC BASIC et BB4W  •  [BASIC, BBC BASIC and BB4W  Entry Page]

Début du Guide pratique du BBC BASIC  •  [The Beginning of the BBC BASIC Tutorial]

Autres sujets  •  [Other subjects]