Tutorial 07
Les boucles
Nouvelles commandes :
> While = Début d'une boucle
"Tant que..." (condition testée au début) [PRGM] [5]
> Repeat = Début d'une
boucle "Jusqu'à-ce que..." (condition testée à la
fin) [PRGM] [6]
> For(V,N1,N2[,i]
= Boucle qui incrémente une variable de la valeur de début à
celle de fin [PRGM] [4]
> End = Termine une boucle
ou If-Then-Else [PRGM] [7]
> IS>(V,N =
Incrémenter et omettre [PRGM] [A]
> DS<(V,N =
Décrémenter et omettre [PRGM] [B]
Introduction :
Nous allons voir les boucles. Ah ah! Qu'est-ce? Comme son nom
l'indique, il s'agit d'instructions exécutées en boucles tant
qu'une instruction est vraie ou jusqu'à ce qu'une instruction
soit vraie.
Ensuite, nous allons voir deux autre commandes peu utilisées en
programmation mais qui peuvent être bon à utiliser. Ce ne sont
pas des boucles mais je n'avais pas envie de faire de tutorial
spécial car quelques uns d'entres vous préfereront peut-être
les passer. C'est dommage car elles peuvent faire perdre pas mal
d'octets à votre programme.
While :
Toute boucle commence par une commande puis se termine par End. While, en anglais, signifie "Tant
que...". Vous devrez donc ajouter une condition après cette
commande. Nous allons voir cela, comme d'abitude, avec un
exemple.
Voici le programme :
:ClrHome Comme d'abitude : sa
fonction n'a pas changée!!
:While K<>105 Tant que K est
différent de 105
:Output(5,5,"EN PAUSE") Ici,
sont insérées les instructions exécutées en boucle
:getKey->K Un petit effort de
mémoire : change la valeur de K avec la dernière touche
préssée
:End Fin de
boucle : Retourne au While si la condition toujours fausse.
Sinon, continue le cours du programme
Vous devez appuyer sur [ENTER] (valeur 105 pour K) pour quitter
la pause.
Sachez que la condition est testée au début de la boucle donc,
si elle est vraie dès le début, la boucle ne sera même pas
exécutée une seule fois. Si vous réésayez d'exécuter le
programme, "EN PAUSE" ne sera même pas affiché car K
est maintenant égal à 105 ([ENTER]). Pour éviter ceci et si
vous utilisez des variables dans la condition, vérifiez si la
condition n'est pas exacte dès le début. Pour cela, juste
après ClrHome il aurai fallut
insérer 0->K. C'est un type
d'erreur à prendre en compte lorsque vous programmez! Essayez
d'ajouter cette ligne et exécutez le programme plusieurs fois :
il marche!!
Ici, g n'est utilisé qu'une seule fois. Le programme aurrai
alors pu s'écrire comme ceci :
:ClrHome Pas de
commentaires : devinez...
:Output(5,5,"EN PAUSE")
:While getKey<>105
:End
Dans cette version, pas besoin de réinitialiser K au démarrage.
Repeat :
Nous allons reprendre, une fois de plus, le précédent
exemple (faut que sa rentre!) en le modifiant pour l'exécuter
avec la boucle Repeat. Cette commande
est sensiblement la même, mis à part qu'elle veut dire
"Jusqu'à ce que..." et que la condition est testée à
la fin, ce que permet d'exécuter la boucle au moins une fois :
contrairement à While.
:ClrHome
:Repeat K=105 Ici, pas besoins
d'initialiser K car la condition est testée à la fin et...
:Output(5,5,"EN PAUSE")
:getKey->K ... si aucune touche
n'est préssée, K sera initialisé ici
:End
Vous remarquerez que K<>105
a été changé en K=105.
Réfléchissez en traduissant ça en français et vous
comprendrez qui si vous voulez passer de la boucle While à la boucle Repeat
pour que les instructions soient exécutées au moins une fois ou
pas (dans la plupart des cas, c'est ce paramètre qui doit
décider du choix de l'un ou de l'autre) il vous faudra inverser
les conditions. Puisque K<>105
est bien l'inverse de K=105. Vous
pourrez aussi passer d'une boucle à l'autre pas la fonction n.
En effet, K<>105 est bien
égale à not(K=105) qui est l'invers
de K<>105? Ça chauffe, on
dirait? Méditez cela et nous pourons continuer!!
Boucle infinie :
Pour faire une boucle infinie, vous avez deux solutions :
:While 1
:Instructions
:End
Ou bien alors :
:Repeat 0
:Instructions
:End
Vous remarquerez, une fois de plus, que 1 est l'opposé de 0. Ce
qui confirme la règle précédente.
Des deux, vous choisissez celle que vous voullez! Ils seront
toutes deux exécutées infiniement.
For :
For est une boucle assez
spéciale. Pour la comprendre, exécutez ce programme :
Programme exemple pour la boucle For :
:ClrHome Ça
c'est pas nouveau
:For(X,1,10) Commancement de la
boucle For : Stoque 1 dans X et...
:Output(5,X,X) ...Écrit la valeur
de X à la ligne 5 et à la colone X...
:Pause ...Pour vous laisser le temps
de voir les effets...
:End ...Incrémente X et réexécute
la boucle jusqu'à ce que X soit supérieur à 10
:Disp X Vous pouvez voir la
dernière valeur de X, qui n'est pas forcément la dernière
valeur affichée
Arrivé à la valeur 10, la TI incrémente X, ce qui fait
11 et qui est suppérieur à 10, donc la boucle est terminée. La
variable X terminera la boucle avec la valeur 11 : il faut en
tenir compte si vous voulez réutiliser sa valeur
ultéruieurement dans le programme.
En claire, et comme vous avez pu le constater, la boucle For(variable,valeur1,valeur2)
stoque valeur1 dans variable et l'incrémente de 1 à chaque
répétition de la boucle et ce jusqu'à ce que variable ai dépassé la valeur2.
Maintenant, passons au paramètre optionnel ,i.
Ce paramètre est la valeur d'incrémentation. Ainsi, vous pouvez
compter de deux en deux et non de un en un comme dans le
précédent exemple. Nous allons le refaire avec
l'incrémentation 2 :
Boucle For avec incrémentation :
:ClrHome
:For(X,1,10,2) Commancement de la
boucle For : Stoque 1 dans X et...
:Output(5,X,X)
:Pause
:End ...Incrémente X de 2 et
réexécute la boucle jusqu'à ce que X soit supérieur à 10
:Disp X Vous pouvez voir la
dernière valeur de X, qui n'est pas forcément la dernière
valeur affichée
Arrivé à la valeur 9, la TI incrémente X de 2, ce qui
fait 11 et qui est suppérieur à 10, donc la boucle est
terminée.
Grace au paramètre d'incrémentation, on peut compter à rebourg
en lui donnant la valeur -1.
Compter à rebourg avec la boucle For :
:ClrHome Ça
c'est pas nouveau
:For(X,9,0,-1) Attention : le moins
s'obtient ici avec la touche [(-)] en blanc car il ne s'agit pas
du signe de soustraction
:Output(5,8,X)
:Pause
:End
:Disp X
Avec l'incrémentation -1, la boucle se termine si la
variable est inférieur à la valeur2.
Arrivé à la valeur 0, la TI décrémente X, ce qui fait -1 et
qui est inférieur à 1, donc la boucle est terminée.
Incrémentation et décrémentation :
La commande IS>( ajoute 1 à la
variable donnée. Si le résultat est supérieur à la valeur
indiquée après (qui peut être une expression), la commande
suivante est omise.
Exemple :
:Input A Demande une valeur pour
initialiser A
:IS>(A,6) Incrémente
la variable A. Si A est plus grand que la valeur 6...
:Disp "PAS > 6" ...Alors
cette instruction est omise (dans la cas contraire elle est
exécutée)
Entrez la valeur 5 puis 6. Avec la valeur 5, l'instruction
suivante est exécutée (5+1=6 : pas plus grand que la valeur
donnée qui est justement 6) tandis qu'avec la valeur 6, A est
augmenté de 1 et devient égal à 7, qui est supérieur à 6
donc l'instruction suivante est omise.
La commande d est à peu près similaire, à ceci près qu'elle
décrémente la variable donnée et que l'instruction suivante
est omise si la variable est inférieure à la valeur donnée.
Exemple :
:Input A Demande une valeur pour
initialiser A
:DS<(A,6) Incrémente
la variable A. Si A est plus petit que la valeur 6...
:Disp "> 6" ...Alors
cette instruction est omise (dans la cas contraire elle est
exécutée)
Entrez la valeur 6 puis 7. Avec la valeur 6, A est diminué de 1
et devient égal à 5, qui est inférieur à 6 donc l'instruction
suivante est omise tandis qu'avec la valeur 7, l'instruction
suivante est exécutée (7-1=6 : pas plus petit que la valeur
donnée qui est justement 6).
Je vous l'accorde : ces deux fonctions demandent beaucoup de gym
des neuronnes pour bien être domptées. Gardez ces deux
programmes si vous êtes décidés à les utiliser et changer le
6 si besoin est.
Conclusion :
Tutorial dont on pourrai ce passer. En effet, on peut faire des boucles comme l'on a toujours fait jusque là : avec des labels et des Goto. Mais ces boucles sont moins estétiques, prennent queleques octets de plus en mémoire et, surtout, si plus tard vous voulez devenir programmeur vous apprendrez que les étiquettes dans un programme en language évolué doivent être évités au plus possible (pour la lisibilité, notemment). C'est juste une bonne habitude à prendre!
Retour : Sommaire
Aide : Liste
des commandes
Précédent : Tutorial
06 : Utiliser les touches dans un programme
Suivant : Tutorial
08 : Comportement aléatoire