6. Iteration (Schleifenanweisungen)

Ähnliche Dokumente
6. Iteration (Schleifenanweisungen)

1. Erste Schritte 2. Einfache Datentypen 3. Anweisungen und Kontrollstrukturen 4. Verifikation 5. Reihungen (Arrays)

Einstieg in die Informatik mit Java

Objektorientierte Programmierung

C++ Teil Schleifen. Man kann bestimme Anweisungen in einem Programm mehrfach ausführen lassen. Dazu gibt es in C++ verschiedene Schleifen.

Einstieg in die Informatik mit Java

Grundlagen der Programmierung Teil1 Einheit III Okt. 2010

Schwerpunkte. 5. Auswahl: Bedingte Anweisungen. Syntax. If-Anweisung: Auswahl aus zwei Alternativen. If-Anweisung: Auswahl aus 2 Alternativen

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Einstieg in die Informatik mit Java

Grundlagen der Programmierung Teil1 Einheit III Okt. 2009

Java Anweisungen und Ablaufsteuerung

Einstieg in die Informatik mit Java

2.4 Schleifen. Schleifen unterscheiden sich hinsichtlich des Zeitpunktes der Prüfung der Abbruchbedingung:

Einstieg in die Informatik mit Java

99 - Struktogramme - 2. Sequenz I

Abschnitt 5. Grundlagen der funktionalen & imperativen Programmierung

Einstieg in die Informatik mit Java

Kapitel 3: Anweisungen

Wiederholungen / Schleifen

3. Anweisungen und Kontrollstrukturen

Aufgabe 1.90: Ein Geschäft gibt ihren Kunden unterschiedliche Rabatte. Schreiben ein Programm, das folgende Rabattklassen vorsieht:

1. Erste Schritte 2. Einfache Datentypen 3. Anweisungen und Kontrollstrukturen 4. Verifikation 5. Reihungen (Arrays)

3. Kontrollstrukturen Grundlagen der Programmierung 1 (Java)

Schwerpunkte. 10. Felder (Arrays) Grundprinzip von Arrays. Klassifikation von Typen in Programmiersprachen

Schachtelung der 2. Variante (Bedingungs-Kaskade): if (B1) A1 else if (B2) A2 else if (B3) A3 else if (B4) A4 else A

Elementare Konzepte von

C++ Teil 2. Sven Groß. 16. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 22

Einstieg in die Informatik mit Java

4.4 Imperative Algorithmen Verzweigung und Iteration

Vorlesung Programmieren

Tagesprogramm

Einführung in die Programmierung

Arbeitsblätter für die Lehrveranstaltung OOP JAVA 1

Gedächtnis. Während der Abarbeitung eines Algorithmus müssen sich Dinge gemerkt werden bzw. auf Dingen wird gerechnet. Zugriff.

4.4 Imperative Algorithmen Prozeduren

Java Einführung ABLAUFSTEUERUNG Kapitel 3 und 4

Einführung in die Programmierung Wintersemester 2011/12

Java: Eine kurze Einführung an Beispielen

Kontrollstrukturen -- Schleifen und Wiederholungen

BKTM - Programmieren leicht gemacht.

Martin Unold INFORMATIK. Geoinformatik und Vermessung

EINI LW/WiMa. Einführung in die Informatik für Naturwissenschaftler und Ingenieure Vorlesung 2 SWS WS 14/15

EINI LogWing/WiMa. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 17/18

2.5 Programmstrukturen Entscheidung / Alternative

4. Ablaufsteuerung (Kontrollstrukturen) 4.1 Anweisungen 4.2 Selektion (bedingte Anweisung) 4.3 Iteration 4.4 Flussdiagramm (Programmablaufplan)

Java Ablaufsteuerung (Beispiele)

Java - Programmierung - Prozedurale Programmierung 1

Kapitel 3: Anweisungen. Bedingte Anweisungen. Sequentielle Auswertung (Kurzschlussauswertung) Komplexe Bedingungen

EINI WiMa. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 11/12

Übung Informatik I - Programmierung - Blatt 3

3. Grundanweisungen in Java

Kapitel 10. Programmierkurs. Grundlagen von Exceptions Behandlung von Exceptions

II.1.1. Erste Schritte - 1 -

Vorlesung Programmieren

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Blöcke. Beispiel: Variablen in Blöcken

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Javakurs für Anfänger

Flussdiagramm / Programmablaufplan (PAP)

Wenn... dann... if (condition) statement. if (kontostand < 0) System.out.println("Oops..."); false. condition. true. statement

10. Felder (Arrays) Teil 2. Java-Beispiele: Echo.java Primzahlen.java Monate.java. K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16

Objektorientierte Programmierung OOP Programmieren mit Java

Einführung in C. EDV1-04C-Einführung 1

EINI LW. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 11/12

EINI LW/WiMa. Einführung in die Informatik für Naturwissenschaftler und Ingenieure Vorlesung 2 SWS WS 16/17

Javakurs für Anfänger

II.1.1. Erste Schritte - 1 -

Webbasierte Programmierung

Die Programmiersprache C Eine Einführung

Einführung in die Programmierung I. 2.0 Einfache Java Programme. Thomas R. Gross. Department Informatik ETH Zürich

2 Programmieren in Java I noch ohne Nachbearbeitung

Grundlagen der Programmierung

9. Programmierrichtlinien. K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2014/15

Beispiele für Ausdrücke. Der imperative Kern. Der imperative Kern. Imperativer Kern - Kontrollstrukturen. Deklarationen mit Initialisierung

Java für Anfänger Teil 4: Anweisungen. Programmierkurs Manfred Jackel

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Einführung in die Programmierung für NF. Zuweisungen, main- Methode und Kommentare

CS1005 Objektorientierte Programmierung Bachelor of Science (Informatik)

Wiederholung, Abbruch von Schleifen, switch-anweisung Datentypen, char, formatierte Ausgabe

Herzlich willkommen!

5. Elementare Befehle und Struktogramme

n 1. Grundzüge der Objektorientierung n 2. Methoden, Unterprogramme und Parameter n 3. Datenabstraktion n 4. Konstruktoren n 5. Vordefinierte Klassen

Programmieren I. Kapitel 5. Kontrollfluss

Schleifen in C/C++/Java

Anweisungen zur Ablaufsteuerung

Erste Java-Programme (Scopes und Rekursion)

Kontrollstrukturen Blöcke / Schleifen / Bedingungen

Programmierkurs Java

C- Kurs 04 Anweisungen

Schwerpunkte. 8. Ausdrücke, Operatoren (einfache Typen) Beispiel: Schaltjahr Test. Einführendes Beispiel: Grundprobleme

11. Rekursion, Komplexität von Algorithmen

Grundlagen der Informatik 5. Kontrollstrukturen II

Transkript:

6. Iteration (Schleifenanweisungen) Java-Beispiel: TemperatureTable.java K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 Version: 9. Nov. 2015

2 Schwerpunkte While-Anweisung: "abweisende" Schleife Do-while-Anweisung: "nichtabweisende" Schleife For-Anweisung: zählergesteuerte Schleife Klassifikation von Anweisungen Strukturierte Programmierung

3 Syntax

While-Anweisung EBNF: while ( Bedingung ) Anweisung Unterschiede zu Pascal? Solange die 'Bedingung' gilt, wiederhole man die 'Anweisung' Anwendung: Anweisung wird ggf. n i c h t bearbeitet Pascal while ( Bedingung ) K. Bothe, Inst. f. Informatik, HU Berlin, GdP, WS 2015/16 do Anweisung 4

5 Do-while-Anweisung EBNF: do Anweisung while ( Bedingung ) ; Syntax nicht konsequent: ';' Solange die 'Bedingung' gilt, wiederhole man die 'Anweisung', wobei die Bedingung n a c h Ausführung der Anweisung getestet wird Anwendung: Anweisung wird mindestens e i n m a l bearbeitet

6 Do-while-Anweisung: mit while-anweisung ausgedrückt do Anweisung while ( Bedingung ) ; dasselbe wie: Anweisung while ( Bedingung ) Anweisung Do-while wird nicht benötigt - erspart aber Schreibaufwand

7 Rolle des '; in der Syntax: Trennung oder Abschluss von Anweisungen? Pascal, Modula-2, Ada,... : Trennung von Anweisungen 1 2 3 x := y; if x > y then 2a 2b begin x := y; y := 0 end; d := 100

8 Rolle des ';' C, C++, Java: - Abschluss von Anweisungen (syntaktisch Teil der Anweisung) - aber: mit vielen Ausnahmen (ohne ';' : while, if,...) Unsauberkeit in Sprachdefinition (kein einheitliches Prinzip: Fehlerquelle) 1 2 3 2a x = y; if (x > y) { x = y; y = 0; d = 100; 2b

9 Beispiel: Fakultät n! = 1 * 2 *... * n Wichtig: Anfangswerte int n, x = 1, fakultaet = 1;... // n einlesen while (x <= n) { fakultaet = fakultaet * x; x = x + 1; Abbruchbedingung z. B. für n = 4: x durchläuft die Werte: 1, 2, 3, 4, 5 (bei x = 5 gilt nicht mehr: x <= n ) dabei durchläuft fakultaet die Werte: 1, 1, 2, 6, 24

10 For-Schleife

11 Auswahl einer Wiederholanweisung Wiederholung (einer Anweisung) Solange eine Bedingung gilt Feste Anzahl von Wiederholungen Java Pascal mindestens e i n Mal do A while (B); REPEAT A UNTIL NOT B; auch: 0 Mal while (B) A WHILE B DO A for (I;T;U) A FOR x := 1 TO n DO A

12 For-Schleife EBNF: for (Initialisierung ; Test ; Update) Anweisung dasselbe wie: Ausdrücke (insb. Zuweisungen) Initialisierung ; while ( Test ) { Anweisung ; Update ; For-Anweisung wird nicht benötigt - Bessere Lesbarkeit in vielen Fällen

13 Beispiel: Fakulät mit 'for' int n, x, fakultaet = 1;... // n einlesen for (x = 1; x <= n ; x = x + 1) fakultaet = fakultaet * x; dasselbe: x = 1; while (x <= n) { fakultaet = fakultaet * x; x = x + 1; Kurzform: x++ analog: x-- wie x = x - 1 Anwendung: A n z a h l der Wiederholungen ist bekannt (hier: n)!

14 For-Anweisung in Java (C, C++): aus sprachtheoretischer Sicht ein Unglück Was man will: - Man kennt Anzahl der Wiederholungen: n - Eine Laufvariable i läuft von einem Anfangswert (z.b. 1) bis zum bekannten Endwert (n) Pascal: fak := 1; FOR x := 1 TO n DO fak := fak * x; Java, C, C++: fak = 1; for (x = 1; x <= n ; x = x + 1) fak = fak * x;

For-Anweisung in Java (C, C++): unübersichtliche Programme möglich for (a = 1 ; b * c == 0 ; k = k + 1) x = y; kein Bezug der Laufvariablen a zur Abbruchbedingung und Update for ( ; ; ) {readnumber();... entspricht: while (true){ readnumber();... K. Bothe, Inst. f. Informatik, HU Berlin, GdP, WS 2015/16 15

16 Zyklen: weiteres Beispiel Tabelle: Umrechnung Celsius Fahrenheit Grad C Grad F -10.0 14.0-9.0 15.8-8.0 17.6... 10.0 50.0 Beispielprogramm mit while-anweisung

17 class TemperatureTable { // Tabelle mit C/F Temperaturen public static void main (String[] args) { final double LOW_TEMP = -10.0, HIGH_TEMP = 10.0; double cent, // Grad Celsius fahr; // Grad Fahrenheit Tabulator System.out.println("\tGrad C\t\tGrad F"); cent = LOW_TEMP; while (cent <= HIGH_TEMP) { fahr = (9.0/5.0) * cent + 32.0; // C -> F System.out.println("\t" + cent + "\t\t" + fahr); cent = cent + 1.0; cent++ Statt while besser for Wie?

18 class TemperatureTable { // Tabelle mit C/F Temperaturen public static void main (String[] args) { final double LOW_TEMP = -10.0, HIGH_TEMP = 10.0; double cent, // Grad Celsius fahr; // Grad Fahrenheit System.out.println("\tGrad C\t\tGrad F"); for(cent = LOW_TEMP; cent <= HIGH_TEMP; cent++) { fahr = (9.0/5.0) * cent + 32.0; // C -> F System.out.println("\t" + cent + "\t\t" + fahr);

19 Das 1 ½-Zyklus-Problem Break-Anweisung

20 Break-Anweisung: Austritt aus Zyklen mitten im Zykluskörper // z.b. Compiler: Symbole ermitteln und verarbeiten while (true) {... Einlesen // u.a. führende Leerzeichen überlesen if (Keyboard.eof()) break;... verarbeite Eingabe... Strukturierte Anweisung wird verlassen: switch, while, if Ungünstig: Abbruchbedingung nicht direkt in while-bedingung sichtbar (wenn möglich: vermeiden) Aber oft sinnvolle Lösung

21 Break-Anweisung: das " 1 ½ - Zyklus-Problem" while (true) {... einlesen... if (Keyboard.eof()) break;... verarbeite Eingabe...... einlesen... auch ohne break: aber doppelter Code while (! Keyboard.eof())... verarbeite Eingabe...... einlesen...

22 Strukturierte Programmierung Bekannter Begriff in der Programmierung seit ca. 1975

23 Klassifikation von Anweisungen Anweisungen Java einfach (elementar) strukturiert (zusammengesetzt aus anderen Anwendungen) leer Sprunganweisung: - break - continue - return - throw - (goto) Sprünge nötig? Methodenaufruf Zuweisung... Verzweigung: - if-anweisung - switch Alle Anweisungen nötig? Synchronisation Zyklen (Schleifen): - while - do-while - for Block (Sequenz) {s1; s2; Ausnahmeanweisung

24 Strukturierte Programmierung früher: (Fortran) 1 IF (a+b) 10, 20, 30 10...... GO TO 40 20... GO TO 40 30... 40... Strukturierte Programmierung: Man kommt ohne Sprünge aus (a+b)<0 Ausreichend zur Algorithmenbildung: - Zuweisung - sequentielle Ausführung (a1; a2;...) - Verzweigung (Langform von 'if') - Wiederholung (while) Marke (markierte Anweisung) (Fälle: a+b < 0... =0... >0)