Diviser pour mieux programmer
 
  Position et direction du robot
  Modification du Terrain
  Création d'un sous-programme
  Affichage du programme principal et des sous-programmes
  Appel d'un sous-programme
  Le robot va au centre du terrain
   
  Retour au sommaire du tutoriel
   
Pourquoi des sous-programmes ?
 

En général, un programme est écrit pour résoudre un problème qui peut être très complexe. On commence donc habituellement par analyser le problème posé et on le divise en problèmes plus simples et donc plus faciles à résoudre. Les sous-programmes permettent ainsi de décomposer un programme en plusieurs parties. Par ailleurs, un même sous-programme peut être utilisé à plusieurs reprises, ceci évitant de réécrire plusieurs fois le même code.
Dans ce chapitre, vous écrirez un programme pemettant de faire aller le robot à la case centrale du terrain et ceci quelque soit son point de départ. Ce programme sera écrit à l'aide de plusieurs sous-programmes.

Position et direction du robot
 
Une case du terrain est repérée par ses coordonnées x, y ; x et y sont des nombres entiers positifs.
La case arrière gauche a pour coordonnées 1, 1, la case arrière droite 9,1 pour le terrain représenté ci-dessus.
 
* Position du robot :
La position du robot est donnée par les deux mots-clef xRobot et yRobot utilisables dans un programme. Pendant l'exécution, xRobot et yRobot ont les valeurs x, y de la case occupée par le robot.
 

* Direction du robot :
La direction suivant laquelle est orienté le robot est donnée par deux mots-clef dxRobot et dyRobot utilisables dans un programme. Les valeurs de dxRobot et dyRobot correpondent à la variation de xRobot et yRobot quand le robot avance d'une case devant lui :
- si le robot est tourné vers la droite du terrain : dxRobot vaut 1 et dyRobot vaut 0
- si le robot est tourné vers la gauche du terrain : dxRobot vaut - 1 et dyRobot vaut 0
- si le robot est tourné vers l'avant du terrain : dxRobot vaut 0 et dyRobot vaut 1
- si le robot est tourné vers l'arrière du terrain : dxRobot vaut 0 et dyRobot vaut - 1
Remarque : dxRobot et dyRobot n'ont comme valeurs possibles que 0, 1 ou -1. L'une des deux valeurs est nulle et l'autre non nulle.
Pour l'exemple représenté ci-dessus, dxRobot vaut 1 et dyRobot vaut 0

Modifier le terrain
  Le terrain peut être modifié sauf pendant l'exécution d'un programme.
Vous pouvez en particulier ajouter ou retirer des murs à l'intérieur du terrain, les murs encadrant le terrain sont fixes et ne peuvant pas être supprimés. Certains objectifs apparemment simples peuvent être beaucoup plus difficles à atteindre dans le cas où le terrain comporte beaucoup d'obstacles.
 

Vous allez ici construire le terrain qui sera utilisé dans ce chapitre. C'est le terrain représenté ci-dessus.
- Choisissez le menu Terrain > Modifier. La fenêtre d'édition de terrain apparaît.
- Choisssez le menu Terrain > Nouveau pour créer un autre terrain. La fenêtre des paramètres du terrain apparaît.
- Choisissez une largeur et une hauteur de 9 cases et validez en cliquant le bouton OK.
- Cliquez sur le bouton Robots puis cliquez sur le bouton + en dessous : un robot apparaît sur le terrain.
- Cliquez sur la case 3,3 pour placer le robot a sa position initiale pour le début de l'exécution.
- Cliquez sur l'outil Carreaux, puis cliquez sur la case 5,5 qui apparaît alors plus claire. Cette case est le centre du terrain.

Avec la fenêtre de modification du terrain, vous pouvez aussi ajouter ou supprimer des murs et des prises d'énergie, enregistrer et ouvrir des fichiers terrain. Le terrain qui vient d'être défini est sauvé dans le répertoire Fichiers du tutoriel, sous le nom Terrain9x9SansObstacles.bog
 

- Fermer la fenêtre en cliquant sur le bouton Utiliser ce terrain. Si vous affichez le terrain avec le menu Fenêtre > Fenêtre exécution, vous constaterez que le terrain a été effectivement modifié.

Créer un sous-programme
 

* Ici, vous allez créer un sous-programme qui tournera le robot vers la gauche du terrain.
* Les sous-programmes sont disponibles à partir du niveau 2. Le niveau est affiché dans la palette d'outil. Si vous êtes au niveau 1, passez au niveau 2 en utilisant le menu Configuration > Niveau.
Avant de créer un sous-programme, vous devez avoir un nouveau programme vide. Si ce n'est pas le cas, fermez la fenêtre Programme et choisissez le menu Fichier > Nouveau programme.
* Pour créer un sous-programme, choisissez le menu Programmation > Nouveau sous-programme.
Le sous-programme est maintenant affiché dans la fenêtre programme à la place du programme principal.

 

* Nom du sous-programme : chaque sous-programme est identifié par un nom que vous lui attribuez. Par défaut quand le sous-programme est crée il reçoit le nom SousProgramme1. Remplacer ce nom par SeTournerVersLaGauche

Un nom de sous-programme est formé de lettres et de chiffres sans espaces et doit commencer par une lettre et contenir au maximum 32 caractères. Il doit être différent des mots-clef du langage du robot. Les lettres majuscules et minuscules sont considérées comme étant identiques.

 
* Construisez l'organigramme du sous-programme SeTournerVersLaGauche :
L'organigramme d'un sous-programme se construit suivant les mêmes règles que celui du programme principal. Il doit en particuleir contenir un bloc début et au moins un bloc fin.
Ici, l'organigramme utilise le mot-clef dxRobot. Le robot est tourné vers la gauche si dxRobot a la valeur -1
Si dxRobot ne vaut pas -1, on fait tourner le robot d'un quart de tour et on recommence le test.
 
Vous pouvez vérifier si l'organigramme du sous-programme est correct en cliquant sur le bouton Verifier l'organigramme dans l'en-tête du sous-programme.
Affichage du programme principal et des sous-programmes
  * Liste du programme principal et des sous-programmes : cliquez sur le bouton Liste en bas de la fenêtre programme pour afficher (ou masquer) la liste des sous-programme. La liste apparaît à gauche de la fenêtre. Le premier élement de cette liste est le programme principal. Son nom est le nom de la fenêtre (c'est aussi le nom du fichier associé si le programme a été enregistré). Les éléments suivants sont les noms des sous-programmes crées. Pour afficher l'un de ces éléments il suffit de cliquer sur son nom dans la liste.
* Quand un sous programme est affiché, vous pouvez aussi revenir au programme principal en cliquant sur le bouton PP en bas de la fenêtre.
* Vous pouvez aussi afficher simultanément le programme principal et un sous-programme en faisant glisser le séparateur horizontal qui est placé en haut ou en bas de la fenêtre.
Appeler un sous-programme

*Pour qu'un sous-programme soit exécuté, il faut l'appeler à partir du programme principal ou bien d'un sous-programme.
Ceci se réalise avec une instruction d'appel qui figure dans un bloc d'appel de sous-programme.
Pour tester l'exécution du sous-programme SeTournerVersLaGauche, vous aller écrire le programme principal contenant l'appel du sous-programme :
- affichez le programme principal
- construisez l'organigramme suivant :

 
 

* Déroulement de l'exécution : l'exécution d'un appel de sous-programme provoque le passage à l'exécution du bloc début du sous-programme, puis le sous-programme est exécuté jusqu'à son bloc fin, et ensuite l'exécution se poursuit dans le programme appelant au bloc suivant le bloc d'appel de sous-programme.
- initialiser le programme (menu Execution > Initialisation ou clic sur le bouton INIT de la fenêtre exécution)
- lancer l'exécution : le robot doit être tourné vers la gauche à la fin.
- après l'exécution, changez la direction initiale du robot en cliquant sur le robot et relancer l'exécution : le robot se tourne vers la gauche dans tous les cas.

Ajouter et faire exécuter un nouveau sous-programme de nom SeTournerVersLaDroite.
Le robot va au centre du terrain
 

* Le centre du terrain se touve à l'intersection de la colonne centrale et de la ligne centrale (voir plan du terrain).
Pour faire aller le robot au centre du terrain, il faut donc d'abord le faire aller dans une case de la colonne centrale, puis dans la ligne centrale. Pour cela, vous allez écrire deux sous-programmes.
* Sous-programme AllerAColonneCentrale :
- créez un nouveau sous-programme de nom AllerAColonneCentrale.
- construisez l'organigramme suivant :

 
  La colonne centrale correspond aux cases d'abscisse x égale à 5.
Si le robot se trouve à une position xRobot plus petite que 5, on oriente le robot vers la droite du terrain, sinon on l'oriente vers la gauche et ensuite on le fait avancer jusqu'à ce qu'il atteigne la colonne centrale.
  - tester ce sous programme en l'appelant à partir du programme principal
  * Sous-programme AllerALigneCentrale :
 

Le principe est le même que le sous-programme précédent, mais ici on testera la position y du robot, et on le déplacera vers l'avant ou l'arrière.
- écrire les sous-programmes SeTournerVersLAvant et SeTournerVersLArriere.
- écrire le sous-porgramme AllerALigneCentrale.
- écrire le programme principal :

 
  NB : le programme complet se trouve dans le dossier Fichiers du tutoriel.
  - exécutez le programme complet plusieurs fois en changeant la position et la direction initiale du robot : dans tous les cas, le robot doit aller au centre du terrain.
 

 

Retour au sommaire du tutoriel