Verzweigungen. Prof. Dr. Markus Gross Informatik I für D-MAVT (FS 2014)

Ähnliche Dokumente
Modellierung und Programmierung 1

Grundlagen der Informatik 4. Kontrollstrukturen I

Prof. Dr. Markus Gross Informatik I für D-ITET (WS 03/04)

ModProg 15-16, Vorl. 5

Javakurs für Anfänger

5. Elementare Befehle und Struktogramme

Einstieg in die Informatik mit Java

C- Kurs 03 Ausdrücke und Operatoren

Einstieg in die Informatik mit Java

Unterlagen. CPP-Uebungen-08/

Einführung in die Programmierung Wintersemester 2011/12

Schleifen in C/C++/Java

Vom Problem zum Programm

Funktionales C++ zum Ersten

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

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

Gestrige Themen. Benutzung des Compilers und Editors. Variablen. Ein- und Ausgabe mit cin, cout (C++) Verzweigungen. Schleifen

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

Einführung in den Einsatz von Objekt-Orientierung mit C++ I

FACHHOCHSCHULE AUGSBURG Hochschule für Technik, Wirtschaft und Gestaltung

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

Informationsverarbeitung

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

Grundlagen der Informatik 5. Kontrollstrukturen II

Ganze Zahlen. Die Typen int, unsigned int; Auswertung arithmetischer Ausdrücke, arithmetische Operatoren

3. Grundanweisungen in Java

Kontrollstrukturen. Bedingter Ablauf: if. Bedingter Ablauf: if-else

Programmiertechnik Kontrollstrukturen

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

Schleifen in C/C++/Java

Programmierkurs C++ Lösungen zum Übungsblatt 3. Nils Eissfeldt und Jürgen Gräfe. 2. November Aufgabe 5

Programmieren in C/C++ und MATLAB

Algorithmen zur Datenanalyse in C++

Java: Syntax-Grundlagen III

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

Abgeleitete Datentypen

Informatik I - Übung 2 Programmieren in Eclipse

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

Exercise 4. Logical Operators and Branching. Daniel Bogado Duffner - n.ethz.ch/~bodaniel. Informatik I für D-MAVT

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

Grundlagen der Informatik 2. Operatoren

Einstieg in die Informatik mit Java

Sozialwissenschaftliche Fakultät der Universität Göttingen. Sommersemester 2009, Statistik mit SPSS

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

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

3 Grundstrukturen eines C++ Programms anhand eines Beispiels

Grundlagen der Informatik 2. Typen

Java I Vorlesung Imperatives Programmieren

Vorlesung 6: Operatoren, Logische Ausdrücke

Vorlesung Programmieren

1 Aufgaben 1.1 Objektorientiert: ("extended-hamster") Sammel-Hamster

Einstieg in die Informatik mit Java

Anweisungen zur Ablaufsteuerung

Intensivübung zu Algorithmen und Datenstrukturen

JAVA-Datentypen und deren Wertebereich

Sozialwissenschaftliche Fakultät der Universität Göttingen. Sommersemester Statistik mit SPSS

Dr. Monika Meiler. Inhalt

Grundlagen der Programmiersprache C für Studierende der Naturwissenschaften

Operatoren (1) Operatoren (2)

Klausur Informatik I WS 2006/2007

Vorlesung Programmieren

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

Auswahlen (Selektionen)

Kontrollstrukturen Blöcke / Schleifen / Bedingungen

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

Java Einführung Operatoren Kapitel 2 und 3

Themen. Formatierte und unformatierte Eingabe Bedingungsoperator Namespaces Kommandozeilenargumente

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

Einheit Datentypen in der Programmiersprache C Schwerpunkt: Elementare (arithmetische) Datentypen

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

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

Operatoren und Ausdrücke

3. Wahrheitswerte. Boolesche Funktionen; der Typ bool; logische und relationale Operatoren; Kurzschlussauswertung; Assertions und Konstanten

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

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

Informatik 1 ( ) D-MAVT F2010. Schleifen, Felder. Yves Brise Übungsstunde 5

Einstieg in die Informatik mit Java

1 Aufgaben 1.1 Umgebungsvariable setzen: CLASSPATH

PIC16 Programmierung in HITECH-C

Grundlagen der Programmierung in C Basics

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

Programmieren in C / C++ Grundlagen C 2

Übungen zur Vorlesung Wissenschaftliches Rechnen I. Grundelemente von Java. Eine Anweisung. wird mit dem Wertzuweisungsoperator = geschrieben.

Einführung in die C++ Programmierung für Ingenieure

Kontrollstrukturen -- Schleifen und Wiederholungen

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 1 - Variablen und Kontrollstrukturen

Programmierkurs Python I

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

C-Programmierung: Ausdrücke und Operatoren#Division.2F

4.4 Imperative Algorithmen Prozeduren

2. Ganze Zahlen int unsigned int

Arbeitsblätter für die Lehrveranstaltung OOP JAVA 1

Grundlagen der Programmierung

Ganze Zahlen. Die Typen int, unsigned int; Auswertung arithmetischer Ausdrücke, arithmetische Operatoren

5. Abgeleitete Datentypen

Klausur Informatik WS 2012/13

2. Ganze Zahlen. Auswertung arithmetischer Ausdrücke, Assoziativität und Präzedenz, arithmetische Operatoren, Wertebereich der Typen int, unsigned int

Transkript:

Verzweigungen Prof. Dr. Markus Gross Informatik I für D-MAVT (FS 2014) Ausdruck und Anweisungen Verkürzte Operatoren, Vergleichsoperatoren Die if Anweisung Die if else Anweisung Die switch Anweisung Logische Operatoren &&,, und! Der? : Operator

Ausdruck und Anweisung Jede bewertbare Kombination aus Variablen, Konstanten und Operatoren ist ein Ausdruck Somit hat jeder Ausdruck einen Wert 24 + 25 x = 20 Ebenso komplexere Ausdrücke maids = (cooks = 4) + 3; x = y = z; Zuweisung ist links nach rechts assoziativ Vergleichsoperatoren werden boolean evaluiert Anweisung durch abschliessendes ; 2

Verkürzte Operatoren Besonderheit in C/C++ sind verkürzte Operatoren ++, - -, +=, *=,... Kommen als prefix-version und als postfix-version vor x++; // postfix ++x; // prefix Unterschied im Zeitpunkt der Anwendung Bei postfix-version erfolgt Anwendung NACH Auswertung des Ausdrucks int x = y++; // int x = y; y = y + 1; Bei prefix-version erfolgt Anwendung VOR Auswertung des Ausdrucks int x = ++y; // y = y + 1; int x = y;! 3

Verkürzte Operatoren Verkürzte Zuweisungs-Operatoren ebenso möglich x += 2; // x = x + 2; x -= 2; // x = x - 2; x *= 2; // x = x * 2; x /= 2; // x = x / 2; x %= 2; // x = x % 2; Sehr oft verwendet 4

Vergleichsoperatoren Vergleichsoperatoren (relational operators) dienen zum Vergleich zweier Grössen Evaluieren zum Typ bool (true, false) Typen von Vergleichsoperatoren < // less <= // less than or equal to == // equal to > // greater >= // greater than or equal to!= // not equal to Priorität geringer als bei arithmetischen Opertoren x + 3 > y - 2 // (x + 3) > (y - 2) Zuweisung = und Vergleich == oft verwechselt 5

Kontrollanweisungen Eine Verzweigung ermöglicht einen Sprung im Programmfluss (Branching) Unbedingte Verzweigungen (goto, longjmp) Bedingte Verzweigungen (Conditional branches) In C++ gibt es verschiedene Verzweigungen if if else switch switch ersetzt Ketten von if else Konstruktionen Werden in Verbindung mit logischen Operatoren verwendet 6

if-anweisung Übung4 Kommt in zwei verschiedenen Formen: if if else Syntax recht einfach: if(testbedingung) Anweisung; Wenn Testbedingung wahr ist, wird die Anweisung ausgeführt Wenn Testbedingung falsch ist, wird die Anweisung übersprungen Die Konstruktion zählt als EINE Anweisung 7

Bild if-anweisung Anweisung1; if(testbedingung) Anweisung2; Anweisung3; Anweisung1 if-anweisung Testbedingung true Anweisung2 false Anweisung3 8

Beispiel_1: if-anweisung // if.cpp -- using the if statement #include <iostream> using namespace std; int main() char ch; unsigned int spaces = 0; unsigned int total = 0; cin.get(ch); if(ch == ' ') // check if ch is a space spaces++; total++; // done every time // Repeat the same 2 times. cin.get(ch); if(ch == ' ') spaces++; total++; If-Anweisung wird geg. übersprungen wird immer ausgeführt cin.get(ch); if(ch == ' ') spaces++; total++; cout << spaces << " spaces, " << total; cout << " characters total in sentence\n"; return 0; 9

if else-anweisung if-anweisung kontrolliert die Ausführung einer einzelnen Anweisung oder eines Blocks if else-anweisung ermöglicht die Ausführung einer von zwei Anweisungen Syntax ebenfalls recht einfach: if (Testbedingung) else Anweisung 1; Anweisung 2; Wenn Testbedingung wahr ist, wird Anweisung 1 ausgeführt, sonst Anweisung 2 10

Bild if else-anweisung AnweisungA; if(testbedingung) Anweisung1; else Anweisung2; AnweisungB; false AnweisungA Testbedingung if else-anweisung true Anweisung2 Anweisung1 AnweisungB 11

Beispiel_2: if else Anweisung // ifelse.cpp -- using the if else statement #include <iostream> using namespace std; int main() char ch; cout << "Type, and I shall repeat.\n"; cin.get(ch); if (ch == '\n') else cout << ch; cout << ++ch; // done if newline // done otherwise Anweisung 1 Anweisung 2 // Repeat cin.get(ch); if (ch == '\n') cout << ch; else cout << ++ch; // done if newline // done otherwise wird immer ausgeführt // try ch + 1 instead of ++ch for interesting effect cout << "\nplease excuse the slight confusion.\n"; return 0; 12

Formatierung Block nach if und Block nach else soll immer in geschweiften Klammern folgen Kann sonst zu schlimmen Laufzeitfehlern führen! Gibt bei mehreren Anweisungen zwischen if und else ohne ein Syntaxfehler Einrückungen (tabs) sind sehr sinnvoll if (a == b) i++; k=j; else l=j; e=f; 13

if else if else -Sequenzen if else-anweisungen können beliebig ineinander verschachtelt werden Beispiel: if (ch == 'A') a_grade++; // Alternative 1 else if (ch == 'B') else Übung4 b_grade++; // Alternative 2 soso++; // Alternative 3 Gesamte Konstruktion zählt als eine einzige Anweisung Alternative: switch-anweisung 14

switch-anweisung switch-anweisung ist eine Alternative zu if else- Sequenzen Ermöglicht elegant eine komplexe Flusskontrolle Syntax wie folgt: switch(integer-ausdruck) case label_1 : Anweisung(en); case label_2 : Anweisung(en); case label_3 : Anweisung(en); default : Anweisung(en); Das Programm springt zur Zeile, die ein entsprechendes Integer-Label enthält 15

switch-anweisung Nach Sprung wird Programm in nächster Zeile weitergeführt Beim nächsten Label wird NICHT aus dem switch gesprungen Dazu muss eine explizite break-anweisung erfolgen break springt zur Anweisung nach dem switch Wenn keiner der Fälle eintritt, springt switch zum Label default Ist kein default-label vorhanden, wird zur ersten Anweisung nach dem switch gesprungen Auch char Labels sind möglich Characters werden intern als Integers verwaltet switch kann keine Wertebereiche behandeln 16

Beispiel_5: Eingabemenü // switch.cpp -- use the switch statement // Programm-Fragment #include <iostream> using namespace std; void showmenu(); // function prototypes void report(); void comfort(); int main() showmenu(); int choice; cin >> choice; switch(choice) case 1: case 2: case 3: case 4: cout << "\a\n"; break; report(); break; cout << "The boss was in all day.\n"; break; comfort(); break; default: cout << "That's not a choice.\n"; Eingabe Abfrage mit switch return 0; break; 17

Arithmetische Operatoren Arithmetische Operatoren dienen zur Manipulation von Variablen (oder ganzen Objekten) Zusammen mit den Operanden bilden sie einen Ausdruck (expression) C++ kennt 5 Basisoperatoren für arithmetische Operationen: +, -, *, /, % / Operator liefert bei Integer-Typen nur den ganzzahligen Anteil, also 17 / 3 = 5 %-Operator errechnet den Modulus, also den Rest z.b. 17 % 3 = 2 % ist nur auf Integer-Typen anwendbar 18

Prioritäten und Assoziativität Wenn mehrere Operatoren auf den gleichen Operanden angewandt werden, kann es Konflikte geben int flies = 3 + 4 * 5; // 35 oder 23? Prioritätsregeln lösen diese Konflikte (precedence) Bei gleicher Priorität unterscheidet man zwischen linksassoziativ und rechtsassoziativ int flies = 120 / 4 * 5; // 150 oder 6? Regeln dazu sind in entsprechenden Tabellen zu finden ()-Klammer besitzt hohe Priorität und kann im Zweifelsfall immer verwendet werden int flies = (3 + 4) * 5; // 35 19

abnehmende Priorität Priorität und Assoziativität Operator level Associativity :: left to right ( ) [ ] ->. left to right! ~ ++ -- + (unary) (unary) * (deference) & (address of) new delete (data type) right to left * / % left to right + - left to right << >> left to right > <= > >= left to right ==!= left to right & left to right left to right && left to right left to right = += -= *= /= %= right to left 20 Komplette Tabelle: siehe Prata, Anhang D

Logische Ausdrücke Übung4 Logische Operatoren erlauben die Verknüpfung von Ausdrücken In C++ gibt es drei elementare logische Operatoren: && // logisch AND // logisch OR! // logisch NOT Mit Methoden der Boolschen Algebra kann ein beliebig komplexer logischer Ausdruck in eine Kombination dieser drei Elementaroperatoren zerlegt werden 21

Logische Ausdrücke OR Operator folgt der Wahrheitstabelle von ODER Bei der Verwendung muss die Priorität berücksichtigt werden Auswertungen auf linker Seite erfolgen VOR Anwendung des Operators 5 > 8 5 < 10 // true i++ < 6 i == j // zuerst Inkrementieren AND Operator && folgt der Wahrheitstabelle von UND Wird oft in Eingabeschleifen verwendet if (17 < age < 35) // Vorsicht, immer true 0 1 0 0 1 1 1 1 && 0 1 0 0 0 1 0 1 22

Beispiel_3: Zahlenbereiche // more_and.cpp -- use logical AND operator #include <iostream> using namespace std; int main() int age; cout << "Enter your age in years: "; cin >> age; int minimum = 0; int maximum = 0; if (age > 17 && age < 35) minimum = 18; maximum = 34; else if (age >= 35 && age < 50) minimum = 35; maximum = 49; else if (age >= 50 && age < 65) minimum = 50; maximum = 64; Initialisierung Testsequenzen if (minimum!= 0) cout << "Your age is in between " << minimum << " and " << maximum << " years!\n"; return 0; 23

Logische Ausdrücke NOT Operator! negiert einen logischen Ausdruck Hat höhere Priorität als Vergleichsoperatoren if!(x < 5) // x >= 5 ist besser if (!x < 5) // zuerst NOT x, dann Vergleich AND hat höhere Priorität als OR age > 35 && age < 50 weight > 300 Zuerst links ausgewertet! 0 1 1 0 24

Beispiel_4:Fehlerbehandlung // not.cpp -- using the not operator #include <iostream> #include <climits> using namespace std; bool is_int(double); int main() double num; cout << "Yo, dude! Enter an integer value: "; cin >> num; Prüfung auf Fehler mittels Negation if (!is_int(num)) // check if num is not int-able cout << "Out of range\n"; else int val = num; cout << "You've entered the integer " << val << "\n"; return 0; bool is_int(double x) if (x <= INT_MAX && x >= INT_MIN) return true; else return false; 25 // use <climits> values

Der? : -Operator Kann anstelle einer if else Anweisung verwendet werden Ausdruck 1? Ausdruck 2 : Ausdruck 3 Produziert einen Ausdruck, welcher beliebig weiterverwendet werden kann int c = (a > b)? a : b; //Entspricht max(a,b) Syntax ist kompakt, aber gewöhnungsbedürftig Wird Anfängern NICHT empfohlen 26