Chapitre 2: Ordinogramme

Solutions

SOLUTION TÂCHE 2.01

TASK 2.01 - Solution


SOLUTION TÂCHE 2.02

TASK 2.02 - Solution


SOLUTION TÂCHE 2.03

  1. Décrivez avec des mots ce que réalise le code suivant.
    Supprime une feuille s’il y en a une, dépose une feuille là où il n’y en n’a pas.

  2. Puis décrivez chacune d’entre elles dans un diagramme.

TASK 2.03 - Solution


SOLUTION TÂCHE 2.04

  1. Décrivez avec des mots ce que réalise le code suivant.
    Si Kara est sur une feuille elle avance d’un pas.

  2. Puis décrivez chacune d’entre elles dans un diagramme.

TASK 2.04 - Solution


SOLUTION TÂCHE 2.05

  1. Décrivez avec des mots ce que réalise le code suivant.
    Supprime la feuille s’il y a un arbre sur la gauche.

  2. Puis décrivez chacune d’entre elles dans un diagramme.

TASK 2.05 - Solution


SOLUTION TÂCHE 2.06 : Autour de l’arbre II

public void act() {
    if (treeFront()) {
        goAroundTree();
    } else {
        move();
    }

    if (onLeaf()) {
        removeLeaf();
        stop();
    }
}

public void goAroundTree() {
    turnLeft();
    move();
    turnRight();
    move();
    move();
    turnRight();
    move();
    turnLeft();
}

SOLUTION TÂCHE 2.07 : Conditions imbriquées

public void act() {
    if (treeLeft()) {
        move();
    } else {
        if (onLeaf()) {
            removeLeaf();
            move();
        } else {
            move();
        }
    }
}

SOLUTION TÂCHE 2.08 : Peur du tunnel

public void act() {
    if (treeLeft() && treeRight()) {
        putLeaf();
        stop();
    } else {
        move();
    }
}

SOLUTION TÂCHE 2.09 : Feuille sur l’arbre

public void act() {
    if (treeLeft() || treeRight()) {
        putLeaf();
        move();
    } else {
        move();
    }

    if (onLeaf()) {
        stop();
    }
}

SOLUTION TÂCHE 2.10 : Réaliser une ligne de feuilles

public void act() {
    if (!onLeaf()) {
        putLeaf();
    }

    if (!treeFront()) {
        move();
    } else {
        stop();
    }
}

SOLUTION TÂCHE 2.11 : Round Trip

public void act() {
    if (onLeaf()) {
        removeLeaf();
    } else {
        if (!treeFront()) {
            move();
        } else {
            if (!treeLeft()) {
                turnLeft();
                move();
            } else {
                turnRight();
                move();
            }
        }
    }
}

SOLUTION TÂCHE 2.12 : Kara joue à Pacman

public void act() {
    if (!treeFront()) {
        removeLeaf();
        findNextLeaf();
    } else {
        removeLeaf();
        stop();
    }
}

public void findNextLeaf() {
    // look for leaf in front
    move();
    if (!onLeaf()) {
        // no leaf in front, go back and look left
        turnAndGoBack();
        turnRight();
        move();
        if (!onLeaf()) {
            // no leaf left; leaf must be on right side
            turnAndGoBack();
            move();
        }
    }
}

public void turnAndGoBack() {
    turnLeft();
    turnLeft();
    move();
}

SOLUTION TÂCHE 2.13

<tr>
  <td>b.</td>
  <td><pre>while (treeRight()) {

move(); }

<tr>
  <td>c.</td>
  <td><pre>while (treeLeft() || treeRight()) {

move(); }

<tr>
  <td>d.</td>
  <td><pre>if (treeLeft()) {

move(); } while (treeLeft() && treeRight()) { move(); }

<tr>
  <td>e.</td>
  <td><pre>while (!treeFront) {

if (treeLeft()) { move(); } }

# Code Explication Nbre de pas
a.
while (treeLeft()) {
  move();
}
Se déplace tant qu'il y a un arbre sur sa gauche. 4
Se déplace tant qu’il y a un arbre sur sa droite. 0
Se déplace tant qu’il y a un arbre sur sa gauche ou sur sa droite ou de chaque côté. 5
D’abord, se déplace s’il y a un arbre sur la gauche ; Puis se déplace tant qu’il y a un arbre à gauche et à droite.

4
Aussi longtemps qu’il n’y a pas d’arbre de-vant Kara : S’il y a un arbre à gauche, fait un pas.

  **Attention : boucle infinie !**
4

SOLUTION TÂCHE 2.14 : Autour de l’arbre III

public void act() {
    while (!onLeaf()) {
        if (treeFront()) {
            goAroundTree();
        } else {
            move();
        }
    }

    // Found leaf --> eat it
    removeLeaf();

    stop();
}

public void goAroundTree() {
    turnLeft();
    move();
    turnRight();
    move();

    while (treeRight()) {
        move();
    }

    turnRight();
    move();
    turnLeft();
}

SOLUTION TÂCHE 2.15 : Grimper

public void act() {
    while (treeFront()) {
        oneStepUp();
    }

    stop();
}

public void oneStepUp() {
    turnLeft();
    move();
    turnRight();
    move();
}

SOLUTION TÂCHE 2.16 : Kara garde forestier

public void act() {
    makeOneStep();
}

public void makeOneStep() {
    if (!treeRight()) {
        // no tree right --> go right
        turnRight();
        move();
    } else {
        // there is a tree right
        if (!treeFront()) {
            // no tree in front --> move
            move();
        } else {
            // trees right and front
            if (!treeLeft()) {
                // no tree left --> go left
                turnLeft();
                move();
            } else {
                // trees right, front and left: dead end
                turnLeft();
                turnLeft();
                move();
            }
        }
    }
}