SOLUTION TASK 2.01

SOLUTION TASK 2.02

SOLUTION TASK 2.03
-
Describe with words what the following code does.
Removes a leaf if there is one, puts a leaf if there is no leaf. -
Sketch it as a flowchart.

SOLUTION TASK 2.04
- Describe with words what the following code does.
If Kara is on a leaf he makes one step forward. - Sketch it as a flowchart.

SOLUTION TASK 2.05
- Describe what happens when you run the program.
Removes the leaf if there is a tree on the left, otherwise, just makes a move. - Draw a corresponding flowchart.

SOLUTION TASK 2.06: Around Tree 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 TASK 2.07: Nested Conditions
public void act() {
if (treeLeft()) {
move();
} else {
if (onLeaf()) {
removeLeaf();
move();
} else {
move();
}
}
}
SOLUTION TASK 2.08: Afraid of Tunnel
public void act() {
if (treeLeft() && treeRight()) {
putLeaf();
stop();
} else {
move();
}
}
SOLUTION TASK 2.09: Leaf at Tree
public void act() {
if (treeLeft() || treeRight()) {
putLeaf();
move();
} else {
move();
}
if (onLeaf()) {
stop();
}
}
SOLUTION TASK 2.10: Put Leaf Track
public void act() {
if (!onLeaf()) {
putLeaf();
}
if (!treeFront()) {
move();
} else {
stop();
}
}
SOLUTION TASK 2.11: Round Trip
public void act() {
if (onLeaf()) {
removeLeaf();
} else {
if (!treeFront()) {
move();
} else {
if (!treeLeft()) {
turnLeft();
move();
} else {
turnRight();
move();
}
}
}
}
SOLUTION TASK 2.12: Kara Plays 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 TASK 2.13
| # | Code | Description | Steps |
|---|---|---|---|
| a. | while (treeLeft()) {
move();
} |
Move as long as ther is a tree on the left. | 4 | Move as long as ther is a tree on the right. | 0 | Move as long there is a tree either on the right or on the left side. | 5 | First, move if there is a tree on the left side. Then move as long as there is a tree on the right and on the left side. | 4 | As long as thre is no tree in front of Kara: If there is a tree on the left, make a step.
Warning: never-ending loop |
4 |
SOLUTION TASK 2.14: Around Tree 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 TASK 2.15: Climbing Up
public void act() {
while (treeFront()) {
oneStepUp();
}
stop();
}
public void oneStepUp() {
turnLeft();
move();
turnRight();
move();
}
SOLUTION TASK 2.16: Kara as Guard
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();
}
}
}
}