Leçon 8:

Boucle Pour

Utilité des boucles

Dans cette leçon, vous allez faire dessiner par le robot un carré de 5 cases de coté. Pour marquer une case d'un point rouge, le robot utilisera l'instruction Marquer .
Le périmètre du carré est formé de 16 cases. Au total, le robot devra avancer et marquer 16 fois et il devra tourner 4 fois à chaque coin: il faudrait donc au moins 36 (16+16+4) blocs pour faire cela.... C'est long, surtout pour des actions qui se répètent. Et si on veut dessiner un carré de 6 cases de coté, tout est à refaire!
Il existe une solution adaptée à des actions répétitives: les boucles qui permettent de répéter un nombre de fois donné une même partie de programme.
Une boucle est représentée dans l'organigramme par un bloc dans lequel on peut insérer d'autres blocs correspondant à la partie de programme à répéter.

Boucle Pour

Recopiez le sous-programme ci-dessous qui fait marquer au robot 4 cases alignées.
  1. choisissez le menu Programmation > Nouveau sous-programme
  2. donnez au sous-programme le nom DessinerUnCote
  3. construisez l'organigramme du sous-programme; utilisez la boucle de droite (Boucle Pour)
  4. vérifiez le résultat obtenu

          

L'en-tête de la boucle contient l'instruction: Pour i = 1 jusque 4.
Pour et jusque sont deux mots-clefs obligatoires dans cette instruction.
i est une variable du programme, utilisée ici comme variable de la boucle.
1 est la valeur initiale de la variable et 4 est sa valeur finale; ces valeurs peuvent être des nombres entiers ou des expressions numériques.
Suivant est un mot-clef qui indique la fin de la boucle.

Déroulement de l'exécution :

  1. la première fois que la boucle est exécutée, la variable de boucle reçoit la valeur initiale: i a au départ la valeur 1
  2. ensuite le corps de la boucle (organigramme contenu dans la boucle) est exécuté: le robot dessine une marque sur la case qu'il occupe, puis avance d'une case
  3. ensuite l'instruction Suivant est exécutée, elle a pour effet de ramener l'exécution à l'en-tête de la boucle
  4. la deuxième fois que l'en-tête est exécuté, la variable de la boucle est augmentée par défaut d'une unité: la valeur de i devient 2 (On peut augmenter la variable de plusieurs unités grâce à l'instruction pas. Par exemple, avec l'en-tête Pour j=5 jusque 25 pas 10, la variable j aura successivement les valeurs 5, 15 et 25)
  5. ensuite le corps de la boucle est à nouveau exécuté, puis l'instruction Suivant et ainsi de suite jusqu'à ce que la valeur de la variable dépasse la valeur finale. La boucle sera terminée quand i aura la valeur 5: le robot aura alors marqué 4 cases. L'exécution du programme se poursuit au bloc qui suit la boucle (ici le bloc de fin).

Les boucles sont disponibles à partir du niveau 5: choisissez en conséquence un niveau supérieur ou égal à 5. Utilisez le terrain Terrain9x9SansObstacles. Sélectionnez l'objectif Dessiner un carré sur le sol.

Complétez l'organigramme de cette leçon pour faire dessiner un carré de 5 cases de côtés:

  1. avec le robot orienté vers la droite et positionné sur la case (1,1). Pour mémoire, les coordonnées sont expliquées à la leçon 5.
  2. quelles que soient la position et l'orientation initiales du robot.
DessinerCarre.bop


Compétition

Dans ce projet, le robot devra marquer les 81 cases d'un terrain 9x9 sans obstacles le plus vite possible. La position et l'orientation initiales du robot sont aléatoires.
Vous compterez le nombre de mouvements (à l'aide d'un compteur dans le programme) ainsi: 1 mouvement = tourner à droite, tourner à gauche ou avancer. Les autres instructions ne comptent pas pour un mouvement.
Vous devrez rendre un rapport, le 21 octobre 2015, qui sera noté.

P.S. Le plus rapide d'entre vous recevra un petit quelque chose...

Tests

Pour tester votre programme, utilisez les positions initiales données par les 12 robots ci-dessous. Comptez pour chaque robot le nombre total de mouvements (avancer ou tourner d'un quart de tour) pour colorer tout le damier.

Structure du rapport (suggestion)

  1. Enoncé (voir ci-dessus).

  2. Analyse du problème
    1. Stratégie(s) générale(s) expliquées en français. Des schémas sont aussi bienvenus.
    2. Décomposition du problème. Descriptions des sous-programmes.
    3. Pire des cas.
    4. Meilleur des cas.

  3. Sous-programmes et programme principal (programme à envoyer par email).
    Je dois pouvoir comprendre le programme aisément, donc il faut choisir de bons noms pour les sous-programmes. Je conseille de faire suffisamment de sous-programmes pour ne pas avoir de problèmes de place sur la feuille de RobotProg.

  4. Analyse des résultats (faire partir le robot d'un coin, d'un bord, de la case centrale, d'une case quelconque,...)

Didier Müller, 1.9.15