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 >
Text File  |  1994-09-10  |  7KB  |  244 lines

  1.         Les structures de boucles sont aussi très utiles dans deux cas de
  2.     figures :
  3.  
  4.         On veut répéter x fois une séquence d'instructions.
  5.  
  6.         On veut répéter une séquence d'instructions tant que ou jusqu'à ce
  7.     qu'une expression soit vérifiée.
  8.  
  9.         Que les nouveaux venus dans la programmation ne s'affolent pas, la
  10.     suite de ce paragraphe comprend des exemples car je sais que des exemples
  11.     clairs valent bien des discours d'académiciens !
  12.  
  13.  
  14.         LA BOUCLE :LOOP :ENDLOOP
  15.  
  16.         Les deux instructions :LOOP et :ENDLOOP répondent à notre premier
  17.     objectif, à savoir répéter x fois une séquence d'instructions.
  18.  
  19.         Passons tout de suite à un exemple :
  20.  
  21.         :AFFECT i1,1
  22.  
  23.         :LOOP 1,53
  24.         320X200 i1 K
  25.         :ADD i1,1
  26.         :ENDLOOP
  27.  
  28.         Si nous considérons que le fichier portant le nom 320X200 est une
  29.     image 320*200 256 couleurs et sachant que le nombre d'apparitions de ce
  30.     mode est de 53 pour cette version de MC-SHOW, vous comprendrez aisément
  31.     que ces 5 lignes de programmes remplacent 53 lignes de type:
  32.  
  33.         320X200 1 K
  34.         320X200 2 K
  35.         ...
  36.  
  37.         Tout cela se passe de commentaires, vous l'avez compris, toutes
  38.     les instructions se trouvant entre un :LOOP et un :ENDLOOP seront exécuteés
  39.     de 53 fois (de 1 à 53, ne vérifiez pas en comptant sur vos doigts, vous
  40.     n'en avez pas assez !)
  41.  
  42.         LOOP n'autorise pas l'emploi des variables entières comme ci-après :
  43.  
  44.         :LOOP i1,12  INTERDIT
  45.  
  46.         La borne 1 doit être toujours inférieure à la borne 2 et
  47.     les valeurs des bornes peuvent être comprises entre -32000 et +32000.
  48.  
  49.         De plus, étant "quelque peu tordu sur les bords", l'auteur, moi-même
  50.     ici présent a programmé la possibilité d'avoir jusqu'à DIX boucles
  51.     :LOOP et :ENDLOOP imbriquées...
  52.  
  53.         Exemple :
  54.  
  55.         :CLSTEXT
  56.         ' Se place en mode texte
  57.         :AFFECT i1,1
  58.  
  59.         :LOOP 1,80
  60.         :AFFECT i2,1
  61.  
  62.         :LOOP 1,25
  63.         :GOTOXY i1,i2
  64.         ' Place le curseur à la coordonnée X=i1 et Y=i2
  65.         :PRINT A
  66.         ' Affiche un A majuscule
  67.         :ADD i2,1
  68.         :ENDLOOP
  69.  
  70.         :ADD i1,1
  71.         :ENDLOOP
  72.  
  73.         :TOUCHKEY
  74.         ' On attend l'appui sur une touche
  75.         :END
  76.         ' Fin de l'application, on revient au DOS
  77.  
  78.         Ce programme remplit l'écran de A, ce qui est très bête mais montre
  79.     bien le fonctionnement des boucles imbriquées. Au fait, ne soyez pas
  80.     étonné de constater un saut de ligne intempestif en fin de ligne, car
  81.     celui-ci est toujours généré quand on écrit au caractère 80 de la
  82.     ligne 25...
  83.  
  84.  
  85.         L'INSTRUCTION EVAL
  86.  
  87.         Avant de passer à la suite du programme, qui est de répondre à notre
  88.     deuxième objectif :
  89.  
  90.         On veut répéter une séquence d'instructions tant que ou jusqu'à ce
  91.     qu'une expression soit vérifiée.
  92.  
  93.         Nous allons nous attarder quelque peut vers l'instruction :EVAL.
  94.  
  95.         :EVAL est utilisée pour évaluer une expression. Or, il se trouve que
  96.     les deux structures de boucles que nous allons voir plus loin utilisent
  97.     des évaluations d'expressions qui obéissent aux mêmes règles que :EVAL...
  98.  
  99.         :EVAL vérifie une expression entre deux opérateurs.
  100.  
  101.         Sa syntaxe est donc de type :
  102.  
  103.         :EVAL <opérateur 1> opérande <opérateur 2>
  104.  
  105.         Les opérateurs sont TOUJOURS des variables numériques ou
  106.     alphanumériques et jamais des valeurs.
  107.  
  108.         Les différents opérandes sont : =, <>, <, >, <=, >=
  109.  
  110.         Exemples :
  111.  
  112.         :EVAL i1=i2
  113.         :EVAL i1<i2
  114.         :EVAL i1<>i2
  115.         :EVAL i1<>r2
  116.         :EVAL r1=i2
  117.         :EVAL r1=r2
  118.  
  119.         :EVAL s1=s2   Tous les caractères sont identiques
  120.         :EVAL s1<>s2  Au moins un caractère différent
  121.         :EVAL s1<s2   Test sur longueurs de chaînes
  122.         :EVAL s1>s2   Test sur longueurs de chaînes
  123.         :EVAL s1<=s2  Test sur longueurs de chaînes
  124.         :EVAL s1>=s2  Test sur longueurs de chaînes
  125.  
  126.         :EVAL s1=i1   INTERDIT
  127.         :EVAL r1<>s2  INTERDIT
  128.  
  129.         En effet, on ne peut effectuer de tests entre des nombres et des
  130.     caractères...
  131.  
  132.         Concrètement, si le résultat de l'évaluation est vrai, l'instruction
  133.     suivant immédiatement l'instruction :EVAL est exécutée.
  134.  
  135.         Exemple :
  136.  
  137.         :AFFECT i1,1
  138.         :AFFECT i2,1
  139.         :CLSTEXT
  140.  
  141.         :EVAL i1=i2
  142.          :PRINT La variable i1 contient la valeur 1
  143.  
  144.         :TOUCHKEY
  145.         :END
  146.  
  147.         Le message va s'afficher, par contre si vous changez la valeur de i1
  148.     ou i2, le message ne s'affichera plus...
  149.  
  150.         Nous pouvons revenir à nos moutons avec les boucles :REPEAT :UNTIL et
  151.     :WHILE :ENDWHILE.
  152.  
  153.  
  154.         LA BOUCLE :REPEAT :UNTIL
  155.  
  156.         Cette boucle est la première répondant au deuxième objectif que nous
  157.     nous étions fixé en début de chapitre à savoir :
  158.  
  159.         On veut répéter une séquence d'instructions tant que ou jusqu'à ce
  160.     qu'une expression soit vérifiée.
  161.  
  162.         Pour être plus précis, cette boucle permet de :
  163.  
  164.         Répéter une séquence d'instructions JUSQU'A ce qu'une expression
  165.     soit vérifiée.
  166.  
  167.         Exemple :
  168.  
  169.         :AFFECT i1,1
  170.         :AFFECT i2,10
  171.         :CLSTEXT
  172.  
  173.         :REPEAT
  174.         :GOTOXY 1,i1
  175.         :PRINT A
  176.         :ADD i1,1
  177.         :UNTIL i1=i2
  178.  
  179.         :TOUCHKEY
  180.         :END
  181.  
  182.         Ce programme affiche neuf A et non pas dix comme on peut le croire
  183.     à première vue...
  184.  
  185.         En effet, lorsque l'instruction :ADD i1,1 s'exécute et que i1 vaut 9,
  186.     sa valeur passe à 10, ce qui déclenche la sortie de la boucle donc pas de
  187.     dixième affichage...
  188.  
  189.         La particularité de la boucle :REPEAT :UNTIL, c'est que l'évaluation
  190.     de l'expression ne se fait qu'à la fin de la boucle, ce qui signifie que
  191.     celle-ci est exécutée au moins une fois...
  192.  
  193.         La boucle est exécutée JUSQU'A ce que i1=i2.
  194.  
  195.         Contrairement à la boucle :WHILE :ENDWHILE que nous allons voir pas
  196.     plus tard que maintenant !
  197.  
  198.         Remarque : Là aussi, la folie juvénile de l'auteur a frappé. Eh oui,
  199.     on peut imbriquer 10 boucles :REPEAT :UNTIL. Amusez-vous bien...
  200.  
  201.  
  202.         LA BOUCLE :WHILE :ENDWHILE
  203.  
  204.         Cette boucle est la deuxième répondant au deuxième objectif que nous
  205.     nous étions fixé en début de chapitre à savoir :
  206.  
  207.         On veut répéter une séquence d'instructions tant que ou jusqu'à ce
  208.     qu'une expression soit vérifiée.
  209.  
  210.         Pour être plus précis, cette boucle permet de :
  211.  
  212.         Répéter une séquence d'instructions TANT QU'UNE expression est
  213.     vérifiée.
  214.  
  215.         Exemple :
  216.  
  217.         :AFFECT i1,1
  218.         :AFFECT i2,10
  219.         :CLSTEXT
  220.  
  221.         :WHILE i1<=i2
  222.         :GOTOXY 1,i1
  223.         :PRINT A
  224.         :ADD i1,1
  225.         :ENDWHILE
  226.  
  227.         :TOUCHKEY
  228.         :END
  229.  
  230.         Ce programme affiche dix A et non pas neuf comme pour la boucle
  231.     :REPEAT :UNTIL.
  232.  
  233.         En effet, dans ce cas, le test est fait AVANT l'exécution des
  234.     instructions se trouvant dans la boucle.
  235.  
  236.         La boucle est exécutée TANT QUE i1<=i2.
  237.  
  238.         Vous craignez encore un abus de 10 boucles :WHILE :ENDWHILE
  239.     imbriquées ? Eh bien oui, vous avez raison !
  240.  
  241.         Et voilà, à force de courage et de ténacité, vous êtes arrivé à finir
  242.     de lire ce paragraphe et moi à finir de l'écrire !!!
  243.  
  244.