GENISTA (1971) : TUTORIEL "BBC BASIC FOR WINDOWS" EN FRANÇAIS : CHAPITRE 10 : SÉLECTIONNER AVEC "CASE"



Logo Genista, fondé en 1971

Guide Tutoriel de BBC BASIC for Windows, Ch. 10

BBC BASIC (BB4W) Tutorial: Selection using CASE

Sélectionner avec CASE (Tutoriel BBC BASIC, Ch. 10) [Genista]

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

informatique et programmation Vous avez utilisé jusque-là une possibilité d'exécuter une partie de programme uniquement lorsque certaines conditions sont remplies. Pour cela, vous avez utilisé les trois mots
IF, THEN, ELSE (si... alors... sinon...). Dans ce Chapitre, vous découvrez une autre façon de le faire. Pour cela, trois mots nouveaux seront introduits : CASE...OF, WHEN, OTHERWISE (dans le cas... lorsque... autrement...), beaucoup plus faciles à gérer pour les choix complexes.
Chapitre 9   •   Chapitre 10   •   Chapitre 11      

Chapitre 10 — Sélectionner avec CASE


Vous vous retrouverez dans des situations où vous aurez besoin de tester la même variable dans un nombre de cas différents, dont un seul apportera comme résultat l'exécution du code. Un exemple qui me vient à l'esprit, c'est un système de menu. Bâtissons-le.


      REM Système de Menu simple
      CLS
      PRINT "Taper 1 pour l'option 1"
      PRINT "Taper 2 pour l'option 2"
      PRINT "Taper 3 pour l'option 3"
      INPUT "Entrez votre choix : " Choix%
      IF Choix%=1 THEN PRINT "Vous avez choisi l'option 1"
      IF Choix%=2 THEN PRINT "Vous avez choisi l'option 2"
      IF Choix%=3 THEN PRINT "Vous avez choisi l'option 3"
      END
    

Si l'utilisateur choisit 1, le code associé avec le choix 1 est lancé. À la fin, le BASIC s'en va contrôler si Choix% est égal à 2 ou 3, même s'il est évident que ce n'est pas possible. Ceci n'est pas très efficace et, si chacune des options s'agrandit en plusieurs lignes de code, la trace des IF peut être facilement perdue. C'est là qu'entre en scène le grand frère de IF  : CASE. Nous allons réécrire le programme en nous servant de CASE :


      REM Système de Menu simple
      CLS
      PRINT "Taper 1 pour l'option 1"
      PRINT "Taper 2 pour l'option 2"
      PRINT "Taper 3 pour l'option 3"
      INPUT "Entrez votre choix : " Choix%
      CASE Choix% OF
        WHEN 1: PRINT "Vous avez choisi l'option 1"
        WHEN 2: PRINT "Vous avez choisi l'option 2"
        WHEN 3: PRINT "Vous avez choisi l'option 3"
      ENDCASE
      END
    

Je suis certain que vous voyez ce qui se passe ici. La ligne CASE dit au BASIC qu'elle utilise Choix% comme variable de comparaison. Chaque ligne WHEN donne une valeur pour faire la comparaison. Lorsqu'une correspondance est trouvée, le code associé est exécuté jusqu'au WHEN suivant. Le BASIC saute alors vers l'instruction ENDCASE et continue le reste du programme, en ignorant tous les autres WHEN. Comme pour ENDIF, ENDCASE est toujours écrit en un seul mot.

WHEN peut prendre tout un éventail de valeurs ; modifiez l'instruction CASE pour ajouter :


      CASE Choix% OF
        WHEN 1: PRINT " Vous avez choisi l'option 1"
        WHEN 2: PRINT " Vous avez choisi l'option 2"
        WHEN 3: PRINT " Vous avez choisi l'option 3"
        WHEN 4,5,6: PRINT "Option non installée."
      ENDCASE
    

CASE est tout aussi capable de tester des chaînes de caractères :


      REM Quiz de géographie
      PRINT "Quelle est la capitale de la France :"
      PRINT "a) Paris"
      PRINT "b) Londres"
      PRINT "c) Madrid"
      INPUT "Entrez a,b ou c: " Reponse$
      CASE Reponse$ OF
        WHEN "A", "a": PRINT "Correct"
        WHEN "B", "b": PRINT "Non, c'est le Royaume-Uni"
        WHEN "C", "c": PRINT "Non, c'est l'Espagne"
      ENDCASE
      END
    

Si aucun WHEN n'est exécuté, nous pouvons intercepter ce fait et en faire quelque chose. Le mot-clé OTHERWISE doit être le dernier cas avant ENDCASE et n'a pas de condition.


      REM Quiz de géographie
      PRINT "Quelle est la capitale de la France :"
      PRINT "a) Paris"
      PRINT "b) Londres"
      PRINT "c) Madrid"
      INPUT "Entrez a,b ou c: " Reponse$
      CASE Reponse$ OF
        WHEN "A", "a": PRINT "Correct"
        WHEN "B", "b": PRINT "Non, c'est le Royaume-Uni"
        WHEN "C", "c": PRINT "Non, c'est l'Espagne"
        OTHERWISE: PRINT "Désolé, réponse invalide"
      ENDCASE
      END
    

Comme cela a été dit, c'est facultatif. Chaque WHEN pourrait avoir – et aura souvent – plus d'une ligne de code. Si les tests dans les WHEN se recouvrent ou sont identiques, le premier est exécuté et le second ignoré.

C'est à peu près tout ce qu'on peut dire de CASE, très utile, surtout quand on traitera des sous-routines, plus tard.

Un mot d'avertissement final, cependant : ne soyez pas tenté de mettre un commentaire (REM) après le OF, sinon l'ensemble ne pourra pas fonctionner et vous vous prendrez la tête à deux mains pour comprendre pourquoi.




Exercice


10.1
Recréez un programme de décision pour chef de service. Générez un nombre aléatoire de 1 à 6 et affichez un message en fonction du résultat :
1 – Embaucher un béni-oui-oui
2 – Licencier quelqu'un
3 – Déléguer vos pouvoirs
4 – Annuler toutes les heures supplémentaires
5 – Vous octroyer une augmentation de salaire
6 – Dévaliser le fonds de retraites



Fin du Chapitre 10





Haut de Page  •  [Top of Page]

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

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

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]