Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Ähnliche Präsentationen


Präsentation zum Thema: ""—  Präsentation transkript:

85 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)

86 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, . . .

87 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.

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

89 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

90 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

91 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

92 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

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

94 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)

95 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.

96 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?

97 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

98 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?

99 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

100 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

101 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; }

102 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; }

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

104 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

105 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

106 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“ }

107 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

108 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

109 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 . . .

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

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

112 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;

113 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.

114 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; }

115 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

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

117 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; } }

118 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 }

119 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; }

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

121 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.

122 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.

123 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:

124 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 Ü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

125 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)

126 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.

127 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!

128 Hamster-Modell / Ganze Zahlen und Variablen
für boolesche Werte true / false für ganze Zahlen , -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 bis – 1 von bis

129 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

130 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;

131 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;

132 Hamster-Modell / int-Variablen / 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) Achtung: bei Zahlen keine „0“ voranstellen! 0023

133 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;

134 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 = ; int zu_gross = max_int + 1;

135 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.

136 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 == , !=

137 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 !

138 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 *,/,% int int Punktrechenarten ,- int int Strichrechenarten 4 <,<=,>,>= int boolean Vergleichsop. ==,!= int boolean Gleichheitsop. && boolean boolean log. UND || boolean boolean log. ODER = int int Zuweisung = boolean boolean Zuweisung

139 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

140 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; } }

141 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

142 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)

143 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()

144 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; }

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

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

147 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.

148 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

149 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 => 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.

150 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. 58


Herunterladen ppt ""

Ähnliche Präsentationen


Google-Anzeigen