Slides:



Advertisements
Ähnliche Präsentationen
Algorithmen und Datenstrukturen
Advertisements

der Universität Oldenburg
der Universität Oldenburg
3. Operatoren und Ausdrücke
Motivation Bisher: Codes mit möglichst kurzer Codelänge.
Forschungszentrum caesar

Prof. Dr. Bernhard Zimmermann
Variablen und Datentypen
Zusammenfassung der Vorwoche
Finale Semantik und beobachtbares Verhalten
Imperative Programmierung
der Universität Oldenburg
der Universität Oldenburg
der Universität Oldenburg
Datentyp- umwandlung. Literale sind: Bezeichner mit einem festen Wert wie z.B:
ARRAY oder FELD oder VEKTOR
Dynamischer Speicher. In einer Funktion wird z.B. mit der Deklaration int i; Speicher auf dem sogenannten Stack reserviert. Wenn die Funktion verlassen.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Tobias Lauer.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Imperative Programmierung Funktionen und Parameter
Imperative Programmierung
Boolesche Ausdrücke Ist der Rückgabewert eines Ausdrucks vom Typ boolean, so wird dieser als Boolescher Ausdruck bezeichnet (nach dem Mathematiker George.
Java-Kurs - 2. Übung Entwicklungsumgebung Struktur von Programmen
PKJ 2005/1 Stefan Dissmann Zusammenfassung der Vorwoche Variable stehen für (einen) Wert, der sich im Programmablauf ändern kann. Variablen besitzen einen.
Zusammenfassung Vorwoche
Prof. Dr. Bernhard Wasmayr
Thema des Informatikkurses der Klasse 8
Das Java-Hamstermodell
DVG Ablaufsteuerung
DVG Klassen und Objekte
Dieter Bergmann, Lichtenfels
Bedingte Wiederholung (Buch S119)
Einführung in die Programmierung Anweisungen und Datentypen
Marcus Haller & René Schulze
Zahlensysteme und Dualarithmetik copyleft: munz

Kakuro Regeln und Strategien
Grundkonzepte Java - Klassendefinition
Java programmieren mit JavaKara
Eine Einführung in die CD-ROM
Einführung in die Programmiersprache C 3.Tag Institut für Mathematische Optimierung - Technische Universität Braunschweig.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Geoinformation II (6. Semester)
BIT – Schaßan – WS 02/03 Basisinformationstechnologie HK-Medien Teil 1, 11.Sitzung WS 02/03.
Dualzahlen und ihre logischen Verknüpfungen
Überlagerungsgesetz - Uq – Uq –– uq ~m Uq –+ uq ~m V-105.
Wiederholte Programmausführung
Vom Umgang mit Daten. public void myProgram() { int[] saeulenWerte = new int[world.getSizeX()]; for (int i = 0; i < saeulenWerte.length; i++) { saeulenWerte[i]
Ertragsteuern, 5. Auflage Christiana Djanani, Gernot Brähler, Christian Lösel, Andreas Krenzin © UVK Verlagsgesellschaft mbH, Konstanz und München 2012.
Eine lllustration der Herausforderungen des Stromsystems der Zukunft
Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014.
CuP - Java Sechste Vorlesung Entspricht ungefähr Kapitel 3. 1 – 3
Agenda für heute, 20. April, 2006 Wiederholte ProgrammausführungWiederholte Programmausführung Algorithmische Grundlagen Bedingungen zum Abbruch von Programmschleifen.
Agenda für heute, 7. April, 2005 Bedingte ProgrammausführungBedingte Programmausführung Algorithmische Grundlagen Vergleichsoperatoren, Wahrheitswerte.
Agenda für heute, 14. April, 2005 Wiederholte ProgrammausführungWiederholte Programmausführung Algorithmische Grundlagen Bedingungen zum Abbruch von Programmschleifen.
Programmieren in C Grundlagen C 2
PHP: Operatoren und Kontrollstrukturen
Folie Beispiel für eine Einzelauswertung der Gemeindedaten (fiktive Daten)
Hochschule Fulda – FB ET Sommersemester 2014
Folie Einzelauswertung der Gemeindedaten
Java Syntaxdiagramme Buchstabe A B Z a z ... Ziffer
Das Java-Hamster-Modell
Programmierkurs JavaUE 4 Anweisungen und ProgrammeDietrich BolesSeite 1 Programmierkurs Java Dr. Dietrich Boles Teil Imperative Programmierung Unterrichtseinheit.
Variablen und Datentypen
Funktionen. Aufgabe : Eingabe zweier Zahlen ---> Minimum bestimmen Dann nochmals Eingabe zweier Zahlen ---> Minimum bestimmen.
Funktionen, Felder und Parameter- übergabe. Funktionsaufruf mit Feld als Parameter: Parameter = Name des Feldes.
 Präsentation transkript:

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)

Software-Entwicklung Schritte bei der Lösung größerer Programmieraufgaben Analyse der Aufgabenstellung Konzept für die Lösung entwickeln („Spezifikation“) Programmstruktur entwerfen Codieren (Algorithmus in einer Programmiersprache formulieren) Testen der Programme Testen von Teilsystemen und der gesamten Software 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, . . .

Software-Entwicklung / Analyse der Aufgabenstellung Antwort auf folgende Fragen finden: Was ist das Ziel der Aufgabe? Wann ist das Programm zu beenden? Welche Randbedingungen sind zu beachten? Welche Einschränkungen sind zu berücksichtigen? Beispiel „Hamster als Slalomfahrer“: Ziel der Aufgabe Slalom fahren bis zum Ziel Ende des Programms Es wurde das einzige Korn auf dem Feld gefunden. 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. Einschränkungen Die Hindernisse müssen abwechselnd rechts und links umlaufen werden.

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, …

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

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

Software-Entwicklung / Spezifikation / Struktogramme Alternativen abhängig vom Ergebnis der Testbedingung werden alternative Aktionen abgearbeitet Bedingung wahr falsch Anweisungsblock A Anweisungsblock B Beispiel: linksFrei() linksUm Wand vorhanden ? wahr falsch rechtsUm rechtsUm false zurückgeben true zurückgeben

Software-Entwicklung / Spezifikation / Struktogramme Schleifen abhängig vom Ergebnis der Testbedingung werden Aktionen wiederholt abgearbeitet Solange Bedingung wahr ist Solange Bedingung wahr ist Anweisungsblock Anweisungsblock Beispiel: Hindernis suchen solange „kein Korn vorhanden“ und „vornFrei“ vor

Software-Entwicklung / Spezifikation / Struktogramme Beispiel: rechtskurveAusfuehren() rechtsUm vor linksUm vor solange „linksFrei“ false ist linksUm vor rechtsUm

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 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 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 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) x gespeicherten Wert>; } notwendige Teilaufgaben für die neue Lösung: Platz für die Variablen im Hauptspeicher reservieren Verwaltung der Variablen über Namen Initialisieren der Variablen

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 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 Bits im RAM könnten unterschiedlich interpretiert werden: 1 … 12 Zahlen false boolean Text Buchstaben

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-Modell / Boolesche Variablen Beispiele für Variablendefinition boolean 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 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; }

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-Modell / 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 Koerner sammle(); while (vornFrei()) { boolean gesammelt = sammle(); insgesamt_gerade = (insgesamt_gerade && gesammelt); } }

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-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. Wahrheitstafel für die Methode: L-Frei R-Frei entweder-oder false true false false false true false true Fall 2 oder Fall 3 sind interessant! true true true false

Hamster-Modell / Variablen / Beispiel Aufgabe 15: Wahrheitstafel für die Methode: L-Frei R-Frei entweder-oder false 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-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-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 Ergebnis true false false false true false true false false true false false true false true false false false true true

Hamster-Modell / Variablen / Beispiel Aufgabe 16: Vorgehensweise vorhandene Mauern erkennen und merken 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(); boolean hinten_mauer = !vornFrei(); boolean rechts_mauer = !vornFrei(); linksUm(); // zur Vermeidung von Seiteneffekten . . .

Hamster-Modell / Variablen / Beispiel Schritt 2: gemerkte Information verknüpfen Vorn Hinten Rechts Links Ergebnis true 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-Modell / 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-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-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-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) Beispiel void main() { while (vornFrei()) { boolean gefunden = false; gefunden = suche(); … } } boolean suche() { … return true; }

Hamster-Modell / Variablen / Beispiel 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. Lösungsvarianten mit globale Variablen mit lokalen Variablen

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-Modell / Variablen / Beispiel Lösung mit globaler Variablen - Sammeln: Körner sammeln und gerade Anzahl merken void sammle() { while (kornDa()) { nimm(); gerade_anzahl = !gerade_anzahl; } }

Hamster-Modell / Variablen / Beispiel Lösung mit globaler Variablen boolean gerade = true; main() (){ sammle(); if (gerade) … } void sammle(){ … gerade = …; } Lösung mit lokaler Variablen main() (){ boolean gerade = true; … gerade = sammle(); if (gerade) … } boolean sammle(){ boolean gerade = true; … gerade = …; return gerade }

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-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 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(); }

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-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-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 1 1 1 Beispiel: 23 22 21 20 23 22 21 20

Hamster-Modell / Variablen / Beispiel Additionsregeln für Dualzahlen mit Übertrag: Summand a 0 Summand b 0 Übertrag ue 0 1 1 1 1 1 1 1 Ergebnis 0 ÜbertrNeu 0 1 1 1 1 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-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-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 Mitteln Der Hamster hat mindestens 1 Korn im Maul. 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-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-Modell / Ganze Zahlen und 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-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-Modell / 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-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-Modell / int-Variablen / 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-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-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-Modell / int-Variablen / Datentypen Operationen mit Variablen und Werten müssen sinnvoll sein! boolean b = false; int wert = 200; wert = wert * b; wert = vornFrei(); Fehler Fehler Sinnlose Operationen werden vom Compiler erkannt! Für jeden Datentyp sind (nur) sinnvolle Operationen definiert. Alle anderen Operationen sind nicht zulässig.

Hamster-Modell / int-Variablen / 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-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-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-Modell / Variablen / Beispiele 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. 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-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-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-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-Modell / Variablen / Beispiele Teilaufgabe „Position (und Richtung) merken“ 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 „Positionsänderung (und Richtung) verwalten“ Drehung ändert Richtungsvariable => neuesLinksUm() Bewegung ändert Position (Zählerwerte) => neuesVor()

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-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(); } boolean ausgangspunktErreicht() { // der Ausgangspunkt ist erreicht, wenn beide // Richtungsvariablen wieder ihren Initialwert enthalten return (x_dimension == 0) && (y_dimension == 0); }

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-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-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-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-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 Dualzahl dekodieren, d.h. in eine Dezimalzahl umrechnen. Die berechnete Anzahl an Körnern soll er auf dem Feld rechts unten ablegen. 25 24 23 22 21 20 58