Le diagramme
Pour résoudre des problèmes difficiles en programmation, il est souvent utile de représenter graphiquement la succession de tâches à l’aide d’un diagramme simple. On utilise pour cela les symboles suivants :
Départ / Arrêt | |
Action | |
Décision / Condition |
TÂCHE 2.01
Complétez le diagramme afin que Kara atteigne la feuille en respectant les consignes suivantes :
- La feuille est toujours droit devant elle – elle a seulement besoin de contourner les arbres.
- On ne trouve jamais deux arbres côte à côte.
TÂCHE 2.02
Dessinez un diagramme détaillé où Kara prend la feuille à la fin si elle la trouve. Dans le cartouche vous trouverez les méthodes disponibles de Kara :
Les instructions conditionnelles en Java
if (treeFront()) { // Condition (Vrai/Faux). turnLeft(); // Bloc 1, exécuté si la con-dition est true. } else { move(); // Bloc 2, exécuté si la con-dition est false. }
Note: Le mot clé else et son bloc (block 2) peuvent être omis si non nécessaires.
TÂCHE 2.03
- Décrivez avec des mots ce que réalise le code suivant.
- Puis décrivez chacune d’entre elles dans un diagramme.
if (onLeaf()) { removeLeaf(); } else { putLeaf(); } move();
TÂCHE 2.04
- Décrivez avec des mots ce que réalise le code suivant.
- Puis décrivez chacune d’entre elles dans un diagramme.
if (onLeaf()) { move(); }
TÂCHE 2.05
Les conditions peuvent être imbriquées.
- Décrivez avec des mots ce que réalise le code suivant.
- Puis décrivez chacune d’entre elles dans un diagramme.
if (treeLeft()) { if (onLeaf()) { removeLeaf(); move(); } else { move(); } } else { move(); }
Implémentation
TÂCHE 2.06 : Autour de l’arbre II
- Ouvrez le scénario Kara 206… à partir du dossier scenarios-chapter-2. Dans ce scénario, la méthode
goAroundTree()
est déjà programée et invoquée dans la méthodeact()
. - Maintenant programmez dans la méthode
act()
ce que vous avez dessiné à la tâche 2 comme diagramme. - Dans ce scénario, il y a plusieurs Mondes (a, b et c).
- Votre programme devrait marcher quelque soit le monde (a,b ou c) sans message d’erreur.
TÂCHE 2.07 : Conditions imbriquées
- Ouvrez le scénario Kara 207…; écrivez le programme tel qu’il apparaît dans la tâche 5.
- Modifiez le programme pour que Kara prenne une feuille seulement s’il n’y a pas d’arbre à côté.
Opérations logiques
Notre Kara peut déjà réaliser des actions un peu complexes. Nous allons la faire réagir différemment suivant le résultat d’un test. Il sera aussi possible pour Kara de réagir simultanément en fonction de plusieurs conditions dans un même test.
Le tableau suivant montre les trois opérateurs logiques principaux en Java :
Opérator | Description | Exemple | |
---|---|---|---|
`&&` | et | `treeFront() && onLeaf()` | VRAI (true) seulement si les deux conditions sont vraies, ç.à d. si Kara fait face à un arbre **et** est sur une feuille. |
`||` | ou | `treeFront() || onLeaf()` | VRAI (true) si l'un **ou** l'autre **ou** les deux ex-pressions sont vraies. |
`!` | non | `!treeFront()` | Fait passer une expression de true à false et vice versa. Cette expression sera VRAI (true) si Kara **ne** fait **pas** not face à un arbre. |
Un exemple en Java pourrait ressembler à cela :
if (treeLeft() && onLeaf()) { // Do something ... }
or combined:
if (treeLeft() && !treeRight()) { // Do something ... }
TÂCHE 2.08 : Peur du tunnel
Kara a un peu peur des tunnels. Elle devra vérifier à chaque pas si ce n’est pas une entrée de tunnel (c. à d. s’il y des arbres de chaque côté). Si c’est le cas, elle laisse immédiatement tomber une feuille à cause du stress.
Charger le scénario Kara 208…, écrivez le programme et testez le avec les 3 mondes.
TÂCHE 2.09 : Feuille sur l’arbre
Maintenant laissez Kara se déplacer en ligne et laisser une feuille devant chaque arbre (qu’il n’y en ait qu’un ou un de chaque côté).
Charger le scénario Kara 209…, écrivez le programme.
TÂCHE 2.10 : Réaliser une ligne de feuilles
Kara va tout droit et dépose une feuille à chaque fois qu’il n’y en a pas. Quand elle arrive à l’arbre elle s’arrête (même si on appuie sur le bouton Excécuter).
Charger le scénario Kara 210…, écrivez le programme.
TÂCHE 2.11 : Round Trip
Kara commence à avancer vers la droite, elle fait le tour sans heurter d’arbre et finit par manger la feuille.
Charger le scénario Kara 211…, écrivez le programme. Testez votre programme avec les 3 mondes.
Astuce : Imaginez ce qui doit être réalisé à chaque fois qu’on appuie sur le bouton Act. Pour vous aider dessinez un diagramme.
TÂCHE 2.12 (difficile) : Kara joue à Pacman
Kara joue à Pacman : Elle se tient sur la première d’une longue suite de feuilles qui se termine devant un arbre. Elle récupère toutes les feuilles et s’arrête devant les arbres.
Pour un meilleur style d’écriture du code, écrivez les méthodes séparément de la méthode act et invoquez ces méthodes dans la méthode act.
Boucles
Kara peut maintenant réagir aux situations en fonction de règles que nous avons définies. Elle n’est pas encore capable de repéter un ensemble déterminé d’instructions. Pour exécuter une instruction plusieurs fois on utilise les boucles.
Comme exemple, on souhaite :
Kara avance jusqu’à ce qu’elle rencontre un arbre.
Dans le diagramme on peut voir que move()
est utilisée plusieurs fois, en fait tant qu’un arbre ne barre pas la route à Kara.
Notation utilisée en Java :
while (!treeFront()) { move(); }
TÂCHE 2.13
Dans la situation suivante : Kara est devant un tunnel.
Descrivez ce que chacune des boucles suivantes fait, et combien de pas fait Kara.
# | Code | Explication | Nbre de pas |
---|---|---|---|
a. | while (treeLeft()) { move(); } |
Se déplace tant qu'il y a un arbre sur sa gauche. | 4 |
b. | while (treeRight()) { move(); } |
? | ? |
c. | while (treeLeft() || treeRight()) { move(); } |
? | ? |
d. | if (treeLeft()) { move(); } while (treeLeft() && treeRight()) { move(); } |
? | ? |
e. | while (!treeFront) { if (treeLeft()) { move(); } } |
? | ? |
TÂCHE 2.14 : Autour de l’arbre III
L’ exercise est similaire à celui de la tâche 9 : Kara doit trouver une feuille qui est devant elle. Mais ici, il peut y avoir un nombre quelconque d’arbres sur la ligne.
- Chargez le scénario Kara 214… et améliorez la méthode
goAroundTree()
afin que Kara puisse con-tourner plusieurs arbres. Testez votre programme dans tous les mondes disponibles. - Modifiez
act()
de manière à ce qu’il y ait besoin d’appuyer sur le bouton act une seule fois. Kara devra alors contourner les arbres et avancer jusqu’à parvenir à la feuille. Arrivée à la feuille elle la mange.
TÂCHE 2.15 : Grimper
Kara devra monter des escaliers…
Ecrivez une méthode oneStepUp()
afin que Kara monte une seule marche. Vous devrez vous représenter comment Kara saura qu’elle a encore une marche à gravir ou si elle a atteint le haut de l’escalier.
Note : La solution devra marcher en appuyant une seule fois sur le bouton act.
TÂCHE 2.16 (difficile) : Kara garde forestier
Kara doit garder la forêt. Elle doit marcher sans fin tout au tour de la forêt. Pour vous aider, vous pouvez dessiner un diagramme.
Note: Pour obtenir une boucle infinie, on peut appuyer sur le bouton Run.
Etape suivante ?
Sources: Les idées et concepts de Kara ont été developpés par Jürg Nievergelt, Werner Hartmann, Raimond Reichert et al. Quelques exercices Kara s’appuient sur le travail de Horst Gierhardt.
Traduction française: Christian Malen - thank you for your contributions!