hamster-programmierungseite 85 hochschule harz © prof. dr. bernhard zimmermann fachbereich...
Post on 05-Apr-2015
125 Views
Preview:
TRANSCRIPT
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)
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, . . .
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.
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, …
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
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
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
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
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
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)
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.
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?
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
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?
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
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
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;
}
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;
}
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);
} }
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
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!
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“
}
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
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
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
. . .
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);
}
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(); . . . }
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;
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.
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;}
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
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();}
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;
}}
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;
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;
}
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();}
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.
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.
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
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
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)
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.
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!
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
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
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;
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;
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
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;
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;
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
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 == , !=
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 !
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
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
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; } }
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
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)
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()
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;
}
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);}
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();
}}
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.
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
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.
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
top related