home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DP Tool Club 21
/
CD_ASCQ_21_040595.iso
/
dos
/
fr
/
mcshow10.exe
/
DOC
/
MC-SHOW
/
TXT
/
MCDOCL03.TXT
< prev
next >
Wrap
Text File
|
1994-09-10
|
7KB
|
244 lines
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érateur 1> opérande <opérateur 2>
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 i1<i2
:EVAL i1<>i2
: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 s1<s2 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>=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 !!!