Lektion 8 - Der Hamster lernt zählen
Ihr kennt nun schon lange die Möglichkeit, neue Testbefehle für den Hamster zu programmieren. Diese nennt man Boolsche Funktionen. In der letzten Lektion habt ihr (abgesehen von boolean) noch weitere Datentypen kennen gelernt, unter anderem den int-Datentyp, der ganze Zahlen speichern kann. In dieser Lektion lernt ihr, dem Hamster Testbefehle beizubringen, die nicht nur Wahrheitswerte zurückgeben können, sondern beliebige Datentypen. Somit lernt der Hamster quasi als Nebeneffekt das Zählen.
Aufgabe 1: Funktionen
Die oben schon angesprochenen boolschen Funktionen sind ein Spezialfall eines allgemeineren Konzepts, nämlich dem der Funktion. Lest euch die Fachkonzepte Funktion, Return, Void & Parameter durch und beantwortet die folgenden Fragen:
- Was ist eine Funktion?
- Dürfen Funktionen Seiteneffekte erzeugen? Wenn ja, wie macht man das am besten kenntlich?
- Was bedeutet das Schlüsselwort
void
? - Was ist ein Funktionsparameter?
Aufgabe 2: Zählen mit While-Schleifen
Aufgaben
Aufgabe 2.1: Der Hamster soll im folgenden Territorium genau so viele Schritte vor gehen, wie Körner auf dem Feld vor ihm liegen. Die Anzahl der Körner ist variabel.
Aufgabe 2.2: Der Hamster soll durch das Labyrinth laufen. An einer Kreuzung kann er die folgenden Situationen finden:
- 1 Korn: Rechts abbiegen und weiter!
- 2 Körner: Links abbiegen und weiter!
- 3 Körner: Stehen bleiben!
Aufgabe 2.3: Der Hamster soll durch das Labyrinth laufen. Benutze nur Methoden mit Parametern!
Lösung 2.1
void main() { vor(); int koerner = nimmUndZaehle(); while (koerner > 0 && vornFrei()) { vor(); koerner = koerner - 1; } } int nimmUndZaehle() { int koerner = 0; while (kornDa()) { nimm(); koerner = koerner + 1; } return koerner; }
Lösung 2.2
void main() { int anzahl = dreiVorUndNimm(); while (anzahl != 3) { if (anzahl == 2) { linksUm(); } else if (anzahl == 1) { rechtsUm(); } anzahl = dreiVorUndNimm(); } } void rechtsUm() { linksUm(); linksUm(); linksUm(); } int dreiVorUndNimm() { vor(); vor(); vor(); int anzahl = 0; while (kornDa()) { nimm(); anzahl = anzahl + 1; } return anzahl; }
Lösung 2.3
void main() { vor(11); linksUm(3); vor(7); linksUm(3); vor(2); linksUm(3); vor(3); linksUm(1); vor(2); linksUm(1); vor(3); linksUm(3); vor(7); linksUm(3); vor(3); nimm(); } void vor(int anzahl) { while (anzahl > 0) { vor(); anzahl = anzahl - 1; } } void linksUm(int anzahl) { while (anzahl > 0) { linksUm(); anzahl = anzahl - 1; } }
Aufgabe 3: Übungsaufgaben
Diese Konzepte findet ihr auch im Hamster-eBook in Kapitel 15 auf S. 276 und Kapitel 16 auf S. 297
- Bearbeitet das Beispielprogramm 3 ab S. 288
- Bearbeitet das Beispielprogramm 3 auf S. 315
- Bearbeitet mindestens eine der Übungsaufgaben ab S. 318
- Bearbeitet mindestens eine der Übungsaufgaben ab S. 291
Speichert die Programme und die Territorien sowie eure Notizen auf eurem Stick nach dem Schema Lektion8_Beispiel2 bzw. Lektion8_Uebung5 ab!