Informationsverarbeitung

Ähnliche Dokumente
Informationsverarbeitung im Bauwesen

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

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

Angewandte Mathematik und Programmierung

Algorithmen zur Datenanalyse in C++

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

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

Einführung in die Programmierung Wintersemester 2011/12

FACHHOCHSCHULE AUGSBURG Hochschule für Technik, Wirtschaft und Gestaltung

Grundlagen der Informatik 4. Kontrollstrukturen I

5. Elementare Befehle und Struktogramme

Einstieg in die Informatik mit Java

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

Programmieren in C/C++ und MATLAB

Intensivübung zu Algorithmen und Datenstrukturen

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

Modellierung und Programmierung 1

Einführung in die Programmierung

Einstieg in die Informatik mit Java

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

Sprachkonstrukte. Einführung in Java. Folie 1 von Mai Ivo Kronenberg

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

Javakurs für Anfänger

Kontrollstrukturen -- Schleifen und Wiederholungen

if ( Logischer Operator ) { } else { Anweisungen false

Operatoren (1) Operatoren (2)

Unterlagen. CPP-Uebungen-08/

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

Grundlagen der Programmierung

Javakurs für Anfänger

4.2 Programmiersprache C

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.

Java Anweisungen und Ablaufsteuerung

Objektorientierte Programmierung

Einführung in die Programmierung II. 3. Kontrollstrukturen

Informationsverarbeitung im Bauwesen

Funktionales C++ zum Ersten

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

Vorkurs Informatik WiSe 17/18

3. Anweisungen und Kontrollstrukturen

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

float: Fließkommazahl nach IEEE 754 Standard mit 32 bit

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

Kompaktkurs Einführung in die Programmierung. 4. Kontrollstrukturen

C++ - Einführung in die Programmiersprache Schleifen

1 Bedingte Anweisungen. 2 Vergleiche und logische Operatoren. 3 Fallunterscheidungen. 4 Zeichen und Zeichenketten. 5 Schleifen.

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

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

Brückenkurs Programmieren

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

Vorkurs Informatik WiSe 16/17

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

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

Programmieren 1 C Überblick

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

Tag 3 Repetitorium Informatik (Java)

Boolean Wertemenge: Wahrheitswerte {FALSE,TRUE}, auch {0,1} Deklaration:

Annehmende Schleife do while

Grundlagen der Informatik 5. Kontrollstrukturen II

Tag 3 Repetitorium Informatik (Java)

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

Kontrollstrukturen (1)

Algorithmen & Programmierung. Ausdrücke & Operatoren (1)

3. Operatoren und Ausdrücke

Ausdrücke (1) Grundlegende Eigenschaften

Die Programmiersprache C Eine Einführung

3. Operatoren und Ausdrücke

Dr. Monika Meiler. Inhalt

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

Programmiertechnik Kontrollstrukturen

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

Webbasierte Programmierung

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

Java Ablaufsteuerung (Beispiele)

Transkript:

1/23 Informationsverarbeitung Einführung in das Programmieren mit C++ Markus Uhlmann Institut für Hydromechanik Karlsruher Institut für Technologie www.ifh.kit.edu WS 2011/2012 Vorlesung 4 (alle Quelldateien im Paket)

2/23 4. VORLESUNG Kontrollstrukturen Advice: Avoid complicated expressions. B. Stroustrup

3/23 Fragen, die in dieser Vorlesung diskutiert werden Auswahlanweisungen Wie kann die Abfolge eines Programmes geändert werden? Mit welchen Operatoren können komplexe Bedingungen formuliert werden? Wie können bestimmte Programmteile wiederholt ausgeführt werden?

Allgemeines If-Elseif-Else Switch-Case 4/23 Auswahlanweisungen welche Anweisung ist für meinen Fall geeignet? eine Auswahlmöglichkeit zwei Auswahlmöglichkeiten mehr als zwei Auswahlmöglichkeiten einseitige Auswahl zweiseitige Auswahl mehrstufige Auswahl mehrseitige Auswahl if if/else if/else if... switch/case

Allgemeines If-Elseif-Else Switch-Case 5/23 if-anweisungen Syntax: if ( <Ausdruck> ) <Anweisung> Bsp: if ( x == 0 ) cout << "Wert x=0" ; die Bedingung <Ausdruck> wird ausgewertet falls Ergebnis true (wahr): <Anweisung> wird ausgeführt sonst (d.h. Ergebnis false falsch): <Anweisung> wird übersprungen

Allgemeines If-Elseif-Else Switch-Case 6/23 Gruppierung längerer Programmteile längere Programmteile können durch geschweifte Klammern gruppiert werden: { } (ohne Semikolon!) Gruppierung bewirkt Zusammenfassung zu einer Anweisung ermöglicht Auswahl/Überspringen mehrerer Einzelanweisungen Bsp: if ( x >= 0.0 ) { log_x = log( x ); wurzel_x = sqrt( x ); }

Allgemeines If-Elseif-Else Switch-Case Vergleichsoperatoren Vergleich von zwei arithmetischen Operanden Ausdruck x > y x < y x >= y x <= y x == y x!= y Relation x größer als y x kleiner als y x größer gleich y x kleiner gleich y x gleich y x ungleich y Verwechslungsgefahr zwischen == und Zuweisung: (x==y) vs. (x=y) (Quelltext 4.1) Vorsicht bei Prüfung der Gleichheit von Fliesskommazahlen (f==1.0) (Quelltext 4.2) 7/23

Allgemeines If-Elseif-Else Switch-Case 8/23 Logische Verknüpfungen Anwendung auf logische Operanden Ausdruck Relation x && y logisches und x y logisches oder!x Negation Verknüpfung liefert wiederum logischen Ausdruck erspart Verschachtelung von if-anweisungen (Quelltext 4.3) Bsp: if ( (alter > 2) && (alter < 12)) std::cout << "Kindertarif";

Allgemeines If-Elseif-Else Switch-Case 9/23 Mehr zu Bedingungen Arten von Bedingungen (<Ausdruck>) Vergleichsausdrücke (s. oben) Bsp: ( x>y ) implizite Bedingungen Bsp: ( x ) jeglicher Ausdruck, der sich in bool umwandeln lässt Ausdruck mit arithm. Typ: 0 false, sonst true Bsp: (Quelltext 4.4) int x, a = 3; if ( x = a ) //Nebeneffekt: Zuweisung an x std::cout << "a ungleich Null";

Allgemeines If-Elseif-Else Switch-Case 10/23 Mehr zur Priorität der Operatoren Komplexe Ausdrücke mit mehreren Operatoren C++ definiert strikte Regeln zur Priorität der Operatoren (sh. Anhang) (Quelltext 4.5) Erlernen aller Regeln oft nicht notwendig Praktische Empfehlung: Priorität Operator 1, /, % Multiplikation, Division, Restwert 2 +, Addition, Subtraktion Benutzung von Klammern für alle anderen Operatoren bessere Lesbarkeit

Allgemeines If-Elseif-Else Switch-Case 11/23 if-else-anweisungen Syntax: if ( <Ausdruck> ) <Anweisung1> else <Anweisung2> Zweiseitige Auswahl Bsp: if ( x == 0 ) y = 0.0; else y = 1.0 / x ; <Ausdruck> wird ausgewertet falls Ergebnis true : <Anweisung1> wird ausgeführt sonst (d.h. Ergebnis false ): <Anweisung2> wird ausgeführt es wird immer genau eine der Anweisungen ausgeführt

Allgemeines If-Elseif-Else Switch-Case 12/23 Verschachteltes if-else Bsp: 1 if (i>j) 2 if (i<0) 3 m=-i; 4 else //"if" zeile 2 5 m=i; 6 else //"if" zeile 1 7 m=j; else bezieht sich immer auf vorhergehendes if!

Allgemeines If-Elseif-Else Switch-Case 13/23 Verschachteltes if-else (2) Bsp1: 1 if (i>j) 2 if (i<0) 3 m=-i; 4 else //"if" zeile 2! 5 m=j; Bsp2: 1 if (i>j) 2 { 3 if (i<0) 4 m=-i; 5 } 6 else //"if" zeile 1! 7 m=j; Bsp1: else bezieht sich auf zweites if (falsch eingerückt!) Bsp2: Setzen von Gruppierung durch { } ändert Zuordnung

Allgemeines If-Elseif-Else Switch-Case 14/23 if-else if-anweisungen Syntax: if ( <Ausdruck1> ) <Anweisung1> else if ( <Ausdruck2> ) <Anweisung2>... Bsp: if ( x == 0 ) y = 0.0; else if ( x > 0.0) y = 1.0 / x ; else y = 1.0 / (-x) ; Mehrstufige Auswahl (Quelltext 4.6) Abfrage verschiedener Bedingungen für jede Anweisung Abarbeitung in Reihenfolge, bis zuerst wahr abschliessendes else ist optional erspart tief verschachtelte if else Anweisungen

Allgemeines If-Elseif-Else Switch-Case Switch-Case Anweisung Syntax: switch (<Ausdruck>) { case <Konstante1>: <Anweisung1> break; case <Konstante2>: <Anweisung2> break;... default: <AnweisungN> } Bsp: char zeichen; switch (zeichen) { case a : cout << "Buchstabe a."; break; case b : cout << "Buchstabe b."; break;... } Mehrseitige Auswahl (Quelltext 4.7) Abfrage einer Bedingungen, mit mehreren Alternativen Abarbeitung der Anweisungen nach Marke, bis break <Ausdruck> muss in Ganzzahl umwandelbar sein 15/23

While- For- Beispiel: π 16/23 Iterative Operationen: Wozu werden gebraucht? viele Aufgaben erfordern wiederholte Bearbeitung von Daten Iterationen sind eine Lösung (alternativ: Rekursion) Iterationen werden i.d.r. durch realisiert Bsp: Addieren einer Reihe von Zahlenwerten

While- For- Beispiel: π 17/23 While- Syntax: while ( <Ausdruck> ) <Anweisung> Bsp: (Quelltext 4.8) 1 int n = 10, i = 1, fak = 1; 2 while ( i <= n ) 3 {//berechnet Fakultaet von n 4 fak = fak * i; 5 ++i; 6 } solange <Ausdruck> true ergibt: <Anweisung> wird wiederholt ausgeführt falls anfänglich <Ausdruck> false : keine Ausführung kopfgesteuerte Schleife (Quelltext 4.9) Vorsicht Endlossschleifen (Bedingung immer wahr)

While- For- Beispiel: π 18/23 Do While- Syntax: do <Anweisung> while ( <Ausdruck> ); Bsp: (Quelltext 4.10) 1 int n = 10, i = 1, fak = 1; 2 do 3 {//berechnet Fakultaet von n 4 fak = fak * i; 5 ++i; 6 } 7 while ( i < n ); Prüfung der Bedingung nach Durchlauf analog zu while Schleife, außer: <Anweisung> wird immer mindestens einmal ausgeführt fussgesteuerte Schleife

While- For- Beispiel: π 19/23 For- Syntax: for (<Ausdruck1> ; <Ausdruck2> ; <Ausdruck3>) <Anweisung> Äquivalente While-Schleife: <Ausdruck1>; while ( <Ausdruck2> ){ <Anweisung> <Ausdruck3>; } Initialisierung: Abbruchkriterium: Inkrementierung: <Ausdruck1> <Ausdruck2> <Ausdruck3> praktische Abkürzung für häufige form (Quelltext 4.11) insbes. Verwendung bei vorbestimmter Wiederholungsanzahl zählergesteuerte

While- For- Beispiel: π 20/23 Beispiel für for- Bsp. mit for: (Quelltext 4.12) Bsp. mit while: (sh. oben) 1 int n = 10, fak = 1; 2 for ( int i=1; i <= n; i++ ) 3 {//berechnet fakultaet von n 4 fak = fak * i; 5 } 1 int n = 10, i = 1, fak = 1; 2 while ( i <= n ) 3 {//berechnet fakultaet von n 4 fak = fak * i; 5 ++i; 6 } mehrere Ausdrücke anstelle eines Ausdruckes: Kommaoperator Bsp: (i = 1, fak = 1) (Quelltext 4.13)

While- For- Beispiel: π 21/23 Beispielprogramm: numerische Berechnung von π 1 π = 0 4 N 1 + x 2 dx 4 1 + x 2 i=1 i }{{} g(x i ) x mit: x = 1 N, x i = (i 1 2 ) x Pseudocode Kommentar g(x) Festlegen des Parameters N Variable pi zu Null Initialisieren Berechnen von x Schleife mit Zähler i: 1 i N g(x) x Berechnen von xi Berechnen von g(xi ) Addieren von g(xi ) x zu pi Ausgabe von pi x x

While- For- Beispiel: π 22/23 Beispielprogramm: numerische Berechnung von π 1 #include <iostream> 2 #include <cmath> 3 using namespace std; 4 5 const int N = 1000;//Anzahl der Stuetzstellen: 6 // hoeherer Wert => hoehere Genauigkeit 7 int main() 8 { 9 double dx, xi, g_xi, pi_approx = 0.0; 10 double pi_ref = M_PI; //Referenzwert, definiert in "cmath" 11 double lgrenze = 0.0, rgrenze = 1.0; //Intervallgrenzen 12 13 dx=(rgrenze-lgrenze)/n; 14 for(int i=1;i<=n;i++) 15 { 16 xi=lgrenze+(i - 0.5)*dx; 17 g_xi=4.0/(1.0+xi*xi); 18 pi_approx = pi_approx + g_xi * dx; //hier Operator += moeglich 19 } 20 cout.precision(15); //Einstellung von 15 Nachkommastellen Ausgabe 21 cout << "pi (approx) = " << pi_approx << endl; 22 cout << "pi (ref) = " << pi_ref << endl; 23 cout.scientific; // Umstellen auf Ausgabe wissenschaftliche Notation 24 cout << "rel. Fehler = " << fabs(pi_approx-pi_ref)/pi_ref << endl; 25 return 0; 26 } (Quelltext 4.14)

23/23 Sprung zu einer markierten Programmzeile: goto Beendigung einer Funktion, Rückkehr: return Beendigung einer for, while, do, switch Anweisung: break Fortführung nächster durchlauf: continue (Quelltext 4.15) Sprünge führen zu unleserlichem Code! Selten notwendig.

1/3 Zusammenfassung Anhang Zusammenfassung Literatur Operatorpriorität Kontrollstrukturen in C++ Auswahlanweisungen: If Else If Else Switch Case Vergleichsoperatoren logische Operatoren : While/Do While For

2/3 Anhang Zusammenfassung Literatur Operatorpriorität Weiterführende Literatur S. Prata, C++ Primer Plus, Sams, 2005 S. Oalline, Practical C++ Programming, O Reilly, 2003 J. Liberty and B. Jones, Teach yourself C++ in 21 days, Sams publishing, 2005 R. Lischner, C++ in a Nutshell, O Reilly, 2003 Handbücher erhältlich am Rechenzentrum: (Weblink) RRZN, Die Programmiersprache C, 17. Auflage, 2008 RRZN, C++ für C Programmierer, 13. Auflage, 2005 Online Dokumentation zum C++ Standard (Weblink) (freie) Microsoft Software für Studenten am KIT: (Weblink)

3/3 Anhang Zusammenfassung Literatur Operatorpriorität Priorität der bisher behandelten Operatoren Priorität Operator Assoziation 1 ++, -- Inkrement/Dekrement (postfix) L R 2 ++, -- Inkrement/Dekrement (prefix) R L +, - Vorzeichen R L! logische Verneinung R L 3 *, /, % Multiplikation, Division, Restwert L R 4 +, - Addition, Subtraktion L R 5 <, <=, >, >= Vergleichsoperatoren (a) L R 6 ==,!= Vergleichsoperatoren (b) L R 7 && logisches und L R 8 logisches oder L R 9 = Zuweisung R L Assoziation: Richtung der Gruppierung bei Mehrfachop. Bsp1: x/y/z äquivalent (x/y)/z Bsp2: x=y=z äquivalent x=(y=z) ( links-nach-rechts ) ( rechts-nach-links )