Boucle Tant Que 
A la leçon précédente, nous
avons vu la boucle Pour, qui permet de répéter un certain
nombre de fois un sous-programme. Nous connaissions alors a priori le
nombre de fois que le sous-programme devait être exécuté.
Il n'en est pas toujours ainsi. Il arrive que l'on sache la condition
de sortie de la boucle, mais pas le nombre d'itérations. Dans
ce cas, on utilisera une boucle TantQue.
Dans cette leçon, nous allons écrire un sous-programme AllerALaCaseXY
qui déplace le robot vers une case de coordonnées (x,y), x
et y étant deux variables dont les valeurs auront été affectées avant
d'appeler le sous-programme. Pour faire aller le robot à la case (x,y), on le
déplacera vers la position (x,y) tant qu'il ne sera pas arrivé à
destination. On utilisera pour cela une boucle TantQue et un autre
sous-programme AllerVersXY .
Sous-programme AllerVersXY
Ce sous-programme permettra:
- de le faire tourner sur lui-même s'il est mal orienté
- de faire avancer le robot d'une case s'il est bien orienté.
|
 |
TRAVAIL A FAIRE
 |
- Les boucles sont utilisables à partir du niveau 5 :
choisissez en conséquence un niveau supérieur ou égal
à 5. Utilisez le terrain
Terrain9x9SansObstacles .
- Créez un nouveau sous-programme auquel vous donnerez le nom
AllerVersXY .
- Construisez l'organigramme ci-dessous.
- Essayez de comprendre la signification de la condition logique dyRobot=0
et (x-xRobot)*dxRobot > 0.
- Vérifiez que l'organigramme est correct en cliquant le bouton
Vérifier organigramme
.
|

Conditions logiques utilisées pour tester la direction du robot
dyRobot=0 et (x-xRobot)*dxRobot
> 0:
- la condition dyRobot = 0 est vraie si le robot est orienté
suivant l'axe des x; dxRobot vaut alors 1 pour une orientation vers
la droite et -1 pour une orientation vers la gauche (voir leçon
5);
- la valeur x-xRobot représente le parcours à
effectuer suivant l'axe des x;
- le robot est orienté vers la colonne x à atteindre si sa direction
dxRobot et le parcours à effectuer sont de même signe;
- le produit des deux doit alors être positif, ce qui est traduit par la
condition (x-xRobot)*dxRobot> 0.
De la même façon, la condition dxRobot=0 et (y-yRobot)*dyRobot
> 0 permet de tester l'orientation du robot suivant l'axe des y.
Sous-programme AllerALaCaseXY
La boucle TantQue est représentée par un bloc boucle
de même forme que la boucle Pour (voir leçon
8). L'en-tête de la boucle contient l'instruction TantQue
qui est de la forme:
TantQue condition logique
Si la condition logique donne le résultat
Vrai, l'organigramme présent dans le corps de la boucle est exécuté.
Puis l'instruction Fin TantQue ramène l'exécution à
l'en-tête de la boucle, la condition est à nouveau évaluée,
etc.
Si la condtion logique donne le résultat Faux, le corps de la boucle
n'est pas exécuté et l'exécution se poursuit au bloc suivant
la boucle.
|
TRAVAIL A FAIRE
 |
- Créez un nouveau sous-programme auquel vous donnerez le nom
AllerALaCaseXY
- Construisez l'organigramme ci-dessous
- Vérifiez que l'organigramme est correct en cliquant le bouton
Vérifier organigramme

|

Dans le sous-programme AllerALaCaseXY , le corps de la boucle, c'est-à-dire
l'appel du sous-programme AllerVersXY , sera exécuté
tant que la condition xRobot <> x ou yRobot
<> y sera vraie; xRobot <> x est une
expression logique qui compare xRobot et x, le résultat
est vrai si xRobot est différent de x; de même,
yRobot <> y est vraie si yRobot est différent
de y; en conséquence la condition xRobot <> x
ou yRobot <> y sera vraie si le robot n'est pas dans
la case (x,y).
Programme principal
|
TRAVAIL A FAIRE
 |
- Entrez l'organigramme ci-dessous dans le programme principal.
- Lancez l'exécution et vérifiez que la robot arrive bien
dans la case indiquée par les variables x et y.
- Changez la position de départ du robot et relancez le programme.
- Changez les valeurs de x et y et relancez le programme.
|

|