Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

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

Ähnliche Präsentationen


Präsentation zum Thema: "Hamster-ProgrammierungSeite 85 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell."—  Präsentation transkript:

1 Hamster-ProgrammierungSeite 85 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)

2 Hamster-ProgrammierungSeite 86 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Software-Entwicklung n Schritte bei der Lösung größerer Programmieraufgaben 1.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,...) n Strategie bei der Umsetzung der Schritte – nacheinander (Wasserfall-Modell) – mit Wiederholung von Schritten (Spiral-Modell) – in kleinen Teilaufgaben (Rapid-Prototyping, Extreme Programming) – V-Modell,...

3 Hamster-ProgrammierungSeite 87 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Software-Entwicklung / Analyse der Aufgabenstellung n 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? n Beispiel Hamster als Slalomfahrer: 1.Ziel der Aufgabe – Slalom fahren bis zum Ziel 2.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.

4 Hamster-ProgrammierungSeite 88 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Software-Entwicklung / Spezifikation n 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... n Prinzip: – Zerlegen in Teilaufgaben – Teilaufgaben analysieren und Aktivitäten festlegen n Hilfsmittel: grafische Darstellung der Aktivitäten – Struktogramme (Nassi-Shneiderman-Diagramme) – Action-Diagramme, UML, …

5 Hamster-ProgrammierungSeite 89 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Software-Entwicklung / Spezifikation / Struktogramme n 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

6 Hamster-ProgrammierungSeite 90 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Software-Entwicklung / Spezifikation / Struktogramme n 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

7 Hamster-ProgrammierungSeite 91 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Software-Entwicklung / Spezifikation / Struktogramme n 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

8 Hamster-ProgrammierungSeite 92 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Software-Entwicklung / Spezifikation / Struktogramme n Schleifen – abhängig vom Ergebnis der Testbedingung werden Aktionen wiederholt abgearbeitet n Beispiel: Hindernis suchen solange kein Korn vorhanden und vornFrei vor Solange Bedingung wahr ist Anweisungsblock Solange Bedingung wahr ist Anweisungsblock

9 Hamster-ProgrammierungSeite 93 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich 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

10 Hamster-ProgrammierungSeite 94 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)

11 Hamster-ProgrammierungSeite 95 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster mit Gedächtnis / Variablen n 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, –…–… n Das Gedächtnis des Hamsters besteht aus Gedächtniszellen, die als Variablen bezeichnet werden. n Variablen sind Behälter zum Speichern von Daten bzw. Werten.

12 Hamster-ProgrammierungSeite 96 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich 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; } } n Wie sieht die Lösung mit Gedächtnis aus?

13 Hamster-ProgrammierungSeite 97 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster mit Gedächtnis / Motivation n Elegantere Lösung mit Variablen (Gedächtniszellen) boolean linksFrei() { linksUm(); ; rechtsUm(); return ; } n 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

14 Hamster-ProgrammierungSeite 98 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster mit Gedächtnis / Arten von Variablen n Variablen können unterschiedliche Arten von Informationen (Daten) speichern: – Testergebnisse – Zahlen – Buchstaben, Texte, … n 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 n Wie kann man unterschiedlicher Arten von Informationen im Hauptspeicher (in den Bytes) ablegen?

15 Hamster-ProgrammierungSeite 99 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster mit Gedächtnis / Speichern von Variablen n Notwendiger Platz für die Variablen ist abhängig von: – der Art der Daten (Datentyp) – der Codierung des Datentyps 0100 … n Bits im RAM könnten unterschiedlich interpretiert werden: false boolean 12 Zahlen Text Buchstaben

16 Hamster-ProgrammierungSeite 100 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Definition von Variablen n Definition boolescher Variablen – Anlegen einer neuen Variablen mit einem Namen boolean var_name = boolescher Ausdruck; n Semantik -Speicherplatz für boolesche Variable reservieren -Zuordnen eines Namens zur Variablen (zum Speicherplatz) -Wert der Variablen initialisieren -keine direkte Auswirkung auf den Programmablauf n Anweisung – Grundanweisung (Grundbefehl) – Prozeduraufruf – Blockanweisung – Bedingte Anweisung – Alternativanweisung – while-Anweisung – do-Anweisung – return-Anweisung – Variablendefinition

17 Hamster-ProgrammierungSeite 101 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Boolesche Variablen n Beispiele für Variablendefinition boolean immer_wahr = true; boolean mauer_da = !vornFrei(); boolean test = kornDa() && !maulLeer(); n Benutzung – Variablen-Namen können als boolesche Ausdrücke benutzt werden – Bei der Auswertung wird der Wert der Variablen verwendet. Testmethode linksFrei() mit booleschen Variablen boolean linksFrei() { linksUm(); // bestimme vornFrei() und speichere Ergebnis // in Variable ist_frei boolean ist_frei = vornFrei(); rechtsUm(); // liefere den in Variable ist_frei gespeicherten Wert return ist_frei; }

18 Hamster-ProgrammierungSeite 102 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Variablen / Zuweisung n Boolesche Zuweisung – ändert den Wert einer Variablen variablen_name = boolescher Ausdruck; n 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; }

19 Hamster-ProgrammierungSeite 103 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Variablen / lokale Variablen n lokale Variablen – werden innerhalb einer Methode definiert n Gültigkeitsbereich einer lokalen Variablen – ist der Teil des Programms, in dem eine Variable benutzt werden kann n 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 n Beispiel: void main() { boolean insgesamt_gerade = true; // 0 Koerner sammle(); while (vornFrei()) { boolean gesammelt = sammle(); insgesamt_gerade = (insgesamt_gerade && gesammelt); } }

20 Hamster-ProgrammierungSeite 104 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Variablen / lokale Variablen n 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

21 Hamster-ProgrammierungSeite 105 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Variablen / Beispiel n 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 true false true false true true false n Wahrheitstafel für die Methode: L-Frei R-Frei entweder-oder Fall 2 oder Fall 3 sind interessant!

22 Hamster-ProgrammierungSeite 106 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Variablen / Beispiel n Aufgabe 15: Wahrheitstafel für die Methode: L-Frei R-Frei entweder-oder falsefalsefalse true falsetrue falsetruetrue truetruefalse n 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 }

23 Hamster-ProgrammierungSeite 107 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Variablen / Beispiel n Aufgabe 16: Der Hamster soll eine boolesche Methode bekommen, die überprüft, ob sich auf seinen vier Nachbarfeldern genau eine Mauer befindet

24 Hamster-ProgrammierungSeite 108 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Variablen / Beispiel n Aufgabe 16: Der Hamster soll eine boolesche Methoden bekommen, die überprüft, ob sich auf seinen vier Nachbarfeldern genau eine Mauer befindet. n Wahrheitstafel: Wann liefert die Methode wahr? VornLinksHinten RechtsErgebnis truefalsefalsefalsetrue falsetruefalsefalsetrue falsefalsetruefalsetrue falsefalsefalsetruetrue

25 Hamster-ProgrammierungSeite 109 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Variablen / Beispiel n Aufgabe 16: Vorgehensweise 1.vorhandene Mauern erkennen und merken 2.gemerkte Information verknüpfen und Ergebnis zurück geben n 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...

26 Hamster-ProgrammierungSeite 110 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Variablen / Beispiel n Schritt 2: gemerkte Information verknüpfen VornHinten RechtsLinksErgebnis truefalsefalsefalsetrue falsetruefalsefalsetrue falsefalsetruefalsetrue falsefalsefalsetruetrue n 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); }

27 Hamster-ProgrammierungSeite 111 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Variablen / Globale Variablen n globale Variablen – sind außerhalb von Methoden definiert n Gültigkeitsbereich – Gesamtes Hamsterprogramm – umschließt alle Methoden n Beispiel: boolean gerade_anzahl = true; void main() { gerade_anzahl = sammle(); while (vornFrei()) { // weitere Anweisungen } } boolean sammle() { while (kornDa()) nimm();... }

28 Hamster-ProgrammierungSeite 112 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Variablen / Globale Variablen n 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;

29 Hamster-ProgrammierungSeite 113 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Variablen / Globale Variablen n 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.

30 Hamster-ProgrammierungSeite 114 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Variablen / Lebensdauer n 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) Beispiel void main() { while (vornFrei()) { boolean gefunden = false; gefunden = suche(); … } } boolean suche() { … return true; }

31 Hamster-ProgrammierungSeite 115 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Variablen / Beispiel n Aufgabe 17 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. n Lösungsvarianten a) mit globale Variablen b) mit lokalen Variablen

32 Hamster-ProgrammierungSeite 116 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Variablen / Beispiel n 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(); }

33 Hamster-ProgrammierungSeite 117 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Variablen / Beispiel n Lösung mit globaler Variablen - Sammeln: Körner sammeln und gerade Anzahl merken void sammle() { while (kornDa()) { nimm(); gerade_anzahl = !gerade_anzahl; } }

34 Hamster-ProgrammierungSeite 118 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich 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;

35 Hamster-ProgrammierungSeite 119 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Variablen / Beispiel n 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. n 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; }

36 Hamster-ProgrammierungSeite 120 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Variablen / Beispiel n 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 main void main() { boolean gerade_anzahl = true; // 0 Koerner gerade_anzahl = sammle(); while (vornFrei()) { vor(); boolean gesammelt = sammle(); gerade_anzahl = (gerade_anzahl && gesammelt) || (!gerade_anzahl && !gesammelt); } if (gerade_anzahl) while (!maulLeer()) gib(); }

37 Hamster-ProgrammierungSeite 121 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Variablen / Beispiel n 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.

38 Hamster-ProgrammierungSeite 122 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Variablen / Beispiel n 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.

39 Hamster-ProgrammierungSeite 123 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Variablen / Beispiel n Aufgabe 19: Der Hamster als Rechner Additionsregeln für Dualzahlen (a und b sind boolesche Variablen): Summand a0 Summand b0 Ergebnis0 Übertrag n Beispiel:

40 Hamster-ProgrammierungSeite 124 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Variablen / Beispiel n Additionsregeln für Dualzahlen mit Übertrag: Summand a 0 Summand b 0 Übertrag ue Ergebnis 0 ÜbertrNeu n 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

41 Hamster-ProgrammierungSeite 125 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)

42 Hamster-ProgrammierungSeite 126 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Zahlen n Aufgabe Der Hamster steht irgendwo im Territorium. Er soll bis zur nächsten Wand laufen, umkehren und schließlich an seinem Ausgangspunkt wieder anhalten. n Voraussetzungen für eine Lösung mit bekannten Mitteln 1.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). n Mögliche Lösung: – Der Hamster markiert die Ausgangsposition durch ein Korn.

43 Hamster-ProgrammierungSeite 127 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Zahlen / Motivation n Mögliche Lösung (ohne Prozeduren) void main() { gib(); while (vornFrei()) { vor(); sammle(); } kehrt(); while (!kornDa()) vor(); } n Wenn der Hamster kein Korn im Maul hat oder keine Körner einsammeln darf,... … ist die Aufgabe nicht lösbar! n Dem Hamster fehlt das Zahlengedächtnis!

44 Hamster-ProgrammierungSeite 128 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Ganze Zahlen und Variablen n 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 – 2 32 mögliche Kombinationen von bis 2 31 – 1 von bis

45 Hamster-ProgrammierungSeite 129 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / int-Variablen / Definition n Definition von int-Variablen – Anlegen einer neuen Variablen mit einem Namen int var_name = arithmetischer Ausdruck; n 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 n Anweisung – Grundanweisung (Grundbefehl) – Prozeduraufruf – Blockanweisung – Bedingte Anweisung – Alternativanweisung – while-Anweisung – do-Anweisung – return-Anweisung – Variablendefinition

46 Hamster-ProgrammierungSeite 130 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / int-Variablen n 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 n Beispiele int wert = 7; int einhundertunddrei = 103; int max = 2 * (12 – 34); int min = -max - 1; boolean wert = true;

47 Hamster-ProgrammierungSeite 131 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / int-Variablen / Zuweisung n int-Zuweisung – ändert den Wert einer Variablen variablen_name = arithmetischer Ausdruck; n 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;

48 Hamster-ProgrammierungSeite 132 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / int-Variablen / arithmetische Ausdrücke n Arithmetische Ausdrücke – Zahlzeichen – int-Literale: – 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: *wert – 4/wert – Klammerausdrücke: (wert+1) * (x–1) n Achtung: – bei Zahlen keine 0 voranstellen! 0023

49 Hamster-ProgrammierungSeite 133 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / int-Variablen / arithmetische Ausdrücke n Binäre arithmetische Ausdrücke – bestehen aus 2 Operanden und dem Operationszeichen – + : Addition – - : Subtraktion – * : Multiplikation – / : ganzzahlige Division – % : Modulo-Operator (Rest einer ganzzahligen Division) n Reihenfolge: – unärer Operator vor binären Operatoren – Punktrechnung ( *, /, % ) vor Strichrechnung ( +, - ) n Beispiele: int a = 4711; int b = 2; int wert; wert = (-(5 * b) + a) % 5;

50 Hamster-ProgrammierungSeite 134 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / int-Variablen / Anmerkungen n Division durch 0 Restbildung mit dem Wert 0 – Reaktion: Der Hamster stirbt! int a = 200; int b; int wert; wert = a / b; n Überschreiten des Wertebereiches – ist bei Addition, Subtraktion und Multiplikation möglich – hat keine Auswirkungen auf den Hamster! int max_int = ; int zu_gross = max_int + 1;

51 Hamster-ProgrammierungSeite 135 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / int-Variablen / Datentypen n Operationen mit Variablen und Werten müssen sinnvoll sein! boolean b = false; int wert = 200; wert = wert * b; wert = vornFrei(); n Sinnlose Operationen werden vom Compiler erkannt! – Für jeden Datentyp sind (nur) sinnvolle Operationen definiert. – Alle anderen Operationen sind nicht zulässig. Fehler

52 Hamster-ProgrammierungSeite 136 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / int-Variablen / Vergleichsausdruck n 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 n Semantik der Vergleichsoperatoren – liefern boolesche Ergebnisse – Auswertung von links nach rechts –, >= haben Vorrang vor ==, !=

53 Hamster-ProgrammierungSeite 137 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / int-Variablen / Vergleichsausdruck n Beispiele int x = 3; int y = 4; boolean falsch = (y 5); boolean vergleich = (x == 5 * y + 3); // Vermeiden der Division durch 0 if (x != 0) { y = y / x; } n Anmerkungen – Arithmetische Operatoren haben Vorrang vor Vergleichen! – Vergleiche haben Vorrang von Zuweisungen – Gleichheitsoperator == und Zuweisung = nicht verwechseln !

54 Hamster-ProgrammierungSeite 138 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Variablen / Ausdrücke n Operatoren mit Prioritäten für die Ausführung bei Ausdrücken Prio. Op.-Z. Operanden ErgebnistypFunktion 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 &&booleanboolean log. UND 7 ||booleanboolean log. ODER 8 =intint Zuweisung 8 =booleanboolean Zuweisung

55 Hamster-ProgrammierungSeite 139 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Variablen / Beispiele n Aufgabe 20: Der Hamster hat keine Körner im Maul und steht irgendwo im Territorium. Er soll bis zur nächsten Wand laufen, umkehren und an seinem Ausgangspunkt anhalten. Er darf unterwegs keine Körner fressen. n Lösungsidee: – int-Variable für die gelaufenen Schritte benutzen – hinwärts: Schritte zählen – rückwärts: Schritte von der gemerkten Anzahl abziehen

56 Hamster-ProgrammierungSeite 140 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Variablen / Beispiele n 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; } }

57 Hamster-ProgrammierungSeite 141 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Variablen / Beispiele n 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. n Teilaufgaben – Ausgangsposition erkennen – Bewegung weg von der Ausgangsposition registrieren – aktuelle Position merken

58 Hamster-ProgrammierungSeite 142 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Variablen / Beispiele n Teilaufgabe Position speichern – je ein Zähler für waagerechte und senkrechte Position n 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)

59 Hamster-ProgrammierungSeite 143 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich 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 n Teilaufgabe Position (und Richtung) merken n Teilaufgabe Positionsänderung (und Richtung) verwalten – Drehung ändert Richtungsvariable=> neuesLinksUm() – Bewegung ändert Position (Zählerwerte)=> neuesVor()

60 Hamster-ProgrammierungSeite 144 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich 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; }

61 Hamster-ProgrammierungSeite 145 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Variablen / Beispiele n 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. n sinnvolle Methoden void neuesRechtsUm() { neuesLinksUm(); } boolean ausgangspunktErreicht() { // der Ausgangspunkt ist erreicht, wenn beide // Richtungsvariablen wieder ihren Initialwert enthalten return (x_dimension == 0) && (y_dimension == 0); }

62 Hamster-ProgrammierungSeite 146 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich 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(); } }

63 Hamster-ProgrammierungSeite 147 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Variablen / Aufgabe n 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.

64 Hamster-ProgrammierungSeite 148 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Variablen / Aufgabe n 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

65 Hamster-ProgrammierungSeite 149 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Variablen / Aufgabe n 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 –... n Varianten für die Aufgabe: – Umwandlung in Dualzahlen Division durch 2 N, N = 0, 1, … – Lösungsvariante: Der Hamster blickt in Richtung Osten und soll mit der höchsten Ziffer beginnen.

66 Hamster-ProgrammierungSeite 150 Hochschule Harz © Prof. Dr. Bernhard Zimmermann Fachbereich Automatisierung und Informatik Prof. Dr. Sigurd Günther Hamster-Modell / Variablen / Aufgabe n 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 Dualzahl dekodieren, d.h. in eine Dezimalzahl umrechnen. Die berechnete Anzahl an Körnern soll er auf dem Feld rechts unten ablegen


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

Ähnliche Präsentationen


Google-Anzeigen