GENISTA (1971) : TUTORIEL "BBC BASIC FOR WINDOWS" EN FRANÇAIS : CHAPITRE 12 : D'AUTRES BOUCLES : "REPEAT" ET "WHILE"



Logo Genista, fondé en 1971

Guide Tutoriel de BBC BASIC for Windows, Ch. 12

BBC BASIC (BB4W) Tutorial: Other Loops: REPEAT and WHILE

D'autres boucles : REPEAT et WHILE (Tutoriel BBC BASIC, Ch. 12) [Genista]

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

informatique et programmation Vous savez effectuer une sélection en utilisant CASE... OF... et WHEN. Vous avez également découvert les boucles avec FOR... TO... et NEXT – c'est très facile à utiliser.
Dans ce Chapitre, vous rencontrez d'autres types de boucles répétitives, légèrement différentes, avec REPEAT... UNTIL... et WHILE... ENDWHILE : ce sont d'autres manières d'effectuer un test, soit au début de la boucle, soit à la fin, en fonction des besoins.
Chapitre 11   •   Chapitre 12   •   Chapitre 13      

Chapitre 12 — D'autres boucles : REPEAT et WHILE



REPEAT ... UNTIL


Notre petit programme de cercle vient de se reposer pendant quelque temps, aussi réveillons-le et parlons des boucles conditionnelles. Dans l'état où nous l'avions abandonné, lorsque l'utilisateur avait fini, il devait le relancer. Ce serait bien si le programme se mettait en boucle jusqu'à ce que l'utilisateur en ait terminé avec lui. Une boucle FOR ne serait pas bonne ici, parce que nous ne savons pas combien de fois notre utilisateur voudrait faire tourner le programme. Voilà où nous rencontrons notre première boucle conditionnelle : REPEAT UNTIL. Comme d'habitude, voici un exemple que j'expliquerai ensuite :


 
      REM Aire d'un cercle
      REPEAT
        INPUT "Entrez un rayon : " Rayon
        Aire = PI*Rayon^2
        PRINT "L'aire de votre cercle est ";Aire
        INPUT "Recommencer ? O/N " Reponse$
      UNTIL Reponse$="N"
      END
    

Vous pouvez deviner qu'ici le programme continue sa boucle jusqu'à ce que l'utilisateur tape « N ». La boucle commence à la ligne 2 : REPEAT. Il n'y a ici ni condition ni d'autres mots-clés, mais juste un seul mot. « BB4W » décale horizontalement tout le code qui suit et reconnaît UNTIL à la ligne 7 comme la fin de la boucle. UNTIL teste une condition de la même façon que le fait un IF. Si la condition est fausse, on retourne à la ligne 2 pour un autre tour. Si la condition est vraie, la boucle se termine et l'exécution se poursuit à la ligne suivante. Tout le côté intelligent tient dans la ligne UNTIL : REPEAT ne fait que marquer le début de la boucle.

Si vous avez essayé le programme, vous aurez remarqué que nous avons retrouvé notre ancien problème : on imagine que l'utilisateur tapera la capitale « N ». Le test que fait UNTIL peut être aussi complexe que toute instruction IF, et il utilise exactement la même logique pour faire les calculs, aussi pouvons-nous changer la ligne 7 en :


      UNTIL Reponse$="N" OR Reponse$="n"
    

...et tout ira à nouveau bien. Armés de notre nouveau savoir, nous pouvons, c'est sûr, apercevoir un autre candidat pour REPEAT. La ligne 6 demande Reponse$ ; nous pouvons le tester jusqu'à ce que nous ayons une réponse valide avant de continuer. Essayez-le vous-même tout d'abord, et puis, comparez les résultats.


      REM Aire d'un cercle
      REPEAT
        INPUT "Entrez un rayon : " Rayon
        Aire = PI*Rayon^2
        PRINT "L'aire de votre cercle est ";Aire
        REPEAT
          INPUT "Recommencer ? O/N " Reponse$
        UNTIL INSTR("OoNn",Reponse$)<>0
      UNTIL INSTR("Nn",Reponse$)<>0 
      END
    

J'ai utilisé INSTR ici, mais vous auriez de la même façon pu utiliser :
Reponse$="O" OR Reponse$="o", etc.

Le problème principal rencontré pendant les boucles conditionnelles, c'est le syndrome de la boucle sans fin : assurez-vous toujours de mettre une condition de sortie à l'intérieur de la boucle.


      REM REPEAT sans fin
      Fini = FALSE
      REPEAT
        PRINT "Ai-je oublié quelque chose ?"
      UNTIL Fini
      END
    


WHILE ... ENDWHILE


Les boucles REPEAT testent une condition à la fin de la boucle. Ceci signifie que le code situé dans le corps de la boucle est toujours exécuté au moins une fois. Quelquefois, on ne le souhaite pas. Une boucle WHILE teste une condition avant d'entrer dans la boucle et d'exécuter le code qui y est contenu. D'une façon assez différente, le code n'est exécuté que si la condition de test est vraie, à l'opposé des boucles REPEAT qui exécutent le code alors que la condition de test est fausse. Regardez cela de près. La fin de la boucle est signalée par ENDWHILE, et nous faisons l'avertissement habituel pour ne pas couper ce mot en deux.

Voici un programme qui commence à 1 et ne cesse de le diviser par deux jusqu'à ce que le BASIC fasse un arrondi à zéro, pour essayer de trouver le plus petit nombre que « BB4W » pourra accepter. Cela ne donne pas véritablement tout à fait le plus petit nombre, mais il en est tout près.


      REM Plus petit nombre en utilisant WHILE
      Nombre = 1
      WHILE Nombre > 0
        DerNombre = Nombre
        Nombre = Nombre / 2
      ENDWHILE
      PRINT "La valeur du nombre est ";Nombre
      PRINT "La valeur précédente était ";DerNombre
      END
    

Un truc : Sortie des boucles

La boucle FOR est très tolérante en matière de test de la condition de sortie. Si vous dépassez la valeur finale, le BASIC ne sera pas gêné et il terminera la boucle comme vous vous y attendez. Ce n'est pas le cas avec REPEAT et WHILE. Regardez le code suivant :

          REM Boucles sans fin
          I%=1
          REPEAT
            I%+=2
            PRINT I%
          UNTIL I%=10
          END
        
La boucle ne se finira jamais, parce que le BASIC cherche une correspondance exacte. Il vaut mieux, avec REPEAT et WHILE ne pas utiliser de valeurs précises à moins que vous ne soyez à 100 % sûr qu'elles peuvent être atteintes. Ceci est tout particulièrement vrai dans le cas de nombres à virgule flottante. Pour corriger l'exemple, remplacez « = » par « >= » dans la ligne UNTIL et la rectification sera faite.




Exercices


12.1
Produisez un programme qui demande que vous entriez une chaîne et affichez le code ASCII du premier caractère. Faites-le continuer jusqu'à ce que la chaîne demandée soit vide ("").


12.2
Écrivez un programme qui demande l'entrée d'un nombre. Ajoutez ce nombre à un total courant actualisé. Répétez ceci jusqu'à ce que le nombre entré soit égal à 0. Affichez le résultat.



Fin du Chapitre 12





Haut de Page  •  [Top of Page]

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

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

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]