66
Hamster-Programmierung Seite 1 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell • Auswahlanweisungen • Wiederholungsanweisungen Boolesche Methoden Strukturieren von Programmen Hamster mit Gedächtnis (Boolesche Variablen) Hamster mit Gedächtnis (Zahlen) • Integer-Methoden Verallgemeinerungen von Daten und Methoden Prozeduren und Methoden mit Parametern Prozeduren und Methoden, die sich selbst aufrufen (Rekursion)

Hamster-ProgrammierungSeite 85 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell

Embed Size (px)

Citation preview

Page 1: Hamster-ProgrammierungSeite 85 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell

Hamster-ProgrammierungSeite 1

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell

• Auswahlanweisungen • Wiederholungsanweisungen • Boolesche Methoden • Strukturieren von Programmen

• Hamster mit Gedächtnis (Boolesche Variablen)

• Hamster mit Gedächtnis (Zahlen)

• Integer-Methoden

• Verallgemeinerungen von Daten und Methoden

• Prozeduren und Methoden mit Parametern

• Prozeduren und Methoden, die sich selbst aufrufen (Rekursion)

Page 2: Hamster-ProgrammierungSeite 85 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell

Hamster-ProgrammierungSeite 2

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Software-Entwicklung

Schritte bei der Lösung größerer Programmieraufgaben1. Analyse der Aufgabenstellung

2. Konzept für die Lösung entwickeln („Spezifikation“)

3. Programmstruktur entwerfen

4. Codieren (Algorithmus in einer Programmiersprache formulieren)

5. Testen der Programme

6. Testen von Teilsystemen und der gesamten Software

7. Wartung (Fehlerbeseitigung, Anpassung, Erweiterung, . . .) Strategie bei der Umsetzung der Schritte

– nacheinander („Wasserfall-Modell“)

– mit Wiederholung von Schritten („Spiral-Modell“)

– in kleinen Teilaufgaben („Rapid-Prototyping“, „Extreme Programming“)

– V-Modell, . . .

Page 3: Hamster-ProgrammierungSeite 85 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell

Hamster-ProgrammierungSeite 3

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Software-Entwicklung / Analyse der Aufgabenstellung Antwort auf folgende Fragen finden:

1. Was ist das Ziel der Aufgabe?2. Wann ist das Programm zu beenden?3. Welche Randbedingungen sind zu beachten?4. Welche Einschränkungen sind zu berücksichtigen?

Beispiel „Hamster als Slalomfahrer“:1. Ziel der Aufgabe

– Slalom fahren bis zum Ziel2. Ende des Programms

– Es wurde das einzige Korn auf dem Feld gefunden.3. Randbedingungen

– Hindernisse stehen nur auf einer Reihe und sind nur eine Kachel breit. Abstand und Länge sind variabel

– Das Korn liegt auf der gleichen Zeile wie die Hindernisse.4. Einschränkungen

– Die Hindernisse müssen abwechselnd rechts und links umlaufen werden.

Page 4: Hamster-ProgrammierungSeite 85 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell

Hamster-ProgrammierungSeite 4

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Software-Entwicklung / Spezifikation

Ziel dieser Phase– Grundsätzliche Möglichkeiten zur Lösung der Aufgabe finden

● Vor- und Nachteile der Varianten abschätzen

– Grobkonzept für das Programm entwerfen

● Bedingungen für das Programmende festlegen

● Hauptaktivitäten

– Konzept für Hauptaktivitäten entwerfen

● Konzept für Teilaktivitäten entwerfen Konzept für Unteraktivitäten entwerfen . . .

Prinzip: – Zerlegen in Teilaufgaben

– Teilaufgaben analysieren und Aktivitäten festlegen Hilfsmittel: grafische Darstellung der Aktivitäten

– Struktogramme („Nassi-Shneiderman-Diagramme“)

– Action-Diagramme, UML, …

Page 5: Hamster-ProgrammierungSeite 85 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell

Hamster-ProgrammierungSeite 5

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Software-Entwicklung / Spezifikation / Struktogramme

Struktogramme („Nassi-Shneiderman-Diagramme“)(http://de.wikipedia.org/wiki/Struktogramm)

– repräsentieren Teilaktivitäten (Elemente von Programmen) grafisch

● Sequenz / Block

● Alternative

● Schleife

– sind unabhängig von Programmiersprachen

– sind für die Spezifikation von Programmen kleineren bis mittleren Umfangs geeignet

Page 6: Hamster-ProgrammierungSeite 85 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell

Hamster-ProgrammierungSeite 6

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Software-Entwicklung / Spezifikation / Struktogramme

Sequenz / Block– Jede Aktivität wird durch ein Rechteck repräsentiert.

– Die Aktivitäten werden von oben nach unten abgearbeitet.

Aktivität 1

Aktivität 2

Aktivität 3

Beispiel: rechtsUm()

kehrt

linksUm

Page 7: Hamster-ProgrammierungSeite 85 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell

Hamster-ProgrammierungSeite 7

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Software-Entwicklung / Spezifikation / Struktogramme

Alternativen– abhängig vom Ergebnis der Testbedingung werden

alternative Aktionen abgearbeitet

Anweisungsblock A

Beispiel: linksFrei()

false zurückgeben

Bedingung

wahr falsch

Wand vorhanden ?

wahr falsch

Anweisungsblock B

rechtsUm

true zurückgeben

rechtsUm

linksUm

Page 8: Hamster-ProgrammierungSeite 85 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell

Hamster-ProgrammierungSeite 8

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Software-Entwicklung / Spezifikation / Struktogramme

Schleifen– abhängig vom Ergebnis der Testbedingung werden

Aktionen wiederholt abgearbeitet

Beispiel: Hindernis suchen

solange „kein Korn vorhanden“ und „vornFrei“

vor

Solange Bedingung wahr ist

Anweisungsblock Solange Bedingung wahr ist

Anweisungsblock

Page 9: Hamster-ProgrammierungSeite 85 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell

Hamster-ProgrammierungSeite 9

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Software-Entwicklung / Spezifikation / Struktogramme

Beispiel: rechtskurveAusfuehren()

rechtsUm

vor

linksUm

vor

rechtsUm

linksUm

vor

solange „linksFrei“ false ist

Page 10: Hamster-ProgrammierungSeite 85 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell

Hamster-ProgrammierungSeite 10

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell

Auswahlanweisungen Wiederholungsanweisungen Boolesche Methoden Strukturieren von Programmen Hamster mit Gedächtnis (Boolesche Variablen)

Hamster mit Gedächtnis (Zahlen)

Integer-Methoden

Verallgemeinerungen von Daten und Methoden

Prozeduren und Methoden mit Parametern

Prozeduren und Methoden, die sich selbst aufrufen (Rekursion)

Page 11: Hamster-ProgrammierungSeite 85 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell

Hamster-ProgrammierungSeite 11

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster mit Gedächtnis / Variablen Der Hamster könnte sich merken:

– wie viele Körner er im Maul hat,– wie viele Stufen er gestiegen ist,– wie viele Reihen er bearbeitet hat,– ob rechts frei ist, – …

Das Gedächtnis des Hamsters besteht aus Gedächtniszellen, die als Variablen bezeichnet werden.

Variablen sind Behälter zum Speichern von Daten bzw. Werten.

Page 12: Hamster-ProgrammierungSeite 85 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell

Hamster-ProgrammierungSeite 12

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster mit Gedächtnis / Motivation

Die bisherige boolesche Methode linksFrei() ist etwas umständlich:

boolean linksFrei() {linksUm();if (vornFrei()) {

rechtsUm();return true;

}else {

rechtsUm();return false;

}}

Wie sieht die Lösung mit Gedächtnis aus?

Page 13: Hamster-ProgrammierungSeite 85 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell

Hamster-ProgrammierungSeite 13

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster mit Gedächtnis / Motivation

Elegantere Lösung mit Variablen (Gedächtniszellen)

boolean linksFrei() {

linksUm();

<bestimme vornFrei() und speichere das Ergebnis in Variable (Gedächtniszelle) x>;

rechtsUm();

return <den in Variable (Gedächtniszelle) xgespeicherten Wert>;

}

notwendige Teilaufgaben für die neue Lösung:1. Platz für die Variablen im Hauptspeicher reservieren

2. Verwaltung der Variablen über Namen

3. Initialisieren der Variablen

Page 14: Hamster-ProgrammierungSeite 85 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell

Hamster-ProgrammierungSeite 14

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster mit Gedächtnis / Arten von Variablen

Variablen können unterschiedliche Arten von Informationen (Daten) speichern:– Testergebnisse

– Zahlen

– Buchstaben, Texte, … Wie werden Daten in Rechnern gespeichert?

– Bit

● ist die kleinste Informationseinheit

● hat zwei Zustände (0 und 1)

– Byte

● ist die kleinste Zugriffseinheit im Hauptspeicher von Rechnern (RAM)

● besteht aus acht Bits Wie kann man unterschiedlicher Arten von Informationen im

Hauptspeicher (in den Bytes) ablegen?

Page 15: Hamster-ProgrammierungSeite 85 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell

Hamster-ProgrammierungSeite 15

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster mit Gedächtnis / Speichern von Variablen

Notwendiger Platz für die Variablen ist abhängig von:– der Art der Daten (Datentyp)

– der Codierung des Datentyps

0 1 0 0…

Bits im RAM könnten unterschiedlich interpretiert werden:

false false

boolean

12 12

Zahlen

Text Text

Buchstaben

Page 16: Hamster-ProgrammierungSeite 85 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell

Hamster-ProgrammierungSeite 16

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Definition von Variablen

Definition boolescher Variablen– Anlegen einer neuen Variablen mit einem Namen

boolean var_name = boolescher Ausdruck;

Semantik- Speicherplatz für boolesche Variable reservieren

- Zuordnen eines Namens zur Variablen (zum Speicherplatz)

- Wert der Variablen initialisieren

- keine direkte Auswirkung auf den Programmablauf

Anweisung– Grundanweisung

(Grundbefehl)

– Prozeduraufruf

– Blockanweisung

– Bedingte Anweisung

– Alternativanweisung

– while-Anweisung

– do-Anweisung

– return-Anweisung

– Variablendefinition

Page 17: Hamster-ProgrammierungSeite 85 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell

Hamster-ProgrammierungSeite 17

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Boolesche Variablen

Beispiele für Variablendefinitionboolean immer_wahr = true;boolean mauer_da = !vornFrei();boolean test = kornDa() && !maulLeer();

Benutzung– Variablen-Namen können als boolesche Ausdrücke benutzt werden

– Bei der Auswertung wird der Wert der Variablen verwendet.

Testmethode linksFrei() mit booleschen Variablenboolean linksFrei() {

linksUm();// bestimme vornFrei() und speichere Ergebnis

// in Variable ist_freiboolean ist_frei = vornFrei();rechtsUm();// liefere den in Variable ist_frei gespeicherten

Wertreturn ist_frei;

}

Page 18: Hamster-ProgrammierungSeite 85 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell

Hamster-ProgrammierungSeite 18

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Variablen / Zuweisung

Boolesche Zuweisung – ändert den Wert einer Variablen

variablen_name = boolescher Ausdruck;

Semantik des Zuweisungsoperators „=“ – Wert des booleschen Ausdrucks (rechts vom „=“) wird ermittelt

– der alte Wert der Variablen wird durch den neu ermittelten Wert ersetzt

– Anweisung wird von rechts nach links ausgeführt

Beispiele:void beispiele() {

boolean probe = false;boolean wandDa = !vornFrei();probe = maulLeer() || !kornDa();probe = wandDa && kornDa();probe = wandDa = true;

}

Page 19: Hamster-ProgrammierungSeite 85 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell

Hamster-ProgrammierungSeite 19

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Variablen / lokale Variablen lokale Variablen

– werden innerhalb einer Methode definiert Gültigkeitsbereich einer lokalen Variablen

– ist der Teil des Programms, in dem eine Variable benutzt werden kann

Gültigkeitsbereich– beginnt mit der auf die Variablendefinition folgenden Anweisung– endet mit dem Ende des Blockes, in dem die Variable definiert wurde– umschließt alle inneren Blöcke

Beispiel: void main() {

boolean insgesamt_gerade = true; // 0 Koernersammle();while (vornFrei()) {

boolean gesammelt = sammle(); insgesamt_gerade = (insgesamt_gerade && gesammelt);

} }

Page 20: Hamster-ProgrammierungSeite 85 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell

Hamster-ProgrammierungSeite 20

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Variablen / lokale Variablen

Wer findet die Fehler ?void main() {

boolean probe = false;{

boolean test = vornFrei();boolean probe = kornDa();weiter();

}test = !test;

}

void weiter() {boolean probe = !probe;boolean b1 = maulLeer(), b2 = !b1;

}

Fehlermeldungen:-probe already definded in main()-cannot find symbol-Variable probe might not have been initialised

Page 21: Hamster-ProgrammierungSeite 85 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell

Hamster-ProgrammierungSeite 21

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Variablen / Beispiel

Aufgabe 15:Dem Hamster soll eine boolesche Methode zur Verfügung gestellt werden, die testet ob entweder das Feld links oder das Feld rechts von ihm frei ist.

false false false

true false true

false true true

true true false

Wahrheitstafel für die Methode: L-Frei R-Frei entweder-oder

Fall 2 oder

Fall 3 sind interessant!

Page 22: Hamster-ProgrammierungSeite 85 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell

Hamster-ProgrammierungSeite 22

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Variablen / Beispiel

Aufgabe 15: Wahrheitstafel für die Methode: L-Frei R-Frei entweder-oderfalse false false

true false true

false true true

true true false

Loesung:

boolean entwederLinksOderRechtsFrei() {

linksUm();

boolean links_frei = vornFrei();

kehrt();

boolean rechts_frei = vornFrei();

linksUm(); // gleiche Blickrichtung

return (links_frei && !rechts_frei) // Fälle sind || (!links_frei && rechts_frei); // „ODER-verknüpft“

}

Page 23: Hamster-ProgrammierungSeite 85 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell

Hamster-ProgrammierungSeite 23

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Variablen / Beispiel

Aufgabe 16:

Der Hamster soll eine boolesche Methode bekommen, die überprüft, ob sich auf seinen vier Nachbarfeldern genau eine Mauer befindet

Page 24: Hamster-ProgrammierungSeite 85 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell

Hamster-ProgrammierungSeite 24

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Variablen / Beispiel

Aufgabe 16:

Der Hamster soll eine boolesche Methoden bekommen, die überprüft, ob sich auf seinen vier Nachbarfeldern genau eine Mauer befindet.

Wahrheitstafel: Wann liefert die Methode wahr?

Vorn Links Hinten Rechts Ergebnistrue false false false true

false true false false true

false false true false true

false false false true true

Page 25: Hamster-ProgrammierungSeite 85 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell

Hamster-ProgrammierungSeite 25

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Variablen / Beispiel

Aufgabe 16: Vorgehensweise1. vorhandene Mauern erkennen und merken

2. gemerkte Information verknüpfen und Ergebnis zurück geben

Schritt 1: vorhandene Mauern erkennen und merken

boolean genauEineMauerNebenan() {

boolean vorn_mauer = !vornFrei();

linksUm();

boolean links_mauer = !vornFrei();

linksUm();

boolean hinten_mauer = !vornFrei();

linksUm();

boolean rechts_mauer = !vornFrei();

linksUm(); // zur Vermeidung von Seiteneffekten

. . .

Page 26: Hamster-ProgrammierungSeite 85 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell

Hamster-ProgrammierungSeite 26

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Variablen / Beispiel

Schritt 2: gemerkte Information verknüpfen

Vorn Hinten Rechts Links Ergebnistrue false false false true

false true false false true

false false true false true

false false false true true

Lösung:boolean genauEineMauerNebenan() {

. . .

return (vorn_mauer && !hinten_mauer && !rechts_mauer && !links_mauer)

|| (!vorn_mauer && hinten_mauer && !rechts_mauer && !links_mauer)

|| (!vorn_mauer && !hinten_mauer && rechts_mauer && !links_mauer)

|| (!vorn_mauer && !hinten_mauer && !rechts_mauer && links_mauer);

}

Page 27: Hamster-ProgrammierungSeite 85 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell

Hamster-ProgrammierungSeite 27

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Variablen / Globale Variablen

globale Variablen– sind außerhalb von Methoden definiert

Gültigkeitsbereich– Gesamtes Hamsterprogramm

– umschließt alle Methoden Beispiel:

boolean gerade_anzahl = true;

void main() {gerade_anzahl = sammle();while (vornFrei()) {

// weitere Anweisungen}

}boolean sammle() {

while (kornDa()) nimm(); . . . }

Page 28: Hamster-ProgrammierungSeite 85 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell

Hamster-ProgrammierungSeite 28

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Variablen / Globale Variablen

Wer findet die Fehler ?boolean b1 = !b2; boolean b2 = !b2;boolean b3 = b1 && b2;

void main() {gefunden = kornDa();// …

}

void suche() {boolean gefunden = false; while (!gefunden && vornFrei()) {

if (kornDa()) gefunden = true;

}}boolean gefunden = false;

Page 29: Hamster-ProgrammierungSeite 85 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell

Hamster-ProgrammierungSeite 29

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Variablen / Globale Variablen

Lokale Variablen und globale Variablen– Gleichnamige lokale Variablen können globale Variablen

überdecken!

● Die lokale Variable wird vor der globalen Variablen benutzt.

● Innerhalb des Geltungsbereiches der lokalen Variablen kann nicht auf die globale Variable zugegriffen werden.

– Globale Variablen sollten vermieden werden!

● Änderungen des Wertes globaler Variablen können in allen Programmteilen erfolgen.

● Programme sind meistens weniger übersichtlich.

Page 30: Hamster-ProgrammierungSeite 85 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell

Hamster-ProgrammierungSeite 30

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Variablen / Lebensdauer

Lebensdauer einer Variablen– definiert die Zeitspanne, in der der Speicherplatz für eine Variable

im Hauptspeicher vorhanden ist

– hat mit der Laufzeit des Programms zu tun(Gültigkeitsbereich ist während des Compilierens von Bedeutung)

Beispielvoid main() {

while (vornFrei()) {boolean gefunden = false;gefunden = suche();…

}}

boolean suche() {…

return true;}

S. Günther
Variable "gefunden" wird in jedem Schleifendurchlauf neu erzeugt
Page 31: Hamster-ProgrammierungSeite 85 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell

Hamster-ProgrammierungSeite 31

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Variablen / Beispiel

Aufgabe 17Der Hamster steht irgendwo in seinem Territorium. Er soll bis zur nächsten Wand laufen und dabei alle Körner, die er unterwegs findet, einsammeln.

Nur wenn er eine gerade Anzahl an Körnern oder gar keins eingesammelt hat, soll er alle Körner, die er im Maul hat, an der Mauer ablegen. Ansonsten soll er nichts weiter tun.

Lösungsvariantena) mit globale Variablen

b) mit lokalen Variablen

Page 32: Hamster-ProgrammierungSeite 85 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell

Hamster-ProgrammierungSeite 32

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Variablen / Beispiel

Lösung mit globalen Variablen– Variable definieren

– Teilaufgabe „Ablegen“ und globaler Programmablauf//Variable definieren

boolean gerade_anzahl = true; // 0 Koerner gesammelt

// Programm main

void main() { sammle(); while (vornFrei()) { vor(); sammle(); }

if (gerade_anzahl)while (!maulLeer())

gib();}

Page 33: Hamster-ProgrammierungSeite 85 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell

Hamster-ProgrammierungSeite 33

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Variablen / Beispiel

Lösung mit globaler Variablen

- Sammeln: Körner sammeln und gerade Anzahl merkenvoid sammle() {

while (kornDa()) {nimm();gerade_anzahl = !gerade_anzahl;

}}

Page 34: Hamster-ProgrammierungSeite 85 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell

Hamster-ProgrammierungSeite 34

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Variablen / Beispiel

Lösung mit globaler Variablen

Lösung mit lokaler Variablen

main() (){ boolean gerade = true; … gerade = sammle(); if (gerade) …}

boolean sammle(){ boolean gerade = true; … gerade = …; return gerade}

main() (){ sammle(); if (gerade) …}

void sammle(){ … gerade = …;}

boolean gerade = true;

Page 35: Hamster-ProgrammierungSeite 85 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell

Hamster-ProgrammierungSeite 35

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Variablen / Beispiel

Lösung mit lokaler Variablen - Teilaufgaben– Der Hamster steht irgendwo in seinem Territorium. Er soll bis zur

nächsten Wand laufen und dabei alle Körner, die er unterwegs findet, einsammeln.

– Nur wenn er eine gerade Anzahl an Körnern oder gar keins eingesammelt hat, soll er alle Körner, die er im Maul hat, an der Mauer ablegen. Ansonsten soll er nichts weiter tun.

Teilaufgaben:– Sammeln: Körner sammeln und gerade Anzahl merken

– Information über gesammelte Körner muss für die anderen Teilaufgaben verfügbar sein

boolean sammle() {boolean gerade_anzahl = true; // 0 Körner gesammelt

while (kornDa()) {nimm();gerade_anzahl = !gerade_anzahl;

}return gerade_anzahl;

}

Page 36: Hamster-ProgrammierungSeite 85 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell

Hamster-ProgrammierungSeite 36

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Variablen / Beispiel

Teilaufgaben– Der Hamster steht irgendwo in seinem Territorium. Er soll bis

zur nächsten Wand laufen und dabei alle Körner, die er unterwegs findet, einsammeln.

– Nur wenn er eine gerade Anzahl an Körnern oder gar keins eingesammelt hat, soll er alle Körner, die er im Maul hat, an der Mauer ablegen. Ansonsten soll er nichts weiter tun.

// Programm mainvoid main() {

boolean gerade_anzahl = true; // 0 Koernergerade_anzahl = sammle();while (vornFrei()) { vor(); boolean gesammelt = sammle(); gerade_anzahl = (gerade_anzahl && gesammelt)

|| (!gerade_anzahl && !gesammelt);}if (gerade_anzahl)

while (!maulLeer()) gib();}

Page 37: Hamster-ProgrammierungSeite 85 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell

Hamster-ProgrammierungSeite 37

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Variablen / Beispiel

Aufgabe 18: Der Hamster als „Spurenleger“– Der Hamster steht mit beliebiger Blickrichtung in seinem

beliebigen Territorium auf einer Kachel, auf der sich eine bestimmte Anzahl von Körnern befinden. Außerdem gibt es weiter keine Körner. Der Hamster hat keine Körner im Maul.

Der Hamster soll eine gerade Körnerspur (je Feld 2 Körner) möglichst bis zur nächsten Wand legen. Er darf jedes Mal aber nur 1 Korn transportieren.

Page 38: Hamster-ProgrammierungSeite 85 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell

Hamster-ProgrammierungSeite 38

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Variablen / Beispiel

Aufgabe 19: Der Hamster als „Rechner“– Der Hamster steht in der rechten unteren Ecke (Blickrichtung

Nord) in einem abgeschlossenen Raum mit 3 Reihen ohne Mauern.

– In den oberen beiden Reihen liegen Körner (maximal ein Korn je Feld). In der unteren Reihe liegen keine Körner.

– Der Hamster hat keine Körner im Maul.

Der Hamster soll die oberen Reihen als Dualzahlen auffassen (kein Korn = 0; Korn = 1) und addieren. Das Ergebnis soll als Dualzahl in der 3. Reihe abgelegt werden.

Page 39: Hamster-ProgrammierungSeite 85 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell

Hamster-ProgrammierungSeite 39

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Variablen / Beispiel

Aufgabe 19: Der Hamster als „Rechner“

Additionsregeln für Dualzahlen (a und b sind boolesche Variablen):

Summand a 0

Summand b 0

Ergebnis 0

Übertrag 0

0

1

1

0

1

0

1

0

1

1

0

1

Beispiel:23 22 21 20 23 22 21 20

Page 40: Hamster-ProgrammierungSeite 85 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell

Hamster-ProgrammierungSeite 40

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Variablen / Beispiel

Additionsregeln für Dualzahlen mit Übertrag:

Summand a 0

Summand b 0

Übertrag ue 0

0

1

0

1

0

0

0

0

1

0

1

1

1

0

1

1

1

0

1

1

1Ergebnis 0

ÜbertrNeu 0

1

0

1

0

1

0

0

1

0

1

0

1

1

1

Berechnung des Ergebnisses:– Fälle ermitteln, die Ergebnis „1“ liefern– Ergebnis ist dann eins, wenn einer der Fälle zutrifft (ODER)

– Fall durch die Werte der Ausgangsdaten (a, b, ue) beschreiben (UND)

if ( ( ) || ( )

|| ( ) || ( ) )

a && !b && !ue !a && b && !ue

!a && !b && ue a && b && ue

Page 41: Hamster-ProgrammierungSeite 85 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell

Hamster-ProgrammierungSeite 41

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell

Auswahlanweisungen Wiederholungsanweisungen Boolesche Methoden Strukturieren von Programmen Hamster mit Gedächtnis (Boolesche Variablen) Hamster mit Gedächtnis (Zahlen)

Integer-Methoden

Verallgemeinerungen von Daten und Methoden

Prozeduren und Methoden mit Parametern

Prozeduren und Methoden, die sich selbst aufrufen (Rekursion)

Page 42: Hamster-ProgrammierungSeite 85 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell

Hamster-ProgrammierungSeite 42

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Zahlen

Aufgabe

Der Hamster steht irgendwo im Territorium.

Er soll bis zur nächsten Wand laufen, umkehren und schließlich an seinem Ausgangspunkt wieder anhalten.

Voraussetzungen für eine Lösung mit bekannten Mitteln1. Der Hamster hat mindestens 1 Korn im Maul.

2. Der Hamster darf unterwegs alle Körner einsammeln (oder es gibt keine weiteren Körner im Territorium).

Mögliche Lösung:– Der Hamster markiert die Ausgangsposition durch ein Korn.

Page 43: Hamster-ProgrammierungSeite 85 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell

Hamster-ProgrammierungSeite 43

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Zahlen / Motivation

Mögliche Lösung (ohne Prozeduren)

void main() { gib(); while (vornFrei()) { vor(); sammle(); } kehrt(); while (!kornDa()) vor();}

Wenn der Hamster kein Korn im Maul hat oder keine Körner einsammeln darf, ...

… ist die Aufgabe nicht lösbar! Dem Hamster fehlt das Zahlengedächtnis!

Page 44: Hamster-ProgrammierungSeite 85 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell

Hamster-ProgrammierungSeite 44

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Ganze Zahlen und Variablen

Variablen– für boolesche Werte true / false– für ganze Zahlen - 123, -2, 0, 7, 2345

Speicherzellen für ganze Zahlen: Datentyp int („integer“)– Wie viele Bits sind notwendig für ganze Zahlen?

– Speicher für jede Zahl wird begrenzt auf 32 Bit.

mögliche Werte für Variablen des Datentyps int – 232 mögliche Kombinationen

von -231 bis 231 – 1

von - 2147483648 bis 2147483647

Page 45: Hamster-ProgrammierungSeite 85 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell

Hamster-ProgrammierungSeite 45

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / int-Variablen / Definition

Definition von int-Variablen– Anlegen einer neuen Variablen mit einem Namen

int var_name = arithmetischer Ausdruck;

Semantik- Speicherplatz für int-Variable reservieren

- Zuordnen eines Namens zur Variablen (zum Speicherplatz)

- arithmetischen Ausdruck berechnen und Wert der Variablen initialisieren

- keine direkte Auswirkung auf den Programmablauf

Anweisung– Grundanweisung

(Grundbefehl)

– Prozeduraufruf

– Blockanweisung

– Bedingte Anweisung

– Alternativanweisung

– while-Anweisung

– do-Anweisung

– return-Anweisung

– Variablendefinition

Page 46: Hamster-ProgrammierungSeite 85 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell

Hamster-ProgrammierungSeite 46

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / int-Variablen

int-Variablen– erhalten automatisch den Wert 0, wenn die Initialisierung fehlt

– haben die gleichen Regeln für die Gültigkeit und Lebensdauer wie boolesche Variablen

Beispiele

int wert = 7;

int einhundertunddrei = 103;

int max = 2 * (12 – 34);

int min = -max - 1;

boolean wert = true;

Page 47: Hamster-ProgrammierungSeite 85 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell

Hamster-ProgrammierungSeite 47

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / int-Variablen / Zuweisung

int-Zuweisung – ändert den Wert einer Variablen

variablen_name = arithmetischer Ausdruck;

Semantik des Zuweisungsoperators „=“ – Wert des arithmetischen Ausdrucks (rechts vom „=“) ermitteln

– der alte Wert der Variablen wird durch den neu ermittelten Wert ersetzt

– Anweisung wird von rechts nach links ausgeführt

Beispiele: int anzahl = 0;

anzahl = anzahl + 1;

int fakultaet = 1;

fakultaet = fakultaet * anzahl;

Page 48: Hamster-ProgrammierungSeite 85 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell

Hamster-ProgrammierungSeite 48

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / int-Variablen / arithmetische Ausdrücke

Arithmetische Ausdrücke– Zahlzeichen – „int-Literale“: 0 123

– Variablen-Namen: wert– unärer arithmetischer Operator: -123

● Vorzeichen einer Zahl oder eines arithmetischen Ausdrucks

– binäre arithmetische Operationen: wert * 5

● Grundrechenarten + - * /

● Modulo-Operator %– Kombinationen: -5 + 3*wert – 4/wert– Klammerausdrücke: (wert+1) * (x–1)

Achtung:– bei Zahlen keine „0“ voranstellen! 0023

Page 49: Hamster-ProgrammierungSeite 85 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell

Hamster-ProgrammierungSeite 49

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / int-Variablen / arithmetische Ausdrücke

Binäre arithmetische Ausdrücke– bestehen aus 2 Operanden und dem Operationszeichen

– „+“ : Addition

– „-“: Subtraktion

– „*“: Multiplikation

– „/“: ganzzahlige Division

– „%“: Modulo-Operator (Rest einer ganzzahligen Division) Reihenfolge:

– unärer Operator vor binären Operatoren

– Punktrechnung (*, /, %) vor Strichrechnung (+, - ) Beispiele:

int a = 4711;

int b = 2;

int wert;

wert = (-(5 * b) + a) % 5;

Page 50: Hamster-ProgrammierungSeite 85 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell

Hamster-ProgrammierungSeite 50

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / int-Variablen / Anmerkungen

Division durch 0 Restbildung mit dem Wert 0– Reaktion: Der Hamster stirbt!

int a = 200;int b; int wert;

wert = a / b;

Überschreiten des Wertebereiches – ist bei Addition, Subtraktion und Multiplikation möglich– hat keine Auswirkungen auf den Hamster!

int max_int = 2147483647;

int zu_gross = max_int + 1;

Page 51: Hamster-ProgrammierungSeite 85 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell

Hamster-ProgrammierungSeite 51

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / int-Variablen / Datentypen

Operationen mit Variablen und Werten müssen sinnvoll sein!

boolean b = false;int wert = 200;

wert = wert * b;

wert = vornFrei();

Sinnlose Operationen werden vom Compiler erkannt!– Für jeden Datentyp sind (nur) sinnvolle Operationen definiert.

– Alle anderen Operationen sind nicht zulässig.

Fehler

Fehler

Page 52: Hamster-ProgrammierungSeite 85 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell

Hamster-ProgrammierungSeite 52

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / int-Variablen / Vergleichsausdruck

Vergleichsausdruck– Ermittelt Ordnungsbeziehungen zwischen Ausdrücken

ausdruck_1 == ausdruck_2

ausdruck_1 != ausdruck_2

ausdruck_1 < ausdruck_2

ausdruck_1 <= ausdruck_2

ausdruck_1 > ausdruck_2

ausdruck_1 >= ausdruck_2

Semantik der Vergleichsoperatoren – liefern boolesche Ergebnisse

– Auswertung von links nach rechts

– <, <=, >, >= haben Vorrang vor == , !=

Page 53: Hamster-ProgrammierungSeite 85 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell

Hamster-ProgrammierungSeite 53

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / int-Variablen / Vergleichsausdruck

Beispiele

int x = 3;int y = 4;

boolean falsch = (y < 5) && (x > 5);

boolean vergleich = (x == 5 * y + 3);

// Vermeiden der Division durch „0“

if (x != 0) {

y = y / x;

}

Anmerkungen– Arithmetische Operatoren haben Vorrang vor Vergleichen!

– Vergleiche haben Vorrang von Zuweisungen

– Gleichheitsoperator „==“ und Zuweisung „=“ nicht verwechseln !

Page 54: Hamster-ProgrammierungSeite 85 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell

Hamster-ProgrammierungSeite 54

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Variablen / Ausdrücke

Operatoren mit Prioritäten für die Ausführung bei Ausdrücken

Prio. Op.-Z. Operanden Ergebnistyp Funktion

1 +,- int int Vorzeichen

1 ! boolean boolean log. Negation

2 *,/,% int int Punktrechenarten

3 +,- int int Strichrechenarten

4 <,<=,>,>= int boolean Vergleichsop.

5 ==,!= int boolean Gleichheitsop.

6 && boolean boolean log. UND

7 || boolean boolean log. ODER

8 = int int Zuweisung

8 = boolean boolean Zuweisung

Page 55: Hamster-ProgrammierungSeite 85 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell

Hamster-ProgrammierungSeite 55

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Variablen / Beispiele

Aufgabe 20:

Der Hamster hat keine Körner im Maul undsteht irgendwo im Territorium.

Er soll bis zur nächsten Wand laufen, umkehren und an seinem Ausgangspunkt anhalten. Er darf unterwegs keine Körner fressen.

Lösungsidee:– int-Variable für die gelaufenen Schritte benutzen

– hinwärts: Schritte zählen

– rückwärts: Schritte von der gemerkten Anzahl abziehen

Page 56: Hamster-ProgrammierungSeite 85 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell

Hamster-ProgrammierungSeite 56

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Variablen / Beispiele

Lösung:

void main() { int schritte = 0; // gelaufenen Schritte merken

// laufe bis zur Wand while (vornFrei()) { vor(); schritte = schritte + 1; // Schritte zaehlen }

// kehre um linksUm(); linksUm();

// laufe zurueck: while (schritte > 0) { vor(); schritte = schritte - 1; } }

Page 57: Hamster-ProgrammierungSeite 85 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell

Hamster-ProgrammierungSeite 57

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Variablen / Beispiele

Aufgabe 21:

Der Hamster hat keine Körner im Maul und steht irgendwo im körnerlosen Territorium. Rechts von ihm ist eine Wand. Das Feld vor ihm ist frei.

Er soll so lange an der Wand entlang laufen, bis er wieder seinen Ausgangspunkt erreicht.

Teilaufgaben– Ausgangsposition erkennen

– Bewegung weg von der Ausgangsposition registrieren

– aktuelle Position merken

Page 58: Hamster-ProgrammierungSeite 85 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell

Hamster-ProgrammierungSeite 58

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Variablen / Beispiele

Teilaufgabe „Position speichern“– je ein Zähler für waagerechte und senkrechte Position

Teilaufgabe „Positionsänderung verwalten“– aktuelle Bewegungsrichtung merken (zusätzliche Variable)

– Unterscheidung

● der Zähler (waagerecht / senkrecht) und

● der Zählrichtung (vorwärts / rückwärts; hoch / runter)

Page 59: Hamster-ProgrammierungSeite 85 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell

Hamster-ProgrammierungSeite 59

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Variablen / Beispiele

int richtung = 0;

// repraesentiert eine der vier moeglichen

// Richtungen durch die Werte 0, 1, 2 oder 3

int x_dimension = 0; // horizontale Position

int y_dimension = 0; // vertikale Position

Teilaufgabe „Position (und Richtung) merken“

Teilaufgabe „Positionsänderung (und Richtung) verwalten“– Drehung ändert Richtungsvariable => neuesLinksUm()

– Bewegung ändert Position (Zählerwerte) => neuesVor()

Page 60: Hamster-ProgrammierungSeite 85 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell

Hamster-ProgrammierungSeite 60

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Variablen / Beispiele// einmal linksUm: richtung == 1// zweimal linksUm: richtung == 2// dreimal linksUm: richtung == 3// viermal linksUm: richtung == 0

void neuesLinksUm() {

linksUm();

richtung = (richtung + 1) % 4;

}

void neuesVor() {

vor();

if (richtung == 0) x_dimension = x_dimension + 1;

else if (richtung == 1) y_dimension = y_dimension + 1;

else if (richtung == 2) x_dimension = x_dimension - 1;

else // (richtung == 3) y_dimension = y_dimension - 1;

}

Page 61: Hamster-ProgrammierungSeite 85 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell

Hamster-ProgrammierungSeite 61

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Variablen / Beispiele

Lösungsansatz für Hauptprogramm:– Der Hamster läuft so lange an der rechten Wand entlang, bis er

die Ausgangsposition wieder erreicht hat, also die beiden Zähler wieder die Anfangswerte haben.

sinnvolle Methoden

void neuesRechtsUm() {

neuesLinksUm();

neuesLinksUm();

neuesLinksUm();

}

boolean ausgangspunktErreicht() {

// der Ausgangspunkt ist erreicht, wenn beide // Richtungsvariablen wieder ihren Initialwert enthalten

return (x_dimension == 0) && (y_dimension == 0);}

Page 62: Hamster-ProgrammierungSeite 85 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell

Hamster-ProgrammierungSeite 62

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Variablen / Beispiele

void main() { neuesVor();

while (!ausgangspunktErreicht()) {

while ( vornFrei() && !rechtsFrei() && !ausgangspunktErreicht() )

neuesVor();

if (!ausgangspunktErreicht())

if (rechtsFrei()) { neuesRechtsUm(); neuesVor();

}

else // vorne und rechts stehen Mauern

neuesLinksUm();

}}

Page 63: Hamster-ProgrammierungSeite 85 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell

Hamster-ProgrammierungSeite 63

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Variablen / Aufgabe

Aufgabe 22: Hamster als Gebirgswanderer

Der Hamster (ohne Körner im Maul) steht vor einem Gebirge mit unregelmäßigen Bergen unbekannter Höhe.

Er soll dieses Gebirge übersteigen und stehen bleiben, sobald er dieselbe Höhe erreicht hat wie die Ausgangsposition.

Page 64: Hamster-ProgrammierungSeite 85 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell

Hamster-ProgrammierungSeite 64

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Variablen / Aufgabe

Aufgabe 23: Hamster als Kodierer

Der Hamster steht mit Blickrichtung West in einem körnerlosen Territorium. Er hat eine ihm unbekannte Anzahl Körner im Maul.

Er soll die Anzahl der Körner ermitteln und dann auf dem Feld vor ihm so viele Körner ablegen, wie die letzte Ziffer der Zahl angibt;auf den nächsten Feld so viele wie die vorletzte Ziffer angibt usw.

Dies soll er so oft wiederholen, bis die Zahl abgearbeitet ist oder eine Wand erreicht wurde.

Beispiel: Er hat 204 Körner im Maul und muss auf dem Feld vor ihm 4, davor 0 und davor 2 Körner ablegen.

204

Page 65: Hamster-ProgrammierungSeite 85 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell

Hamster-ProgrammierungSeite 65

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Variablen / Aufgabe

Zahlzerlegung– Rest der Division der Zahl durch 10 => Einer

– Rest der Division der Zahl durch 100 => Zehner

– Rest der Division der Zahl durch 1000 => Hunderter

– . . . Varianten für die Aufgabe:

– Umwandlung in Dualzahlen

● Division durch 2N , N = 0, 1, …

– Lösungsvariante:

● Der Hamster blickt in Richtung Osten und soll mit der höchsten Ziffer beginnen.

Page 66: Hamster-ProgrammierungSeite 85 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell

Hamster-ProgrammierungSeite 66

Hochschule Harz © Prof. Dr. Bernhard ZimmermannFachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther

Hamster-Modell / Variablen / Aufgabe

Aufgabe 24: Zahlen dekodieren

Der Hamster steht mit Blickrichtung West in einem Kornfeld.

Vor ihm befindet sich eine Reihe Kacheln mit entweder keinen oder genau einem Korn. Die Körnerreihe repräsentiert eine Dualzahl.

Der Hamster soll bis zur nächsten Wand laufen und die Dualzahldekodieren, d.h. in eine Dezimalzahl umrechnen.

Die berechnete Anzahl an Körnern soll er auf dem Feld rechts unten ablegen.

58

25 24 23 22 21 20