Les structures de boucles sont aussi trŠs utiles dans deux cas de figures : On veut r‚p‚ter x fois une s‚quence d'instructions. On veut r‚p‚ter une s‚quence d'instructions tant que ou jusqu'… ce qu'une expression soit v‚rifi‚e. Que les nouveaux venus dans la programmation ne s'affolent pas, la suite de ce paragraphe comprend des exemples car je sais que des exemples clairs valent bien des discours d'acad‚miciens ! LA BOUCLE :LOOP :ENDLOOP Les deux instructions :LOOP et :ENDLOOP r‚pondent … notre premier objectif, … savoir r‚p‚ter x fois une s‚quence d'instructions. Passons tout de suite … un exemple : :AFFECT i1,1 :LOOP 1,53 320X200 i1 K :ADD i1,1 :ENDLOOP Si nous consid‚rons que le fichier portant le nom 320X200 est une image 320*200 256 couleurs et sachant que le nombre d'apparitions de ce mode est de 53 pour cette version de MC-SHOW, vous comprendrez ais‚ment que ces 5 lignes de programmes remplacent 53 lignes de type: 320X200 1 K 320X200 2 K ... Tout cela se passe de commentaires, vous l'avez compris, toutes les instructions se trouvant entre un :LOOP et un :ENDLOOP seront ex‚cute‚s de 53 fois (de 1 … 53, ne v‚rifiez pas en comptant sur vos doigts, vous n'en avez pas assez !) LOOP n'autorise pas l'emploi des variables entiŠres comme ci-aprŠs : :LOOP i1,12 INTERDIT La borne 1 doit ˆtre toujours inf‚rieure … la borne 2 et les valeurs des bornes peuvent ˆtre comprises entre -32000 et +32000. De plus, ‚tant "quelque peu tordu sur les bords", l'auteur, moi-mˆme ici pr‚sent a programm‚ la possibilit‚ d'avoir jusqu'… DIX boucles :LOOP et :ENDLOOP imbriqu‚es... Exemple : :CLSTEXT ' Se place en mode texte :AFFECT i1,1 :LOOP 1,80 :AFFECT i2,1 :LOOP 1,25 :GOTOXY i1,i2 ' Place le curseur … la coordonn‚e X=i1 et Y=i2 :PRINT A ' Affiche un A majuscule :ADD i2,1 :ENDLOOP :ADD i1,1 :ENDLOOP :TOUCHKEY ' On attend l'appui sur une touche :END ' Fin de l'application, on revient au DOS Ce programme remplit l'‚cran de A, ce qui est trŠs bˆte mais montre bien le fonctionnement des boucles imbriqu‚es. Au fait, ne soyez pas ‚tonn‚ de constater un saut de ligne intempestif en fin de ligne, car celui-ci est toujours g‚n‚r‚ quand on ‚crit au caractŠre 80 de la ligne 25... L'INSTRUCTION EVAL Avant de passer … la suite du programme, qui est de r‚pondre … notre deuxiŠme objectif : On veut r‚p‚ter une s‚quence d'instructions tant que ou jusqu'… ce qu'une expression soit v‚rifi‚e. Nous allons nous attarder quelque peut vers l'instruction :EVAL. :EVAL est utilis‚e pour ‚valuer une expression. Or, il se trouve que les deux structures de boucles que nous allons voir plus loin utilisent des ‚valuations d'expressions qui ob‚issent aux mˆmes rŠgles que :EVAL... :EVAL v‚rifie une expression entre deux op‚rateurs. Sa syntaxe est donc de type : :EVAL op‚rande Les op‚rateurs sont TOUJOURS des variables num‚riques ou alphanum‚riques et jamais des valeurs. Les diff‚rents op‚randes sont : =, <>, <, >, <=, >= Exemples : :EVAL i1=i2 :EVAL i1i2 :EVAL i1<>r2 :EVAL r1=i2 :EVAL r1=r2 :EVAL s1=s2 Tous les caractŠres sont identiques :EVAL s1<>s2 Au moins un caractŠre diff‚rent :EVAL s1s2 Test sur longueurs de chaŒnes :EVAL s1<=s2 Test sur longueurs de chaŒnes :EVAL s1>=s2 Test sur longueurs de chaŒnes :EVAL s1=i1 INTERDIT :EVAL r1<>s2 INTERDIT En effet, on ne peut effectuer de tests entre des nombres et des caractŠres... ConcrŠtement, si le r‚sultat de l'‚valuation est vrai, l'instruction suivant imm‚diatement l'instruction :EVAL est ex‚cut‚e. Exemple : :AFFECT i1,1 :AFFECT i2,1 :CLSTEXT :EVAL i1=i2 :PRINT La variable i1 contient la valeur 1 :TOUCHKEY :END Le message va s'afficher, par contre si vous changez la valeur de i1 ou i2, le message ne s'affichera plus... Nous pouvons revenir … nos moutons avec les boucles :REPEAT :UNTIL et :WHILE :ENDWHILE. LA BOUCLE :REPEAT :UNTIL Cette boucle est la premiŠre r‚pondant au deuxiŠme objectif que nous nous ‚tions fix‚ en d‚but de chapitre … savoir : On veut r‚p‚ter une s‚quence d'instructions tant que ou jusqu'… ce qu'une expression soit v‚rifi‚e. Pour ˆtre plus pr‚cis, cette boucle permet de : R‚p‚ter une s‚quence d'instructions JUSQU'A ce qu'une expression soit v‚rifi‚e. Exemple : :AFFECT i1,1 :AFFECT i2,10 :CLSTEXT :REPEAT :GOTOXY 1,i1 :PRINT A :ADD i1,1 :UNTIL i1=i2 :TOUCHKEY :END Ce programme affiche neuf A et non pas dix comme on peut le croire … premiŠre vue... En effet, lorsque l'instruction :ADD i1,1 s'ex‚cute et que i1 vaut 9, sa valeur passe … 10, ce qui d‚clenche la sortie de la boucle donc pas de dixiŠme affichage... La particularit‚ de la boucle :REPEAT :UNTIL, c'est que l'‚valuation de l'expression ne se fait qu'… la fin de la boucle, ce qui signifie que celle-ci est ex‚cut‚e au moins une fois... La boucle est ex‚cut‚e JUSQU'A ce que i1=i2. Contrairement … la boucle :WHILE :ENDWHILE que nous allons voir pas plus tard que maintenant ! Remarque : L… aussi, la folie juv‚nile de l'auteur a frapp‚. Eh oui, on peut imbriquer 10 boucles :REPEAT :UNTIL. Amusez-vous bien... LA BOUCLE :WHILE :ENDWHILE Cette boucle est la deuxiŠme r‚pondant au deuxiŠme objectif que nous nous ‚tions fix‚ en d‚but de chapitre … savoir : On veut r‚p‚ter une s‚quence d'instructions tant que ou jusqu'… ce qu'une expression soit v‚rifi‚e. Pour ˆtre plus pr‚cis, cette boucle permet de : R‚p‚ter une s‚quence d'instructions TANT QU'UNE expression est v‚rifi‚e. Exemple : :AFFECT i1,1 :AFFECT i2,10 :CLSTEXT :WHILE i1<=i2 :GOTOXY 1,i1 :PRINT A :ADD i1,1 :ENDWHILE :TOUCHKEY :END Ce programme affiche dix A et non pas neuf comme pour la boucle :REPEAT :UNTIL. En effet, dans ce cas, le test est fait AVANT l'ex‚cution des instructions se trouvant dans la boucle. La boucle est ex‚cut‚e TANT QUE i1<=i2. Vous craignez encore un abus de 10 boucles :WHILE :ENDWHILE imbriqu‚es ? Eh bien oui, vous avez raison ! Et voil…, … force de courage et de t‚nacit‚, vous ˆtes arriv‚ … finir de lire ce paragraphe et moi … finir de l'‚crire !!!