Tag 3 Repetitorium Informatik (Java)

Ähnliche Dokumente
Tag 3 Repetitorium Informatik (Java)

Tag 4 Repetitorium Informatik (Java)

FACHHOCHSCHULE AUGSBURG Hochschule für Technik, Wirtschaft und Gestaltung

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

Modul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 2

3. Anweisungen und Kontrollstrukturen

Tag 2 Repetitorium Informatik (Java)

Objektorientierte Programmierung

Programmiertechnik Kontrollstrukturen

Kontrollstrukturen -- Schleifen und Wiederholungen

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik Kontrollstrukturen

Einführung in die Programmierung Wintersemester 2011/12

Java 8. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Oktober 2014 JAV8

Java - Schleifen. Bedingung. wiederhole. Anweisung Anweisung Anweisung. Leibniz Universität IT Services Anja Aue

2.5 Programmstrukturen Entscheidung / Alternative

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

Tag 4 Repetitorium Informatik (Java)

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 25

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Schleifen: Immer wieder dasselbe tun

C++ - Einführung in die Programmiersprache Schleifen

Intensivübung zu Algorithmen und Datenstrukturen

2 Teil 2: Nassi-Schneiderman

Einstieg in die Informatik mit Java

Arbeitsblätter für Algorithmierung und Strukturierung

Javakurs für Anfänger

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

Schleifen Datenfelder (Arrays) Verzweigungen

Arbeitsblätter für Algorithmierung und Strukturierung C #

Operatoren für elementare Datentypen Bedingte Anweisungen Schleifen. Operatoren für elementare Datentypen Bedingte Anweisungen Schleifen

Programmieren I. Kontrollstrukturen Heusch 8 Ratz Institut für Angewandte Informatik

Einstieg in die Informatik mit Java

Java I Vorlesung Imperatives Programmieren

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

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny

Vorkurs Informatik WiSe 16/17

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 1. Teil

Einführung in die Programmierung II. 3. Kontrollstrukturen

(Aufgaben zu Wertzuweisungen siehe Vorlesungsbeilage S. 49)

Vorsichtige Programmierer verwenden Inkrement- Operatoren nicht in komplizierteren Ausdrücken

Programmierkurs Java

Algorithmen & Programmierung. Steuerstrukturen im Detail Selektion und Iteration

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML.

Vorlesung Programmieren

Elementare Konzepte von

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 1 - Variablen und Kontrollstrukturen

4.2 Gleitkommazahlen. Der Speicherbedarf (in Bits) ist üblicherweise. In vielen Anwendungen benötigt man gebrochene Werte. Physikalische Größen

Einstieg in die Informatik mit Java

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

Programmieren I. Kontrollstrukturen Heusch 8 Ratz Institut für Angewandte Informatik

9 Anweisungen und Kontrollstrukturen

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

Webbasierte Programmierung

Einführung Java Programmieren in Java Arrays Schleifen Fehler. Einführung in Java. Arne Hüffmeier. Michelle Liebers, Dennis Hoffmann

Dr. Monika Meiler. Inhalt

3. Grundanweisungen in Java

Grundlagen der Programmierung Teil1 Einheit III Okt. 2010

Kontrollstrukturen Blöcke / Schleifen / Bedingungen

String-Konkatenation

Operatoren für elementare Datentypen Bedingte Anweisungen Schleifen. Programmieren I. Martin Schultheiß. Hochschule Darmstadt Wintersemester 2010/2011

Kapitel 5. Programmierkurs. Kontrollstrukturen. Arten von Kontrollstrukturen. Kontrollstrukturen Die if-anweisung Die switch-anweisung

Organisatorisches. drei Gruppen Gruppe 1: 10:10-11:40, Gruppe 2: 11:45-13:15 Gruppe 3: 13:20-14:50

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

Vorlesung Programmieren

Schleifen in C/C++/Java

Programmieren I. Kapitel 5. Kontrollfluss

Arrays und Schleifen

Tag 8 Repetitorium Informatik (Java)

Schleifen in C/C++/Java

Einführung in die Programmierung

Übersicht Programmablaufsteuerung

Javakurs für Anfänger

Operatoren (1) Operatoren (2)

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke

S. d. I.: Programieren in C Folie 4-1. im Gegensatz zu Pascal gibt es in C kein Schlüsselwort "then"

Organisatorisches. Neue Übungsblätter: Nur mehr elektronisch? Abgabe Di, , 14 Uhr bis Do, , 8Uhr

Grundlagen der Programmierung Teil1 Einheit III Okt. 2009

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

Arrays und Schleifen

Projekt 3 Variablen und Operatoren

12 == 12 true 12 == 21 false 4 === 7 true 4 === "vier" false 4 === 4.0 false 12!= 13 true 12!== 12 false 12!== 12.0 true. 1 < 3 true 3 < 1 false

1.8.5 Wiederholungen. Beispiele Unendliche Schleife: 1.8 Kontrollstrukturen 75. ( Bedingung ) AnweisungOderBlock. ja Anweisung. Bedingung erfüllt?

Schleifen dienen dazu, bestimmte Anweisungen immer wieder abzuarbeiten.

Übungsblatt 2. Java Vorkurs (WS 2015)

Übungsblatt 2. Java Vorkurs (WS 2017)

Programmieren I. Kontrollstrukturen. Heusch 8 Ratz Institut für Angewandte Informatik

Brückenkurs Programmieren

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

Folienpaket 4 Themenschwerpunkte: Kontrollstrukturen: Schleifen /2016 Dr. Daniel Haase - Vorkurse Informatik V3/V4

C# - Einführung in die Programmiersprache Bedingte Anweisungen und Schleifen

Java: Eine kurze Einführung an Beispielen

Transkript:

Tag 3 Repetitorium Informatik (Java) Dozent: Marius Kamp Lehrstuhl für Informatik 2 (Programmiersysteme) Friedrich-Alexander-Universität Erlangen-Nürnberg Wintersemester 2016/2017

Willkommen zum Informatik-Repetitorium! auf Grund der hohen Teilnehmerzahlen: bitte zusammenrücken und keine Plätze in der Mitte freilassen Videoübertragung in mehrere Hörsäle: mit eigenem Notebook laut eigener Angabe im EST: Nachname A R Hörsaal H5 Nachname S Z Hörsaal H6 ohne eigenes Notebook laut eigener Angabe im EST: Nachname A J Hörsaal H15 Nachname K Sch Hörsaal H16 Nachname Sd Z Hörsaal H6 bei Bild- oder Tonausfall bitte im Hörsaal H15 melden für Zwischenfragen liegt auf dem Pult ein Mikrofon bereit Informatik-Repetitorium Tag 3 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 2 / 42

Übersicht Typkonvertierung Implizite Typkonvertierung Explizite Typkonvertierung Mehrfach-Verzweigung: switch/case Schleifen while-schleifen for-schleifen do-while-schleifen Sprünge in Schleifen: break/continue Endlosschleifen Informatik-Repetitorium Tag 3 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 3 / 42

Typkonvertierung

Typkonvertierung bekannt: in Java gibt es unterschiedliche Datentypen der Typ bestimmt die Repräsentation und Größe eines Datums im Speicher unterschiedliche Datentypen haben unterschiedliche Wertebereiche jetzt: Typkonvertierung (cast): Überführung eines Wertes eines Datentyps in den entsprechenden Wert eines anderen Datentyps von kleinerem zu größerem Typ: Typerweiterung von größerem zu kleinerem Typ: Typeinschränkung man unterscheidet zwei Arten der Typkonvertierung: implizite Typkonvertierung ( durch den Compiler ) explizite Typkonvertierung ( durch den Programmierer ) Informatik-Repetitorium Tag 3 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 5 / 42

Implizite Typkonvertierung implizite Typkonvertierung: nicht direkt aus dem Quelltext des Programms ersichtlich automatisch durch den Compiler an den notwendigen Stellen eingefügt Voraussetzung: durch die Konvertierung entsteht kein Informationsverlust implizite Typkonvertierung nur im Falle einer Typerweiterung Beispiele i n t a = 13; double b = a ; / / i m p l i z i t e Typkonvertierung von i n t nach double double p i = 3.141 f ; / / i m p l i z i t e Typkonvertierung von f l o a t nach double / / ( f kennzeichnet f l o a t Wert ) Informatik-Repetitorium Tag 3 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 6 / 42

Explizite Typkonvertierung Was ist, wenn der Ziel-Datentyp kleiner als der Quell-Datentyp ist? Typeinschränkung Informationsverlust! nur mittels expliziter Typkonvertierung durch den Programmierer So nicht... double a = 9. 8 ; i n t b = a ; / / I n f o r m a t i o n s v e r l u s t ( p o s s i b l e loss of p r e c i s i o n ) f l o a t p i = 3.141; / / I n f o r m a t i o n s v e r l u s t ( p o s s i b l e loss of p r e c i s i o n ) So schon double a = 9. 8 ; i n t b = ( i n t ) a ; / / b = 9, Nachkommastellen abgeschnitten! f l o a t p i = ( f l o a t ) 3.141; / / besser : 3.141 f ( siehe oben ) Informatik-Repetitorium Tag 3 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 7 / 42

Achtung... (I) Möglicherweise unerwartetes Ergebnis i n t a = 13; double b = a / 2; / / b = 6.0 Was ist denn hier passiert? der Compiler sieht bei der Division zwei ganzzahlige Operanden a als int deklariert ganzzahlig 2 ist int-wert ganzzahlig es wird eine Ganzzahl-Division durchgeführt Ergebnis ist der int-wert 6 erst danach sieht der Compiler, dass in eine double-variable geschrieben wird implizite Typkonvertierung von int nach double in diesem Moment sind die Nachkommastellen aber schon verloren Informatik-Repetitorium Tag 3 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 8 / 42

Achtung... (II) Wahrscheinlich erwünschtes Ergebnis i n t a = 13; double b = a / 2. 0 ; / / b = 6.5 / / oder double b = ( ( double ) a ) / 2; / / b = 6.5 Warum funktioniert das jetzt? in beiden Fällen ist jetzt jeweils ein Operand vom Typ double es wird eine Fließkomma-Division durchgeführt Ergebnis ist der double-wert 6.5 Wert wird ohne weitere Konvertierung in die double-variable geschrieben Informatik-Repetitorium Tag 3 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 9 / 42

Mehrfach-Verzweigung: switch/case

Bisher... Wie heißt der m-te Monat? i n t m = /... / ; S t r i n g monatsname ; i f (m == 1) { monatsname = " Januar " ; else i f (m == 2) { monatsname = " Februar " ; else i f (m == 3) { / /... else i f (m == 12) { monatsname = " Dezember " ; else { monatsname = " kein Monat " ; Es fällt auf... viele ähnliche Vergleiche immer dieselbe Variable m jeweils Test auf Gleichheit Fälle schießen sich gegenseitig aus Vergleiche mit untersch. Werten es tritt nur einer der Fälle ein Informatik-Repetitorium Tag 3 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 11 / 42

Mehrfach-Verzweigung: switch/case (I) für obiges Schema kennt Java eine weitere Kontrollstruktur: switch/case vergleicht einen Ausdruck (Variable,...) auf unterschiedliche Werte Voraussetzung: Datentyp ist Ganzzahl (z.b. int), char oder String Syntax switch ( Ausdruck ) { case Wert1 : Anweisungen1 ; case Wert2 : Anweisungen2 ; / /... default : AnweisungenDefault ; zur Laufzeit passiert folgendes: 1 der Ausdruck wird ausgewertet 2 der passende Fall wird bestimmt 3 die zu dem Fall gehörenden Anweisungen werden ausgeführt Informatik-Repetitorium Tag 3 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 12 / 42

Mehrfach-Verzweigung: switch/case (II) Syntax switch ( Ausdruck ) { case Wert1 : Anweisungen1 ; case Wert2 : Anweisungen2 ; / /... default : AnweisungenDefault ; Hinweise zum switch/case die Werte müssen denselben Typ haben wie der Ausdruck die Werte müssen paarweise unterschiedlich sein die Anweisungen können auch aus einem Block in geschweiften Klammern bestehen der default-fall wird ausgeführt, wenn kein anderer Fall zutrifft der default-fall ist optional und kann deshalb entfallen Informatik-Repetitorium Tag 3 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 13 / 42

Erster Versuch... Erster Versuch mit switch/case i n t m = 2; S t r i n g monatsname ; switch (m) { case 1: monatsname = " Januar " ; case 2: monatsname = " Februar " ; / /... default : monatsname = " kein Monat " ; System. out. p r i n t l n ( monatsname ) ; / / e r w a r t e t : " Februar " Ausgabe des Programms kein Monat Informatik-Repetitorium Tag 3 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 14 / 42

Durchfallen Fehlerhaftes switch/case switch (m) { case 1: monatsname = " Januar " ; case 2: monatsname = " Februar " ; / /... default : monatsname = " kein Monat " ; ein case markiert nur den Anfang eines Falles, nicht das Ende eines anderen es werden auch die Anweisungen der nachfolgenden Fälle ausgeführt sogenanntes Durchfallen (fall through) Ausführung landet irgendwann im default-fall kein Monat Lösung: break-anweisungen bei der Ausführung einer break-anweisung wird switch/case verlassen nachfolgende Fälle werden nicht mehr ausgeführt Informatik-Repetitorium Tag 3 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 15 / 42

Bisher... Jetzt... Korrektes switch/case i n t m = 2; S t r i n g monatsname ; switch (m) { case 1: monatsname = " Januar " ; break ; case 2: monatsname = " Februar " ; break ; / /... default : monatsname = " kein Monat " ; break ; System. out. p r i n t l n ( monatsname ) ; / / e r w a r t e t : " Februar " Ausgabe des Programms Februar Informatik-Repetitorium Tag 3 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 16 / 42

Schleifen

Schleifen: Motivation (I) Beobachtung Bisher wurden Anweisungen entweder einmal oder keinmal ausgeführt. Beispiel i n t a = 13; / / einmal i n t b = 3; / / einmal i n t a b s D i f f ; / / einmal i f ( a > b ) { / / einmal a b s D i f f = a b ; / / einmal else { a b s D i f f = b a ; / / keinmal Informatik-Repetitorium Tag 3 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 18 / 42

Schleifen: Motivation (II) Was tun, wenn Anweisungen mehrfach ausgeführt werden sollen? Beispiel: 10x Hallo Welt ausgeben Idee: Anweisungen einfach mehrfach hintereinder schreiben aufwändig und äußerst unschön klappt nicht, wenn man die Anzahl an Ausführungen vorher nicht kennt Lösung: Schleifen als weitere Kontrollstruktur wiederholte Ausführung von Anweisungen solange Bedingung erfüllt ist Java kennt verschiedene Arten von Schleifen: while-schleife for-schleife do-while-schleife Informatik-Repetitorium Tag 3 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 19 / 42

while-schleife Syntax: while-schleife while ( Bedingung ) { / / S c h l e i f e n k o p f Anweisungen ; / / Schleifenrumpf Hinweise der Schleifenrumpf besteht aus den zu wiederholenden Anweisungen die Bedingung ist ein beliebiger boolescher Ausdruck wird vor jedem Schleifendurchlauf ausgewertet falls true: Anweisungen im Schleifenrumpf werden ausgeführt falls false: Schleife wird beendet Informatik-Repetitorium Tag 3 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 20 / 42

Ablaufdiagramm der while-schleife Syntax: while-schleife AnweisungenDavor ; while ( Bedingung ) { RumpfAnweisungen ; AnweisungenDanach ; Ablaufdiagramm AnweisungenDavor Bedingung false true RumpfAnweisungen AnweisungenDanach Informatik-Repetitorium Tag 3 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 21 / 42

Beispiel: Ausgabe aller Quadratzahlen y (I) Aufgabe Gegeben sei eine positive, ganze Zahl y. Gesucht ist ein Algorithmus, der alle ganzzahligen Quadratzahlen y berechnet und ausgibt. Beispiel y = 42 1, 4, 9, 16, 25, 36 Überlegungen Berechnung der Quadratzahlen: eine Quadratzahl ist eine Zahl q = n n um die nächstgrößere Quadratzahl zu berechnen, wird n um eins inkrementiert Speicherung der Basis n, Berechnung der Quadratzahl q, Inkrementierung von n Bedingung für die zu schreibende Schleife: falls die nächste Quadratzahl größer als y ist: Berechnung abbrechen Rumpf ausführen, solange die nächste Quadratzahl y ist Informatik-Repetitorium Tag 3 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 22 / 42

Beispiel: Ausgabe aller Quadratzahlen y (II) Aufgabe Gegeben sei eine positive, ganze Zahl y. Gesucht ist ein Algorithmus, der alle ganzzahligen Quadratzahlen y berechnet und ausgibt. Mögliche Lösung i n t n = 1; / / Basis while ( n n <= y ) { i n t q = n n ; / / Berechnung der a k t u e l l e n Quadratzahl System. out. p r i n t l n ( q ) ; / / Ausgabe der a k t u e l l e n Quadratzahl n = n + 1; / / Inkrementierung der Basis n Tipp Eigene Programme immer auch mit Grenzwerten testen, hier z.b. für y {48, 49, 50. Informatik-Repetitorium Tag 3 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 23 / 42

for-schleife Syntax: for-schleife for ( I n i t i a l i s i e r u n g ; Bedingung ; Fortsetzung ) { / / S c h l e i f e n k o p f Anweisungen ; / / Schleifenrumpf Hinweise Schleifenrumpf und Bedingung wie bei der while-schleife die Initialisierung wird einmalig vor Betreten der Schleife ausgeführt kann leer bleiben (Semikolon nicht vergessen!) die Fortsetzung wird nach jedem Schleifendurchlauf ausgeführt kann leer bleiben (Semikolon nicht vergessen!) Informatik-Repetitorium Tag 3 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 24 / 42

Ablaufdiagramm der for-schleife Syntax: for-schleife AnweisungenDavor ; for ( I n i t ; Bedingung ; Fortsetzung ) { RumpfAnweisungen ; AnweisungenDanach ; Ablaufdiagramm AnweisungenDavor Init Bedingung false true RumpfAnweisungen Fortsetzung AnweisungenDanach Informatik-Repetitorium Tag 3 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 25 / 42

Schleifenvariable, Laufvariable, Zählvariable die Bedingung hängt üblicherweise vom Wert einer ganzzahligen Variable ab Schleifenvariable oder Laufvariable oder Zählvariable eine solche Laufvariable wird üblicherweise...... in der Initialisierung deklariert und initialisiert... in der Fortsetzung inkrementiert oder dekrementiert Beispiel for ( i n t i = 1; i <= 3; ++ i ) { System. out. p r i n t l n ( i ) ; Alternative (unschön!) i n t i = 1; / /... e v t l. weitere Anweisungen... for ( ; i <= 3; ) { System. out. p r i n t l n ( i ) ; ++ i ; Informatik-Repetitorium Tag 3 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 26 / 42

Beispiel: Berechnung der n-ten Potenz (I) Aufgabe Gegeben seien zwei positive, ganze Zahlen x und n. Gesucht ist ein Algorithmus, der die n-te Potenz x n von x berechnet und ausgibt. Beispiel x = 3, n = 4 81 Überlegungen = x x x... x = 1 x x x... x in jeder Iteration eine Multiplikation mit x durchführen Variable, um das aktuelle Zwischenergebnis zu speichern Variable mit 1 initialisieren (neutrales Element der Multiplikation) x n wir brauchen n solcher Multiplikationen Laufvariable, die Anzahl an Iterationen mitzählt Bedingung, die die Schleife nach n Iterationen abbricht Informatik-Repetitorium Tag 3 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 27 / 42

Beispiel: Berechnung der n-ten Potenz (II) Aufgabe Gegeben seien zwei positive, ganze Zahlen x und n. Gesucht ist ein Algorithmus, der die n-te Potenz x n von x berechnet und ausgibt. Mögliche Lösung i n t potenz = 1; for ( i n t i = 1; i <= n ; ++ i ) { potenz = potenz x ; System. out. p r i n t l n ( potenz ) ; Übliche Lösung i n t potenz = 1; for ( i n t i = 0; i < n ; ++ i ) { potenz = potenz x ; System. out. p r i n t l n ( potenz ) ; Laufvariablen beginnen üblicherweise bei 0 Informatik-Repetitorium Tag 3 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 28 / 42

Vergleich for-schleife while-schleife Beide Schleifen-Arten sind gleich mächtig und können ineinander umgewandelt werden. for-schleifen for-schleifen eignen sich inbesondere dann, wenn die Anzahl an Iterationen vor Betreten der Schleife bekannt bzw. berechenbar ist. Beispiel: for-schleife i n t potenz = 1; for ( i n t i = 0; i < n ; ++ i ) { potenz = potenz x ; System. out. p r i n t l n ( potenz ) ; while-schleifen while-schleifen eignen sich inbesondere dann, wenn die Anzahl an Iterationen vor Betreten der Schleife unbekannt bzw. nicht (einfach) berechenbar ist. Beispiel: while-schleife i n t n = 1; while ( n n <= y ) { i n t q = n n ; System. out. p r i n t l n ( q ) ; n = n + 1; Informatik-Repetitorium Tag 3 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 29 / 42

do-while-schleife: Motivation bisher (for, while): Überprüfung der Bedingung vor jedem Schleifendurchlauf auch vor dem ersten Schleifendurchlauf! Schleifenrumpf wird unter Umständen gar nicht ausgeführt sogenannte kopfgesteuerte oder abweisende Schleifen jetzt (do-while): Überprüfung der Bedingung nach jedem Schleifendurchlauf erstmalig nach dem ersten Schleifendurchlauf! Schleifenrumpf wird mindestens einmal ausgeführt sogenannte fußgesteuerte oder nicht-abweisende Schleife Informatik-Repetitorium Tag 3 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 30 / 42

do-while-schleife Syntax: do-while-schleife do { Anweisungen ; / / Schleifenrumpf while ( Bedingung ) ; / / " S c h l e i f e n f u ß" Hinweise Schleifenrumpf und Bedingung wie bei der while-schleife allerdings andere Auswertungsreihenfolge (siehe oben) Achtung! Semikolon hinter der Bedingung nicht vergessen! Informatik-Repetitorium Tag 3 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 31 / 42

Ablaufdiagramm der do-while-schleife Syntax: do-while-schleife AnweisungenDavor ; do { RumpfAnweisungen ; while ( Bedingung ) ; AnweisungenDanach ; Ablaufdiagramm AnweisungenDavor RumpfAnweisungen true Bedingung false AnweisungenDanach Informatik-Repetitorium Tag 3 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 32 / 42

Beispiel: Sechser würfeln (I) Aufgabe Gesucht ist ein Programm, das solange würfelt, bis eine 6 fällt. Hinweis Zufallszahl zwischen 1 und 6 erzeugen: Überlegungen in jeder Iteration eine Zahl würfeln 1 + (int )(Math.random() 6) falls 6: Schleife abbrechen falls keine 6: Schleife erneut durchlaufen es muss mindestens einmal gewürfelt werden fußgesteuerte Schleife Informatik-Repetitorium Tag 3 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 33 / 42

Beispiel: Sechser würfeln (II) Aufgabe Gesucht ist ein Programm, das solange würfelt, bis eine 6 fällt. Mögliche Lösung i n t wuerfel ; do { wuerfel = 1 + ( i n t ) ( Math. random ( ) 6 ) ; System. out. p r i n t l n ( " es wurde eine " + wuerfel + " gewü r f e l t " ) ; while ( wuerfel!= 6 ) ; Informatik-Repetitorium Tag 3 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 34 / 42

Komplexe Schleifenbedingungen für alle drei Schleifen-Arten gilt: Bedingung kann komplexer, zusammengesetzter boolescher Ausdruck sein Aufgabe Programm, das solange würfelt, bis eine 6 fällt, aber maximal 3 Mal. Mögliche Lösung i n t wuerfel ; i n t anzahl = 0; do { wuerfel = 1 + ( i n t ) ( Math. random ( ) 6 ) ; System. out. p r i n t l n ( " es wurde eine " + wuerfel + " gewü r f e l t " ) ; anzahl = anzahl + 1; while ( ( wuerfel!= 6) && ( anzahl < 3 ) ) ; Informatik-Repetitorium Tag 3 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 35 / 42

Sprünge in Schleifen: break/continue break-anweisung ganze Schleife abbrechen Beim Erreichen einer break-anweisung wird die Ausführung der gesamten Schleife frühzeitig abgebrochen. continue-anweisung aktuellen Durchlauf abbrechen Beim Erreichen einer continue-anweisung wird die Ausführung des aktuellen Schleifendurchlaufs frühzeitig abgebrochen und (falls Schleifenbedingung erfüllt) mit dem nächsten Durchlauf weitergemacht. Bei einer for-schleife wird die Fortsetzung ausgeführt. Schlechter Stil... Die Verwendng von break und continue gilt als schlechter Stil, wenn dadurch der reale Ablauf der Schleife schwer nachvollziehbar wird. Wenn möglich, sollte auf die Verwendung von break und continue verzichtet werden. Informatik-Repetitorium Tag 3 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 36 / 42

Beispiel zu break Aufgabe Zahlen von 1 bis 30 bis zur ersten durch 5 oder 7 teilbaren Zahl ausgeben. Mögliche Lösung (geht auch schöner ohne break!) for ( i n t i = 1; i <= 30; ++ i ) { System. out. p r i n t ( i + " " ) ; i f ( ( i % 5 == 0) ( i % 7 == 0 ) ) { break ; Ausgabe 1 2 3 4 5 Informatik-Repetitorium Tag 3 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 37 / 42

Beispiel zu continue Aufgabe Zahlen von 1 bis 30 ausgeben, die nicht durch 5 oder 7 teilbar sind. Mögliche Lösung (geht auch schöner ohne continue!) for ( i n t i = 1; i <= 30; ++ i ) { i f ( ( i % 5 == 0) ( i % 7 == 0 ) ) { continue ; System. out. p r i n t ( i + " " ) ; Ausgabe 1 2 3 4 6 8 9 11 12 13 16 17 18 19 22 23 24 26 27 29 Informatik-Repetitorium Tag 3 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 38 / 42

Endlosschleifen für alle Schleifen-Arten gilt: Ausführung des Schleifenrumpfes ist abhängig von einer Bedingung Wiederholung des Schleifenrumpfes solange die Bedingung erfüllt ist Abbruch der Schleife sobald die Bedingung nicht mehr erfüllt ist wenn die Bedingung immer erfüllt ist, also nie false wird: Schleifenrumpf wird unendlich oft ausgeführt Endlosschleife Unerwünschtes Verhalten Bei einer Endlosschleife terminiert das Programm nicht. In den allermeisten Fällen ist dieses Verhalten unerwünscht! Informatik-Repetitorium Tag 3 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 39 / 42

Beispiele für Endlosschleifen Offensichtliche Endlosschleife while ( true ) { System. out. p r i n t l n ( " Hallo, Welt! " ) ; Weniger offensichtliche Endlosschleife i n t i = 1; while ( i <= 30) { i f ( ( i % 5 == 0) ( i % 7 == 0 ) ) { continue ; System. out. p r i n t ( i + " " ) ; i = i + 1; Informatik-Repetitorium Tag 3 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 40 / 42

Fragen? Fragen! (hilft auch den anderen)

Jetzt: Praktische Übungen mit eigenem Notebook: Nachname A R Hörsaal H5 Nachname S Z Hörsaal H6 bitte erstmal sitzen bleiben! ohne eigenes Notebook in den Rechnerräumen: Tutoren verteilen Gruppenzettel am Ausgang die Einteilung ist zunächst fest für das gesamte Repetitorium Informatik-Repetitorium Tag 3 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 42 / 42