Wahrheitswerte speichern

Wir haben bereits mit Wahrheitswerten zu tun gehabt: Die Testbefehle, z.B. vornFrei(), haben entweder den Wert true oder false angenommen. Der Datentyp, der nur aus zwei verschiedenen Werten besteht, heißt boolean, benannt nach George Boole (Das Gebiet der Logik ist uralt. Er hat die Logik aber als einer der ersten sehr präzise gefasst und mit einem „Fundament“ versehen).

Da es sich bei boolean um einen ganz normalen Datentyp (wie auch int) handelt, können Wahrheitswerte in Variablen gespeichert werden.

In folgendem einfachen Beispiel merkt sich der Hamster zunächst, ob sich auf seinem Ursprungsfeld ein Korn befindet oder nicht. Anschließend läuft er drei Schritte und teilt dem Benutzer/in diese Information mit.

void main()
{
    // Information in einer boolean-Variablen fuer
    // spaeter speichern
    boolean kornAufErstemFeld = kornDa();
    
    // Etwas laufen...
    vor();
    vor();
    vor();
    
    // Information vom Beginn wieder hervorkramen
    if (kornAufErstemFeld)
    {
        schreib("Das erste Feld hatte ein Korn!");
    }
    else 
    {
        schreib("Das erste Feld war leer!");
    } 
}

Einer boolean-Variablen kann man auch neue Werte zuweisen. Betrachte hierzu die folgende Aufgabenstellung.

Gerade oder ungerade?

Der Hamster soll herausfinden, ob er sich auf einem Feld mit gerader oder ungerader Anzahl an Körnern befindet.

Das folgende Programm legt eine boolean-Variable an mit dem Startwert true (Zeile 1). Für jedes gefundene Korn auf der aktuellen Kachel des Hamsters wird der Wert einmal „umgedreht“, also aus true wird false und aus false wird true (Zeile 9). Erinnere dich, dass es sich hierbei um die Negation handelt, welche eben auch in einer Variablen-Zuweisung vorkommen darf.

void main()
{
    vor();
    
    // Variable definieren und mit Startwert versehen
    boolean gerade = true;
    
    // Fuer jedes Korn die Variable "flippen"
    while (kornDa())
    {
        gerade = !gerade;   // Aus `false` wird `true`  und
                            // aus `true`  wird `false`
        nimm();
    }
    
    // Abschliessend dem Benutzer/in berichten
    if (gerade)
    {
        schreib("Eine gerade Anzahl an Koernern!");
    }
    else
    {
        schreib("Eine ungerade Anzahl an Koernern!");
    }
}

Gerade:

Ungerade: