Logische Ausdrücke
Testbefehle wie vornFrei() und kornDa() können zu logischen Ausdrücken „zusammengesteckt“ werden, z.B. prüft der folgende logische Ausdruck, ob der Hamster nach vorne gehen kann und sich auf einem Korn befindet.
vornFrei() && kornDa()
Mehr Erklärungen zu logischen Ausdrücken findest du hier.
Negation („nicht“)
Mit ! wird das Ergebnis einer Bedingung negiert / verneint, z.B. !vornFrei(). Aus true wird false und umgekehrt.
Der Hamster will einen Körnerhaufen transportieren. Dazu nimmt er zunächst alle Körner auf seiner aktuellen Kachel auf. Anschließend läuft er bis zum Ende des Ganges. Abschließend legt er so lange Körner ab, wie er noch Körner im Maul hat.
Im Folgenden ist ein Beispiel-Szenario gegeben.


Schreibe ein Programm, welches den Hamster den Transport durchführen lässt.
Tipp: Verwende für das Ablegen den Testbefehl maulLeer() und negiere ihn.
void main()
{
// Alles aufnehmen
while (kornDa())
{
nimm();
}
// Rueberlaufen
while (vornFrei())
{
vor();
}
// Alles geben
while (!maulLeer())
{
gib();
}
}
Konjunktion („und“)
Mit && wird das Ergebnis von zwei Bedingungen geprüft, z.B. vornFrei() && kornDa(). Es wird nur dann zu true ausgewertet, wenn beide Teilbedingungen erfüllt sind, also zu true auswerten. Andernfalls wird zu false ausgewertet.
Der Hamster will eine geradlinige Körnerspur verfolgen. Wann immer er sich auf einer Kachel mit Korn befindet, geht er einen weiteren Schritt nach vorne. Doch Vorsicht: Die zweite Bedingung ist, dass er überhaupt nach vorne gehen kann!
Im folgenden Beispiel-Szenario bricht die Spur irgendwann ab.


Im folgenden Beispiel-Szenario endet die Spur mit einer Mauer.


Schreibe ein Programm, welches den Hamster die Körnerspur wie oben beschrieben entlanglaufen lässt.
Verwende eine Schleife, welche den Hamster so lange vorgehen lässt, wie die folgenden beiden Bedingungen erfüllt sind:
- Der Hamster kann nach vorne gehen.
- Der Hamster befindet sich auf einer Körner-Kachel.
void main()
{
while (kornDa() && vornFrei())
{
vor();
}
}
Der Hamster möchte das Feld bestellen. Dazu nimmt er zunächst die Saat auf (alle auf seiner Kachel befindlichen Körner). Diese verteilt er dann auf dem Feld (der Reihe vor ihm). Er sät so lange, wie er noch Platz und Saatgut hat.
Im folgenden Beispiel-Szenario geht dem Hamster der Platz aus.


Im folgenden Beispiel-Szenario geht dem Hamster das Saatgut aus.


Dein Programm sollte aus zwei Teilen bestehen:
Saatgut aufnehmen
-
Saatgut ausbringen
Überlege dir, welche Bedingungen geprüft werden muss, um zu entscheiden, ob ein weiteres Korn ausgebracht werden soll. Es muss sich um eine Konjunktion handeln („und“); über zwei Teilbedingungen:
- Die nächste Kachel muss frei sein
- Es muss noch ein Korn zum Aussäen geben
Um zu prüfen, ob der Hamster noch ein Korn zum Aussäen hat, kannst du die Negation von maulLeer() verwenden.
void main()
{
while (kornDa())
{
nimm();
}
while (vornFrei() && !maulLeer())
{
vor();
gib();
}
}
Disjunktion („oder“)
Mit || wird das Ergebnis von zwei Bedingungen geprüft, z.B. vornFrei() || kornDa(). Es wird nur dann zu true ausgewertet, wenn mindestens eine der beiden Teilbedingungen erfüllt ist, also zu true auswertet. Andernfalls wird zu false ausgewertet.