Le « tour de main du premier et du dernier »

 Synthèse provisoire 

Le tour de main du plus petit et du plus grand (robot animateur de jeu) nous permet de tirer les enseignements suivants sur les « ardoises-variables » :

  1. chaque fois qu'il est mentionné « ardoisesSource », le programme va lire le contenu de cette variable et remplacer l'appel à cette lecture (le nom de la variable) par son contenu;
  2. chaque fois qu'il est mentionné « ardoisesCible », le programme va écrire la donnée qu'on lui attribue sur la variable en question, on dit aussi qu'il va l'affecter;
  3. en conséquence, le fait de lire une variable va fournir une copie de son contenu et le fait d'écrire sur une variable va stocker la donnée sur cette variable, rendant la donnée précédente inaccessible.
Abordons maintenant un cinquième tour de main, celui « du premier et du dernier »

 Objectifs 

  1. Continuer à manipuler des fonctions dont certaines ont comme arguments des variables;
  2. Voir comment il y a moyen de retenir, parmi une suite d'événements, en quelles positions (première et dernière) se présente un événement particulier.

 Ta tâche, ton défi 

Le robot scruteur de trains

Réalise ton code pour que le scruteur signale les positions de la première et dernière locomotive seule.

Dans cette contrée du Far-West, il passe 6 trains par jour. Les trains sont constitués d'une locomotive et de wagons mais, parfois, la locomotive est seule, sans wagon. En fin de journée le robot scruteur de trains doit signaler les positions, parmi les 6 trains du jour, de la première et de la dernière locomotive seule qui est passée. Toutefois, certains jours, il se peut qu'il n'y ait pas de locomotive seule, ou qu'il y en ait une, ou deux ou plus encore.

Pour réaliser sa tâche, le robot dispose de 5 fonctions d'actions :

  1. ecris0Sur ('ardoiseCible') le robot écrira 0 sur l'ardoise « cible » dont tu passeras le nom en argument. Le nom de cette ardoise doit être entre apostrophes ou guillements car il s'agit de citer son nom afin que le robot reconnaisse l'ardoise sur laquelle il doit écrire;
  2. ajoute1A ('ardoiseCible') ajoute 1 au contenu de l'ardoise « cible » dont tu passeras le nom de la même façon que le précédent et pour les mêmes raisons;
  3. observeLeTrain (ardoiseSource) le robot va observer le train numéro ... afin de voir s'il est constitué de wagons ou pas. Ici, le nom de l'ardoise « source » ne doit pas être entre guillemets ni apostrophes car c'est le « contenu » de l'ardoise qui doit être envoyé. Il y a donc lecture du contenu de l'ardoise qui est ensuite envoyé en argument;
  4. copie (ardoiseSource, 'ardoiseCible') le robot peut copier, transférer le contenu d'une ardoise sur une autre. Le contenu proviendra de l'ardoise « source » (sans guillemets ni apostrophes puisqu'il s'agit d'envoyer son contenu) et ira s'incrire sur l'ardoise « cible » (avec guillemets ou apostrophes puisqu'il s'agit d'indiquer le nom de l'ardoise de destination);
  5. affiche ('?', ardoiseSource) où '?' = '0', '1', 'premiere' ou 'derniere' et la valeur provient de l'ardoise « source » (sans guillemets ni apostrophes).
Pour la dernière fonction, les affichages doivent se faire de la façon suivante :
  1. S'il n'y a aucune locomotive seule, '?' doit être égal à '0' et la valeur de l'ardoise source n'a aucune importance, mais il faut qu'il y en ait une (ardoise initialisée);
  2. S'il n'y a qu'une seule locomotive sans wagon, '?' doit être égal à '1' et la valeur de l'ardoise source doit être la position exacte de cette locomotive seule dans la suite des 6 trains;
  3. S'il y a plusieurs locomotives seules :
    • - Un premier affichage avec '?' égal à 'premiere' doit signaler la position de la première locomotive seule et l'ardoise source doit contenir sa position exacte dans la suite des 6 trains;
    • - Un second affichage avec '?' égal à 'derniere' doit signaler la position de la dernière locomotive seule et l'ardoise source doit contenir sa position exacte dans la suite des 6 trains.

Et il dispose aussi de 4 fonctions de tests :

  1. locomotiveSeule () qui permet de savoir si la dernière locomotive observée est seule ou pas;
  2. compteurEgalA6 () permet de savoir si l'ardoise « compteur » est égale à 6 ou pas;
  3. premierEgalA0 () permet de savoir si l'ardoise « premier » est égale à 0 ou pas;
  4. premierEgalDernier () permet de savoir si l'ardoise « premier » est égale à l'ardoise « dernier ».

 À toi de jouer... 

Réfléchis bien à la façon de réaliser les transferts entre variables en fonction des trains ou locomotives qui se présentent et des différentes possibilités : pas de locomotive seule, 1 seule, deux, trois,... Ton code doit donner les bons résultats dans tous les cas.

Bon travail.

Retour