Übersicht

  => Das Problem . . .
  => Die Lösung!
  => Die if-Anweisung
  => Logik!
  => Beispiele
  => Aufgaben


Das Problem . . .

entnehmen wir einer Aufgabenstellung vom letzten Mal: Nimm das Feld feld1.ter aus "Kapitel 9" => "Beispielprogramm 2" und setze an eine beliebige Stelle ein Korn. Der Hamster soll das Korn finden und sofort wieder zur Ausgangsposition zurückkehren.


<<<

Die Lösung!

Es ist sinnvoll, das Problem aufzuteilen (Warum?): erst mal ein Korn finden, und dann noch das Problem: Wie kommt unser Hamster wieder zurück? Überlege, welchen Vorteil hat diese Aufteilung?

___________________________________________________________________

___________________________________________________________________

Die Lösung für das zweite Problem ist überraschend einfach: Übungsaufgabe 2 (Sorry . . .)

Für das erste Problem: "Wie findet der Hamster das Korn?" gibt es mehrere Möglichkeiten. Allen gemeinsam ist, dass der Hamster irgendwie alle Felder seiner Hamster-Welt besuchen muss. Halt: er muss auch auf jedem Feld prüfen, ob da ein Korn liegt oder nicht. Unser Hamster-Programm sieht also so aus:

Solange noch kein Korn gefunden:
        gehe auf das nächste Feld

Dabei muss der Hamster natürlich testen, ob sich vor ihm nicht eine Mauer befindet. Ist vor dem Hamster eine Mauer, dann muss er wenden, und in der nächsten Zeile bzw. Spalte nach dem Korn suchen:

Solange noch kein Korn gefunden:
        falls keine Mauer:
              gehe auf das nächste Feld
        sonst:
              wenden und zur nächsten Zeile/Spalte

Das Problem ist nun das Wenden: woher weiss der Hamster, ob er sich links um wenden soll und dann hoch oder rechts um? Eben, er weiss es gar nicht! In unserem Hamster-Programm passiert deshalb folgendes: der Hamster geht nur solange ein Feld weiter, solange er noch kein Korn gefunden hat. Aber: die Befehle zum Wenden (kehrLinksUmUndHoch() bzw. kehrRechtsUmUndHoch()) werden weiter ausgeführt, stur bis zum Ende! Dass heisst, obwohl der Hamster schon längst das Korn gefunden hat, dreht er sich noch LinksUm und RechtsUm, geht aber keinen Schritt vor. Welchen Vorteil könnte diese Idee haben?

___________________________________________________________________

___________________________________________________________________

Hier das Hauptprogramm, zu finden im Verzeichnis "wsiegel" u. s. w. unter dem Namen finden.ham (also nicht abtippen!).

void main()
{
  LaufeVorUndKeinKorn();
  kehrLinksUmUndHoch();
  LaufeVorUndKeinKorn();
  kehrRechtsUmUndHoch();
  LaufeVorUndKeinKorn();
  kehrLinksUmUndHoch();
  LaufeVorUndKeinKorn();
  kehrRechtsUmUndHoch();
  LaufeVorUndKeinKorn();
  // an dieser Stelle hat der Hamster das Korn gefunden!
}

Die beiden Methoden kehrLinksUmUndHoch() und kehrRechtsUmUndHoch() sind identisch aufgebaut, der einzige Unterschied: In kehrRechtsUmUndHoch() wird die Methode rechtsUm() statt der Methode linksUm() aufgerufen:

void kehrLinksUmUndHoch()
{
    linksUm();
    if (!kornDa())
    {
        vor();
    }
    linksUm();
}

Der neue Java-Befehl in dieser Methode ist:

     if (!kornDa())
     {
        vor();
     }

Zu Deutsch: Wenn (=if) auf dem Feld kein Korn ist, dann gehe vor. Das kein kommt durch das Ausrufezeichen !, die Methode kornDa() liefert ja einen Wahrheitswert zurück (true oder false), und das ! dreht den Wahrheitswert um, macht also aus falsch wahr und aus wahr falsch. Erkläre die Bedeutung der folgenden Zeilen:

     if (!vornFrei())
     {
           wenden();
     }



___________________________________________________________________

___________________________________________________________________

Bleibt noch die Methode LaufeVorUndKeinKorn()

void LaufeVorUndKeinKorn()
{
    while (vornFrei() && !kornDa() )
    {
       vor();
    }
}

Hier ist das doppelte && Zeichen neu, es steht für das Wort und. Das klassische Beispiel hierzu lautet:
Wenn die Sonne scheint und mein Fahrrad keinen Platten hat, dann machen wir einen Ausflug.
Wir haben es hier mit zwei Aussagen zu tun, die wahr oder falsch sein können:

  1. Die Sonne scheint
  2. Mein Fahrrad hat keinen Platten

Man erklärt dann das logische und durch eine Wahrheitstabelle (w: wahr, f: falsch):

Die Sonne scheint Mein Fahrrad hat keinen Platten Die Sonne scheint und mein Fahrrad hat keinen Platten
w w w
w f f
f w f
f f f

In Java gibt es auch eine Schreibweise für das logische oder: man schreibt //. Beispiel:

    while (vornFrei() // !kornDa() )
    {
          vor();
    }

Erkläre die Bedeutung dieser Zeilen! Wann endet die Schleife?

___________________________________________________________________

___________________________________________________________________

<<<

Beispiele

findest du im Lehrer-Ordner oben rechts unter:
wspiegel => info11hamster => Programme => beispiele
Diesmal: das Programm finden.ham.

<<<

Aufgaben

  1. Bearbeite die vielen Aufgaben im Text!

  2. Der Hamster hat also das Korn gefunden, erweitere das Programm finden.ham so, dass der Hamster wieder zur Ausgangsposition: Ecke unten links zurückfindet. Abspeichern unter dem Namen finden_zurueck.ham

  3. Mit der if-Anweisung können wir sichere Grundbefehle schreiben, Beispiel:
    void sicheresVor()
    {
         if (vornFrei())
         {
            vor();
         }
    }
    

    Schreibe weitere sichere Grundbefehle! Benutze die sicheren Grundbefehle für folgende Aufgabe: Der Hamster soll alle Körner im folgenden Feld aufnehmen (feld1.ter aus dem Verzeichnis "Kapitel 8" => "Beispielprogramm 1", bitte ins eigene Unterverzeichnis kopieren!)

    Beachte: In der Lösung zu dieser Aufgabe sollst du die while-Schleife und die if-Anweisung benutzen! (Abspeichern unter kap8_bsp01.ham)



  4. Erkläre, weshalb man die if-Anweisung auch Verzweigung nennt.

<<<
   W. Spiegel, E-Mail: walter.spiegel@web.de