Einführung in die Programmierung

Ähnliche Dokumente
Einführung in die Programmierung Wintersemester 2011/12

Einführung in die Programmierung

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

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

Kapitel 2/3: Darstellung von Information / Kontrollstrukturen. Inhalt. Zusammengesetzte Datentypen Wiederholungen (in Programmen)

C++ - Einführung in die Programmiersprache Schleifen

Java Anweisungen und Ablaufsteuerung

Kontrollstrukturen -- Schleifen und Wiederholungen

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

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

Einführung in die Programmierung Wintersemester 2008/09

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

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

FACHHOCHSCHULE AUGSBURG Hochschule für Technik, Wirtschaft und Gestaltung

Herzlich willkommen!

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

Kompaktkurs Einführung in die Programmierung. 4. Kontrollstrukturen

Nachklausur: Grundlagen der Informatik I, am 02. April 2008 Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.

Nachklausur: Grundlagen der Informatik I, am 02. April 2008 Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.

Grundlagen der Informatik 4. Kontrollstrukturen I

Einführung in die Programmierung II. 3. Kontrollstrukturen

Einstieg in die Informatik mit Java

4.4 Imperative Algorithmen Verzweigung und Iteration

Einstieg in die Informatik mit Java

3. Anweisungen und Kontrollstrukturen

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

Objektorientierte Programmierung

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

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

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

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

5. Elementare Befehle und Struktogramme

Abschnitt 5. Grundlagen der funktionalen & imperativen Programmierung

Programmiertechnik Kontrollstrukturen

Java Ablaufsteuerung (Beispiele)

Schleifen: Immer wieder dasselbe tun

Webbasierte Programmierung

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

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

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

Funktionales C++ zum Ersten

Einführung in die Programmierung Wintersemester 2008/09

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

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

Kontrollstrukturen Blöcke / Schleifen / Bedingungen

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

Grundlagen der Programmierung Teil1 Einheit III Okt. 2010

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

Angewandte Mathematik und Programmierung

In Abhängigkeit von der Erfüllung einer Bedingung (1 = wahr, 0 = falsch) wird eine (Verbund-)Anweisung ausgeführt.

Grundlagen der Informatik 5. Kontrollstrukturen II

Vom Problem zum Programm

1.8 Kontrollstrukturen 73. default : ziffer = 0; if (ziffer > 0) { cout << "Ziffer = " << ziffer; else { cout << "keine römische Ziffer!

Schleifen in C/C++/Java

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

Vorlesung Programmieren

Einführung in die Programmierung Wintersemester 2016/17

BKTM - Programmieren leicht gemacht.

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

Kontrollstrukturen und Logik

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

Vorlesung Programmieren

Einführung in die Programmierung

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Algorithmen & Programmierung. Steuerstrukturen im Detail Selektion und Iteration

Einführung in die Programmierung

Grundlagen der Programmierung Teil1 Einheit III Okt. 2009

Praxisorientierte Einführung in C++ Lektion: "Kontrollstrukturen"

Tag 3 Repetitorium Informatik (Java)

Unterlagen. CPP-Uebungen-08/

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

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

Annehmende Schleife do while

Einführung in die Programmierung für Physiker. Die Programmiersprache C Kontrollstrukturen

ModProg 15-16, Vorl. 5

Arbeitsblätter für die Lehrveranstaltung OOP JAVA 1

Kontrollstrukturen (1)

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

Tagesprogramm

2.5 Programmstrukturen Entscheidung / Alternative

Operatoren (1) Operatoren (2)

Einführung in die Programmierung

WS2018/ Oktober 2018

Bedingte Anweisungen

Arithmetik in der tcsh

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

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

if ( Logischer Operator ) { } else { Anweisungen false

7. Einführung in C++ Programmieren / Algorithmen und Datenstrukturen 1 Prof. Dr. Bernhard Humm FB Informatik, Hochschule Darmstadt

Schleifen in C/C++/Java

Transkript:

: Inhalt Einführung in die Programmierung Wintersemester 2017/18 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund Wiederholungen - while - do-while - for Auswahl (Verzweigungen) - if-then- - switch-case-default 2 Steuerung des Programmablaufes Bisher: Linearer Ablauf des Programms Die while-schleife while ( Bedingung erfüllt ) { Anweisungen ausführen Schleifenkopf Schleifenrumpf Oder bedingt etwas zusätzlich: if ( Bedingung ) Solange die Bedingung erfüllt ist, werden die Anweisungen zwischen den geschweiften Klammern { ausgeführt. Danach wird hinter dem Schleifenrumpf fortgefahren. Falls Rumpf nur eine Anweisung enthält, können Klammern { entfallen. 3 4

Die while-schleife Die while-schleife #include <iostream> using namespace std; int main() { int x = 0; while (x < 10) { cout << x << ; x = x + 1; cout << endl; return 0; 0 1 2 3 4 5 6 7 8 9 5 Achtung: Im Schleifenrumpf sollte eine Veränderung vorkommen, die den Wahrheitswert der Bedingung im Schleifenkopf beeinflusst! Ansonsten: Endlosschleife! int k = 0, x = 1; while (k < 10) { x = x + 1; Bedingung k < 10 wird niemals false int k = 0, x = 1; while (true) { x = x + 1; Bedingung immer true, niemals false int k = 0, x = 1; while (5) { x = x + 1; Bedingung interpretiert als Konstante true 6 Die while-schleife Ausgabe des druckbaren Standardzeichensatzes von C++ in 16er-Blöcken #include <iostream> using namespace std; int main() { unsigned char c = 32; while (c!= 0) { cout << c; c = c + 1; if (c % 16 == 0) cout << endl; return 0; Veränderung Die do/while-schleife Anweisungen ausführen while ( Bedingung erfüllt ); Schleifenrumpf Schleifenfuß Der Rechner tritt auf jeden Fall in den Schleifenrumpf ein, d.h. die Anweisungen zwischen den geschweiften Klammern { werden ausgeführt. Erst danach wird die Bedingung zum ersten Mal geprüft. Solange Bedingung erfüllt ist, wird der Schleifenrumpf ausgeführt. Danach wird hinter dem Schleifenfuß fortgefahren. Falls der Rumpf nur eine Anweisung enthält, können Klammern { entfallen. 7 8

Die do/while-schleife Die while-schleife als do/while-schleife #include <iostream> using namespace std; int main() { int x = 0; cout << x << ; x = x + 1; while (x < 10); cout << endl; return 0; Achtung! Weil wir Anfangswert von x und Bedingung kennen, wissen wir, dass der Rumpf mindestens einmal durchlaufen wird! Das ist nicht immer so! while (Bedingung erfüllt) { if (Bedingung erfüllt) { while (Bedingung erfüllt); 0 1 2 3 4 5 6 7 8 9 9 10 Die do/while-schleife als while-schleife while (Bedingung erfüllt); while (Bedingung erfüllt) { 11 Wann ist die do/while-schleife sinnvoll? Wenn wir zur Zeit der Programmerstellung wissen, dass der Schleifenrumpf mindestens einmal durchlaufen werfen muss! int n; cout << Anzahl Sterne (1-8): ; cin >> n; while (n < 1 n > 8); while (n--) cout << * ; Kurzschreibweise: Gibt Wert von n (hier an Bedingung), erniedrigt dann n um 1 Verlangt Eingabe einer Zahl so lange bis der Wert zwischen 1 und 8 ist 12

Exkurs: Kurzschreibweisen Exkurs: Kurzschreibweisen Exkurs: Kurzschreibweisen für Inkrement / Dekrement Exkurs: Kurzschreibweisen für Inkrement / Dekrement x = ++k; entspricht k = k + 1; x = k; x = k++; entspricht x = k; k = k + 1; x = --k; entspricht k = k 1; x = k; x = k--; entspricht x = k; k = k 1; while (--k) while (k--) entspricht entspricht k = k - 1; while (k) { k = k - 1; while (k) { k = k 1; k = k 1; (analog für ++k und k++) 13 14 Exkurs: Kurzschreibweisen Exkurs: Kurzschreibweisen für Zuweisungen k += 5; entspricht k = k + 5; k -= j-1; entspricht k = k (j-1); Die for - Schleife for ( Initialisierung; Bedingung; Veränderung ) { Schleifenkopf Schleifenrumpf k *= i+2; entspricht k = k * (i+2); k /= i*2-1; entspricht k = k / (i*2-1); k %= 16; entspricht k = k % 16; Bei der Initialisierung wird Startwert des Schleifenzählers festgelegt. Die Bedingung prüft, ob Endwert des Schleifenzählers noch nicht erreicht ist. Mit der Veränderung wird die Bedingung beeinflusst. k = i = j = 1; entspricht k = (i = (j = 1)); 15 16

Die for - Schleife Die for Schleife: Beispiele for ( Initialisierung; Bedingung; Veränderung ) { 1. Zuerst wird der Schleifenzähler initialisiert. 2. Falls Bedingung erfüllt: a) Führe Anweisungen aus. b) Führe Veränderung aus. c) Weiter mit 2. 3. Falls Bedingung nicht erfüllt: Fahre nach Schleifenrumpf fort. A) B) for (k = 0; k < 10; k++) cout << k << ; 0 1 2 3 4 5 6 7 8 9 for (k = 0; k < 10; k += 2) cout << k << ; 0 2 4 6 8 17 18 Die for Schleife: Beispiele Die for Schleife: C) D) E) float x; for (x = 0.0; x <= 3.0; x += 0.1) cout << x << : << x*x << endl; enum tagt { MO, DI, MI, DO, FR, SA, SO ; tagt tag; int at = 0; for (tag = MO; tag <= FR; tag=tagt(tag+1)) at++; cout << Arbeitstage: << at << endl; enum tagt { MO, DI, MI, DO, FR, SA, SO ; int tag, at = 0; for (tag = MO; tag <= FR; tag++) at++; cout << Arbeitstage: << at << endl; böser cast Initialisierung, Bedingung, Veränderung sind optional! int i = 9; for ( ; i >= 0; i--) cout << i << ; int i = 10; for ( ; --i >= 0; ) cout << i << ; int i = 10; for ( ; i > 0; ) { i--; cout << i << ; int i = 10; for ( ; ; ) cout << i << ; identische Ziffern 9 bis 0 abwärts Endlos- schleife! 19 20

Die break Anweisung (Teil 1) Alternative Beendigungen von Schleifen: for (i = 0; ; ) { cout << i << ; if (i > 9) break; i++; Die break Anweisung unterbricht die Schleife sofort! Es wird direkt hinter dem Schleifenrumpf fortgefahren! Das funktioniert auch in Schleifenrümpfen von while und do/while! Die break Anweisung (Teil 1) Alternative Beendigungen von Schleifen: for (i = 0; i < 10; i++) { cout << i << : ; for (j = 0; j < 10; j++) { if (i + j >= 5) break; cout << j << ; cout << endl; Die break Anweisung unterbricht nur die aktuelle Schleife sofort! 21 22 Die break Anweisung (Teil 1) Die break Anweisung unterbricht nur die aktuelle Schleife sofort! Die berüchtigte goto Anweisung: goto Bezeichner; Alternative Beendigungen von Schleifen: for (i = 0; ; ) { cout << i << ; if (i > 9) goto marke; i++; marke: cout << Schleife beendet! ; Bei der goto Anweisung wird sofort zur angegeben Markierung gesprungen! Es wird direkt bei der Markierung fortgefahren! Das funktioniert auch in Schleifenrümpfen von while und do/while! Die Verwendung von goto ist niemals notwendig! Unbedingt vermeiden! 23 24

Die continue Anweisung: Erzwingt einen sofortigen Sprung an das Schleifenende! Nur der aktuelle Schleifendurchlauf wird beendet, nicht die ganze Schleife (wie bei break)! for (i = 0; i < 10; i++) { if (Bedingung) continue; Das funktioniert auch in Schleifenrümpfen von while und do/while! 25 Die continue Anweisung: Ermöglicht manchmal besser lesbaren / nachvollziehbaren Programmcode. Ist niemals wirklich notwendig. for (i = 0; i < 10; i++) { if (Bedingung) continue; for (i = 0; i < 10; i++) { if (!Bedingung) 26 Die for Schleife als while Schleife: for ( Initialisierung; Bedingung; Veränderung ) { Initialisierung; while ( Bedingung ) { Veränderung; Die while Schleife als for Schleife: while ( Bedingung ) { for ( ; Bedingung; ) { 27 28

Einseitige Auswahl: if Zweiseitige Auswahl: if if (Bedingung) if (Bedingung) { nur eine Anweisung ausführen einen ganzen Block von Anweisungen ausführen Wenn die Bedingung erfüllt ist, dann wird die Anweisung oder der Block von Anweisungen ausgeführt, sonst eben nicht! 29 if (Bedingung) Anweisung1; Anweisung2; if (Bedingung) { Anweisungsblock1; { Anweisungsblock2; wenn Bedingung erfüllt, dann Anweisung1 ausführen, ansonsten Anweisung2 ausführen! Achtung! Hier kein Semikolon hinter der Klammer erlaubt! 30 Zweiseitige Auswahl: if Beispiel: if (kunde.umsatz >= 100000) { kunde.bonus = 5000; kunde.skonto = 0.03; kunde.status = GuterKunde; { kunde.bonus = 2000; kunde.skonto = 0.02; kunde.status = NormalerKunde; enum StatusT = { GuterKunde, NormalerKunde, SchlechterKunde ; struct KundeT { ; int umsatz; int bonus; float skonto; statust status; Mehrfache Auswahl: if Schachtelung (nesting) if ( Bedingung1 ) Anweisung1; if ( Bedingung2 ) Anweisung2; if ( Bedingung3 ) Anweisung3; Anweisung4; Achtung! Festlegung: Das letzte bezieht sich auf das letzte if! Erfordert Logik einen anderen Bezug, dann Klammern { setzen! 31 32

Mehrfache Auswahl: if Schachtelung (nesting) Mehrfache Auswahl: if Schachtelung (nesting) if ( Bedingung0 ) if ( Bedingung1 ) Anweisung1; Anweisung2; bezieht sich auf Bedingung1 if ( a > b ) cout << a > b ; if ( a < b ) cout << a < b ; if ( a == b) cout << a == b ; ohne Schachtelung: immer 3 Vergleiche! if ( Bedingung0 ) { if ( Bedingung1 ) Anweisung1; Anweisung2; äquivalent, aber ohne Klammern: if (!Bedingung0 ) Anweisung2; if ( Bedingung1) Anweisung1; bezieht sich auf Bedingung0 B0 B1 F F A2 F T A2 T F - T T A1 F: false T: true 33 if ( a > b ) cout << a > b ; if ( a < b ) cout << a < b ; cout << a == b ; Effizienzsteigerung: Schnelleres Programm! mit Schachtelung: 1 oder 2 Vergleiche! 34 Mehrfache Auswahl: switch switch (Ausdruck) { case c1: Anweisungen_1; break; case c2: Anweisungen_2; break; case cn: Anweisungen_n; break; default: Anweisungen; Der Ausdruck muss einen abzählbaren Datentyp ergeben: char, short, int, long, enum, bool (false < true) Konstanten c1 bis cn müssen paarweise verschieden sein! Ist Ausdruck == Wert einer Konstanten, dann werden Anweisungen bis break ausgeführt; sonst Anweisungen von default. 35 Mehrfache Auswahl: switch ohne default switch (Ausdruck) { case c1: Anweisungen_1; break; case c2: Anweisungen_2; break; case cn: Anweisungen_n; break; default Zweig kann entfallen besser: default mit leerer Anweisung! noch besser: default mit leerer Anweisung und Kommentar! Weglassen nur selten sinnvoll, z.b. bei enum (alle Werte werden unterschieden). Oder bei bool (nur 2 Werte), wo if-anweisungen einfacher wären. 36

Mehrfache Auswahl: switch ohne default switch (Ausdruck) { case c1: Anweisungen_1; break; case c2: Anweisungen_2; break; case cn: Anweisungen_n; break; default: ; // leere Anweisung Exkurs: Kommentare Ein Kommentar im Programmtext dient der Kommentierung / Erklärung / Beschreibung des Programmcodes wird vom Compiler ignoriert Nur in C++: int a = 1; // Kommentar ignoriert wird ab // bis zum Ende der Zeile a = a + 3; leere Anweisung Kommentar In C und C++: int a = 1; /* Kommentar: blablabla blabla */ ignoriert werden alle Zeichen zwischen /* und */, auch über mehrere Zeilen! a = a + 3; 37 38 Mehrfache Auswahl: switch mit fehlenden break s switch (Ausdruck) { case c1: case c2: Anweisungen_2; break; case c3: Anweisungen_3; case c4: Anweisungen_4; break; case c5: Anweisungen_5; break; default: Anweisungen; break führt zum Verlassen der switch Anweisung! Fehlt am Ende eines case-zweiges ein break, dann werden Anweisungen der nachfolgenden case-zweige ausgeführt bis auf ein break gestossen wird. 39 Mehrfache Auswahl: switch Beispiel: Abfrage, ob weiter gemacht werden soll; Eingabe nur j, J, n oder N char c; // einzulesendes Zeichen bool OK; // true, falls Eingabe in {j,j,n,n bool weiter; // true, falls weiter gemacht wird cin >> c; switch (c) { case j : case J : OK = weiter = true; break; case n : case N : OK = true; weiter = false; break; default : OK = false; while (!OK); 40