Leçon 9:

Boucle Tant Que

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:

  1. de le faire tourner sur lui-même s'il est mal orienté
  2. de faire avancer le robot d'une case s'il est bien orienté.

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:

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.

- 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

- 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.


Zone pour malvoyants

On utilisera comme d'habitude le terrain 9x9 sans obstacles. Le travail se fera en deux phases:

Phase 1 : sous-programme AllerVersXY

Il s'agit dans un premier temps d'écrire un sous programme qui permettra:

  1. de le faire tourner sur lui-même s'il est mal orienté
  2. de faire avancer le robot d'une case s'il est bien orienté (c'est-à-dire si le robot se rapproche de la case-cible, donnée par ses coordonnées x et y).
Indication: utilisez (après l'avoir comprise) la condition logique dyRobot=0 et (x-xRobot)*dxRobot > 0
Phase 2 : sous-programme AllerALaCaseXY

Il s'agit ensuite d'écrire un sous-programme AllerALaCaseXY, utilisant le sous-programme AllerVersXY, qui permettra au robot d'atteindre la case-cible.