Steueranweisungen. Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 32



Ähnliche Dokumente
Einfache Bedingte Ausführung

Einführung in die Programmierung

Übersicht Programmablaufsteuerung

Fallunterscheidung: if-statement

Java-Programmierung mit NetBeans

Erwin Grüner

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

Angewandte Mathematik und Programmierung

Einführung in die Programmierung

Klausur in Programmieren

Kontrollstrukturen, Strukturierte Programmierung

Projektverwaltung Problem Lösung: Modulare Programmierung

Pass by Value Pass by Reference Defaults, Overloading, variable Parameteranzahl

C/C++ Programmierung

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

Informatik Repetitorium SS Volker Jaedicke

Modellierung und Programmierung 1

Einführung in die Programmierung (EPR)

Kurze Einführung in die Programmiersprache C++ und in Root

Unterprogramme. Funktionen. Bedeutung von Funktionen in C++ Definition einer Funktion. Definition einer Prozedur

5. Tutorium zu Programmieren

Entwurf von Algorithmen - Kontrollstrukturen

Java 7. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Dezember 2011 JAV7

Inhalt. 1. Einführung in die Informatik. 2. Algorithmen Definition, Eigenschaften, Entwurf Darstellung von Algorithmen Beispiele.

Programmieren in C. Felder, Schleifen und Fließkommaarithmetik. Prof. Dr. Nikolaus Wulff

Dr. Monika Meiler. Inhalt

Hochschule Darmstadt Informatik-Praktikum (INF 1) WS 2015/2016 Wirtschaftsingenieur Bachelor 5. Aufgabe Datenstruktur, Dateieingabe und -ausgabe

Funktionen Häufig müssen bestimmte Operationen in einem Programm mehrmals ausgeführt werden. Schlechte Lösung: Gute Lösung:

1 Vom Problem zum Programm

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

Grundlagen der Programmierung Prof. H. Mössenböck. 3. Verzweigungen

PHP 5.4 ISBN Stephan Heller, Andreas Dittfurth 1. Ausgabe, September Grundlagen zur Erstellung dynamischer Webseiten GPHP54

Propädeutikum. Dipl.-Inf. Frank Güttler

Klausur in Programmieren

Lösungsvorschlag zum Übungsblatt 1 zur Vorlesung Informatik II / WS2001/02

Kontrollstrukturen - Universität Köln

Gegenüberstellung von Assembler- und C-Programmierung

Praktikum Ingenieurinformatik. Termin 2. Verzweigungen (if-else), printf und scanf, while-schleife

Kontrollstrukturen, Pseudocode und Modulo-Rechnung

Kontrollstrukturen und Funktionen in C

Datentypen. Agenda für heute, 4. März, Pascal ist eine streng typisierte Programmiersprache

Übersetzung von Struktogrammen nach VBA

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

Graphic Coding. Klausur. 9. Februar Kurs A

Ingenieurinformatik Diplom-FA (C-Programmierung)

Die Programmiersprache C99: Zusammenfassung

Software Engineering I

Einführung in die Programmierung

Einführung in die Programmierung Blockkurs Java

Tutorium Rechnerorganisation

Übungen zu C++ Kapitel 1

Softwareentwicklung 1. Übungsaufgabe 4 Kontrollstrukturen

Informatik. Studiengang Chemische Technologie. Michael Roth WS 2012/2013. Hochschule Darmstadt -Fachbereich Informatik-

Systeme 1. Kapitel 6. Nebenläufigkeit und wechselseitiger Ausschluss

Felder, Rückblick Mehrdimensionale Felder. Programmieren in C

Programmieren in C. Macros, Funktionen und modulare Programmstruktur. Prof. Dr. Nikolaus Wulff

Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen:

Diana Lange. Generative Gestaltung Operatoren

Softwarelösungen: Versuch 4

Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung)

Ingenieurinformatik Diplom-FA (Teil 2, C-Programmierung)

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

FB Informatik. Fehler. Testplan

Dr. Monika Meiler. Inhalt

Zusammenfassung des Handzettels für Programmieren in C

25 kann ohne Rest durch 5 geteilt werden! ist wahr

Große Übung Praktische Informatik 1

Objektorientierte Programmierung

Allgemeines. Verschiedene Sprachkonzepte C-Sprachfamilie C-ähnliche Programmiersprachen Allgemeines zu C. #include <stdio.h>

Grundlagen von C. Ausarbeitung von Jonas Gresens

Klausur in Programmieren

Übungen Programmieren 1 Felix Rohrer. Übungen

Übung Grundlagen der Programmierung. Übung 03: Schleifen. Testplan Testergebnisse

Funktionale Programmierung mit Haskell

VBA-Programmierung: Zusammenfassung

Software Engineering Interaktionsdiagramme

Inhaltsverzeichnis. Grundbegriffe der C-Programmierung Für den HI-TECH C-Compiler

Programmiervorkurs WS 2012/2013. Schleifen und Methoden

SEP 114. Design by Contract

Würfelt man dabei je genau 10 - mal eine 1, 2, 3, 4, 5 und 6, so beträgt die Anzahl. der verschiedenen Reihenfolgen, in denen man dies tun kann, 60!.

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

Hochschule München, FK 03 FA SS Ingenieurinformatik

Programmieren in C. C Syntax Datentypen, Operatoren und Kontrollstrukturen. Prof. Dr. Nikolaus Wulff

C++ Tutorial: Timer 1

C# 2000 Expression Beispielcodes für Konsolen- und Formularanwendung

5. Elementare Befehle und Struktogramme

Programmieren in C. -- ALLE Programmiersprachen sind HÄSSLICH -- Deklaration: erst der Datentyp, dann der Variablenname. Semikolon am Ende.

Klausur in Programmieren

Grundlagen der Programmierung Prof. H. Mössenböck. 14. Schrittweise Verfeinerung

Gliederung. Tutorium zur Vorlesung. Gliederung. Gliederung. 1. Gliederung der Informatik. 1. Gliederung der Informatik. 1. Gliederung der Informatik

Übersicht. Schleifen. Schleifeninvarianten. Referenztypen, Wrapperklassen und API. 9. November 2009 CoMa I WS 08/09 1/15

Einfache Rechenstrukturen und Kontrollfluss II

Übungskomplex Felder (1) Eindimensionale Felder Mehrdimensionale Felder

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = Euro ergeben.

Lua Grundlagen Einführung in die Lua Programmiersprache

Einführung in die Programmierung Wintersemester 2011/12

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

Zählen von Objekten einer bestimmten Klasse

Design by Contract with JML

Transkript:

Steueranweisungen Bisher Programme mit Funktionen als einfache Folge von Befehlen Ablauf von Programmen darüber hinaus steuerbar über Bedingte Ausführung: Ausführung von Programmteilen (Befehlen oder Programmblöcken) nur wenn eine bestimmte Bedingung erfüllt ist Selektion, Verzweigung Programmschleifen: mehrfache Wiederholung von Programmteilen so lange oder bis eine bestimmte Bedingung erfüllt bzw. nicht mehr erfüllt ist Iteration, Schleife Fehlerbehandlung: Ausführung spezieller Programmteile im Fall eines Fehlers Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 32

Einfache Bedingte Ausführung if-anweisung gefolgt von geklammerter Bedingung als Einführung für einen einzelnen Befehl oder einen Programmblock if (<Bedingung>) <Befehl>; if (<Bedingung>) { <Befehlssequenz> ; Bedingung kann über logische Operatoren verknüpft werden und evaluiert entsprechend zu 0 (FALSE) oder andernfalls TRUE ( logische Operatoren) Ausführung entsprechend Ergebnis: TRUE: Ausführung des vonif eingeleiteten Befehls oder Programmblocks FALSE: Programmteil der zumif-block gehört wird nicht ausgeführt und Ausführung danach fortgesetzt Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 33

Einfache Bedingte Ausführung: Beispiel (C) #include <stdio.h> int main() { int x; printf( x = ); scanf( %i,&x); if (x >= 0) printf( Zahl ist positiv oder gleich 0. \n ); if (x == 42) { printf( Die Zahl ist 42. \n ); printf( Das ist hexadezimal %X \n,42); ; return 0; Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 34

Einfache Bedingte Ausführung: Beispiel (C++) #include <iostream> using namespace std; int main() { int x; cout << x = ; cin >> x; if (x >= 0) cout << Zahl ist positiv oder gleich 0. << endl; if (x == 42) { cout << Die Zahl ist 42. << endl; cout << Das ist hexadezimal << hex << 42 << endl; ; return 0; Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 35

Darstellung von Programmabläufen Zum Entwurf und zur Illustration von Algorithmen verschiedene formale und informale Beschreibungsmittel: Pseudocode: informale, textuelle Darstellung des Algorithmus zum Teil mit Mitteln der natürlichen Sprache Struktogramme: formale Darstellung von Programmabläufen als Blockdiagramm Programmablaufpläne (PAP): Beschreibung des Programmablaufs durch spezielle Notation für generische Anweisungsklassen Im folgenden beide letztgenannte Diagrammtypen gemischt mit Pseudocode zur Illustration Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 36

Einfache Bedingte Ausführung: Struktogramm START Test42 Eingabe: x x >=0? ja Ausgabe Text % x = 42? ja Ausgabe Text Ausgabe Hex STOP % nein nein Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 37

Einfache Bedingte Ausführung: Struktogramm START Eingabe: x x >= 0? ja nein Ausgabe Text x = 42? ja nein Ausgabe Text Ausgabe Hex STOP Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 38

Bedingte Ausführung mit Alternative Erweiterter Syntax derif-anweisung umelse-klausel: Ausführung eines alternativen Programmteils, falls Bedingung nicht erfüllt if (<Bedingung>) <Befehl oder Programmblock> else <Befehl oder Programmblock>; In Abhängigkeit von der Bedingung wird nur ein Zweig der Anweisung ausgeführt (Verzweigung) Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 39

Bedingte Ausführung mit Alternative: Beispiel (C) #include <stdio.h> #include <math.h> int main() { float x; printf( x = ); scanf( %f,&x); if (x >= 0) { float w = sqrt(x); printf( Wurzel ist %f \n,w); else printf( Wurzelberechnung nicht möglich! \n ); return 0; Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 40

Bedingte Ausführung mit Alternative: Beispiel (C++) #include <iostream> #include <cmath> using namespace std; int main() { float x; cout << x = ; cin >> x; if (x >= 0) { float w = sqrt(x); cout << Wurzel ist << w << endl; else cout << Wurzelberechnung nicht möglich! << endl; return 0; Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 41

Bedingte Ausführung mit Alternative: Struktogramm START Wurzel Eingabe: x x >=0? ja w:=sqrt(x) Ausgabe w STOP nein Ausgabe Text Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 42

Bedingte Ausführung mit Alternative: Struktogramm START Eingabe: x x >= 0? ja nein w := sqrt(x) Ausgabe Text Ausgabe w STOP Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 43

Schachtelung vonif-anweisungen Verzweigungen können beliebig geschachtelt werden if (alter >= 0) if (alter < 120) printf( Alter korrekt... \n ); Können durch Zusammenfassen der Bedingungen oft vereinfacht werden: Sequenz vonif-bedingungen entspricht logischer Konjunktion if (alter >= 0 && alter < 120) printf( Alter korrekt... \n ); Aber nicht immer: Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 44

Schachtelung vonif-anweisungen /2 Schachtelung erlaubt separate Behandlung der logischen Alternativen imelse-zweig if (alter >= 0) if (alter < 120) printf( Alter korrekt... \n ); else printf( Alter zu hoch! \n ); else printf( Alter zu gering! \n ); Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 45

Sequenz vonif/else if-anweisungen Sequenz vonif/else if-anweisungen erlaubt Mehrfachverzweigung if (alter < 1) printf( Baby. \n ); else if (alter < 4) printf( Kleinkind. \n ); else if (alter < 6) printf( Vorschulkind. \n ); else if (alter < 18) printf( Schulkind. \n ); else printf( Führerschein. \n ); Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 46

Mehrfachverzweigung mitswitch switch-steueranweisung undcase-sprungmarken setzen einfache Sprungtabelle um switch(<variable>) { case <Wert1> : <Befehlssequenz>; case <Wert2> : <Befehlssequenz>; case <Wert3> : <Befehlssequenz>;... default: <Befehlssequenz>; switch-variable muss ordinalen Wert haben, d.h. Integer (inklusive char) case-marken sind Sprungmarken, d.h. Ausführung ab da bis zum Ende desswitch-statements sollen nur einzelne Fälle ausgeführt werden, muss derswitch-block mitbreak verlassen werden Falls kein Wert in der Liste, wird zur optionalendefault-marke gesprungen Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 47

Mehrfachverzweigung mitswitch: Beispiel /1 #include <stdio.h> #define PI 3.141592653589793 int main() { int auswahl; float radius,durchmesser,umfang,flaeche; printf( Radius des Kreises = ); scanf( %f,&radius); printf( 1) Berechnung des Durchmessers \n ); printf( 2) Berechnung des Umfangs \n ); printf( 3) Berechnung der Fläche \n ); printf( Auswahl: ); scanf( %i,&auswahl);... Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 48

Mehrfachverzweigung mitswitch: Beispiel /2... switch(auswahl) { case 1: durchmesser = 2*radius; printf( Durchmesser ist: %f \n, durchmesser); break; case 2: umfang = 2*radius*PI; printf( Umfang ist: %f \n, umfang); break; case 3: flaeche = radius*radius*pi; printf( Fläche ist: %f \n, flaeche); break; default: printf( Es wurde keine Berechnung durchgeführt. \n ); return 0; Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 49

Mehrfachverzweigung mitswitch: Beispiel /3 Vorsicht bei fehlendenbreak-steueranweisungen: switch(auswahl) { case 1: durchmesser = 2*radius; printf( Durchmesser ist: %f \n, durchmesser); case 2: umfang = 2*radius*PI; printf( Umfang ist: %f \n, umfang); case 3: flaeche = radius*radius*pi; printf( Fläche ist: %f \n, flaeche); Radius des Kreises = 23 1) Berechnung des Durchmessers 2) Berechnung des Umfangs 3) Berechnung der Fläche Auswahl: 1 Durchmesser ist: 46.000000 Umfang ist: 144.513260 Fläche ist: 1661.902466 Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 50

Programmschleifen Auch Iteration oder Zyklen: Wiederholung von Programmteilen (Blöcken oder einzelnen Befehlen) entsprechend bestimmten Bedingungen for-schleife: Zählschleife zum Durchlaufen von Wertebereichen für eine Variable while-schleife: kopfgesteuerte Schleife mit beliebiger Bedingung für Wiederholung, die vor dem Porgrammteil ausgwertet wird do-while-schleife: fußgesteuerte Schleife mit beliebiger Bedingung für Wiederholung, die am Ende des Porgrammteils ausgwertet wird Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 51

for-schleife Zählschleife for ([<Initialisierung>];[<Bedingung>];[<Schrittanweisung>]) <Befehl oder Programmblock> Initialisierung: Deklaration (oder kommaseparierte Folge von Deklarationen) und Defintion der Laufvariable(n), die einmalig vor Beginn der Iteration ausgeführt wird Bedingung: logischer Ausdruck, der am Anfang jeden Iterationsschritts erfüllt sein muss Schrittanweisung: Modifikation der Laufvariablen am Ende jeden Iterationsschrittes, bei mehreren auch kommaseparierte Liste von Modifikationen Alle drei Teile sind optional Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 52

for-schleife: PAP Initialisierung Bedingung ja nein Anweisungen Schrittanweisung Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 53

for-schleife: Beispiel (C) #include <stdio.h> int main() { int max; printf( Maximalwert = ); scanf( %i, &max); int sum = 0; for (int i=1; i <= max; i++) { sum = sum + i; printf( Summe der natürlichen Zahlen bis %i : %i \n, i, sum); return 0; Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 54

for-schleife: Beispiel (C++) #include <iostream> using namespace std; int main() { int max; cout << Maximalwert = ; cin >> max; int sum = 0; for (int i=1; i <= max; i++) { sum = sum + i; cout << Summe der natürlichen Zahlen bis << i << : << sum << endl; return 0; Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 55

for-schleife: Beispiele möglicher Schleifenköpfe Weitere Beispiele for (int i=1; i <= 10; i++)... // 1 2 3... 10 for (int i=10; i > 0; i )... // 10 9 8... 1 for (int i=1; i <= 256; i*=2)... // 1 2 4 8... 256 for (int i=1, int j=10; i < j; i++,j )... // (1,10) (2,9)... (5,6) for (;;)... // Endlosschleife for (;!gefunden;)... // entspricht while(!gefunden)... Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 56

while-schleife Kopfgesteuerte Schleife while (<Bedingung>) <Befehl oder Programmblock> Bedingung wird jeweils vor Ausführung des folgenden Befehls/Programmblocks ausgewertet Abweisende Schleife: wird die Bedingung vor der ersten Ausführung nicht erfüllt, wird der Schleifentext gar nicht ausgeführt Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 57

while-schleife: Beispiel (C) #include <stdio.h> int main() { int min,max; int sum = 0; printf( Kleinere Zahl = ); scanf( %i, &min); printf( Größere Zahl = ); scanf( %i, &max); printf( Summe aller Zahlen von %i bis %i ist, min,max); while(min <= max) { sum = sum + min; min++; printf( %i. \n, sum); return 0; Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 58

while-schleife: Beispiel (C++) #include <iostream> using namespace std; int main() { int min,max; int sum = 0; cout << Kleinere Zahl = ; cin >> min; cout << Größere Zahl = ; cin >> max; cout << Summe aller Zahlen von << min << bis << max << ist ; while(min <= max) { sum = sum + min; min++; cout << sum <<. << endl; return 0; Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 59

while-schleife: PAP Bedingung ja Anweisungen nein Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 60

while-schleife: Struktogramm solange Bedingung wahr Anweisunge(n) Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 61

do-while-schleife Fußgesteuerte Schleife do <Befehl oder Programmblock> while (<Bedingung>); Bedingung wird jeweils nach Ausführung des Schleifenteils überprüft Nicht-abweisende Schleife: der Schleifentext wird mindestens immer einmal ausgeführt, bevor die Bedingung am Ende überprüft wird Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 62

do-while-schleife: Beispiel (C) #include <stdio.h> int main() { int summand; int sum = 0; do { printf( Aktuelle Zwischensumme : %i \n, sum); printf( Nächster Summand (0 für Abbruch) = ); scanf( %i, &summand); sum = sum + summand; while (summand!= 0); return 0; Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 63

do-while-schleife: Beispiel (C++) #include <iostream> using namespace std; int main() { int summand; int sum = 0; do { cout << Aktuelle Zwischensumme : << sum << endl; cout << Nächster Summand (0 für Abbruch) = ; cin >> summand; sum = sum + summand; while (summand!= 0); return 0; Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 64

do-while-schleife: PAP Anweisungen ja Bedingung nein Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 65

do-while-schleife: Struktogramm Anweisunge(n) solange Bedingung wahr Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 66

Schachtelung von Schleifen Schleifen gleicher oder unterschiedlicher Art können beliebig geschachtelt werden Beispiel in C #include <stdio.h> int main() { int hoehe; printf( Höhe des Weihnachtsbaums = ); scanf( %i, &hoehe); for (int i=hoehe; i > 0; i-) { for (int j=i/2+1;j>0;j-) printf( ); for (int j=hoehe-i+1;j>0;j-) printf( * ); printf( \n ); return 0; Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 67

Schachtelung von Schleifen: Beispiel (C++) #include <iostream> using namespace std; int main() { int hoehe; cout << Höhe des Weihnachtsbaums = ; cin >> hoehe; for (int i=hoehe; i > 0; i-) { for (int j=i/2+1;j>0;j-) cout << ; for (int j=hoehe-i+1;j>0;j-) cout << * ; cout << endl; return 0; Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 68

Steueranweisung in Schleifen Spezielle Steueranweisung zur Kontrolle des Schleifenablaufs break: Abbruch der Schleifenausführung, Programm wird nach dem Schleifentext fortgesetzt (entsprechend schon bei Mehrfachverzweigung mit switch verwendet) continue: Abbruch des aktuellen Schleifendurchlaufs, d.h. Code bis zum Ende des Schleifenblocks wird ignoriert, und mit dem nächsten Iterationsschritt (Anfang der Schleife) fortgesetzt Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 69

Schleifen mitbreak: Beispiel (C) #include <stdio.h> #include <stdlib.h> #include <time.h> #define MIN 1 #define MAX 100 #define MAX_VERSUCHE 20 int main() { srand(time(null)); // Initialisierung Zufallszahlen int gesucht = MIN+rand()%(MAX-MIN+1); printf( Zahlenraten zwischen %i und %i \n,min,max); printf( Gesuchte Zahl = %i \n,gesucht); int versuch = 0;... Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 70

Schleifen mitbreak: Beispiel (C) /2... while(versuch < MAX_VERSUCHE) { versuch++; int test = MIN+rand()%(MAX-MIN+1); printf( Versuch %i : %i \n, versuch,test); if (test == gesucht) { printf( Gefunden! \n ); break; return 0; Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 71

Schleifen mitbreak: Beispiel (C++) #include <iostream> #include <cstdlib> #include <ctime> #define MIN 1 #define MAX 100 #define MAX_VERSUCHE 20 using namespace std; int main() { srand(time(null)); int gesucht = MIN+rand()%(MAX-MIN+1); cout << Zahlenraten zwischen << MIN << und << MAX << endl; cout << Gesuchte Zahl = << gesucht << endl; int versuch = 0;... Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 72

Schleifen mitbreak: Beispiel (C++) /2... while(versuch < MAX_VERSUCHE) { versuch++; int test = MIN+rand()%(MAX-MIN+1); cout << Versuch << versuch << : << test << endl; if (test == gesucht) { cout << Gefunden! << endl ; break; return 0; Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 73

Schleifen mitcontinue: Beispiel (C) #include <stdio.h> #include <stdlib.h> #include <time.h> #define MIN 1 #define MAX 10 int main() { srand(time(null)); int gesucht = MIN+rand()%(MAX-MIN+1); printf( Zahlenraten zwischen %i und %i \n,min,max); int test;... Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 74

Schleifen mitcontinue: Beispiel (C) /2... bool gefunden=false; while(!gefunden) { printf( Geratene Zahl = ); scanf( %i,&test); if (test < MIN test > MAX) { printf( Zahl ist außerhalb des Bereichs! \n ); continue; if (test == gesucht) break; printf( Leider falsch geraten. \n ); printf( Gefunden! \n ); return 0; Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 75

Schleifen mitcontinue: Beispiel (C++) #include <iostream> #include <cstdlib> #include <ctime> #define MIN 1 #define MAX 10 using namespace std; int main() { srand(time(null)); int gesucht = MIN+rand()%(MAX-MIN+1); cout << Zahlenraten zwischen << MIN << und << MAX «end int test;... Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 76

Schleifen mitcontinue: Beispiel (C++) /2... bool gefunden=false; while(!gefunden) { cout << Geratene Zahl = ; cin >> test; if (test < MIN test > MAX) { cout << Zahl ist außerhalb des Bereichs! << endl; continue; if (test == gesucht) break; cout << Leider falsch geraten. << endl; cout << Gefunden! << endl; return 0; Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 77

Ausnamebehandlung in C++ In C++ spezieller Mechanismus zur Ausnahmehandlung (Exception Handling) über Steueranweisungen try { <Befehlssequenz> catch (<Ausnahmedeklaration>) { <Fehlerbehandlung> Wird imtry-block direkt oder indirekt, d.h. in einer aufgerufenen Funktion, eine Ausnahme signalisiert, wird die Programmausführung automatisch unterbrochen Passt die Ausnahme zur Aussnahmedeklaration der catch-anweisung, wird zur Fehlerbehandlung der Code im catch-block ausgeführt Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 78

Ausnamebehandlung in C++ /2 Erfordert explizites Signalisieren ( werfen throw) der Ausnahme als Ausdruck typisierter Wert throw <Ausdruck>; Im einfachsten Fall literaler Wert throw 42; Ausnahme kann z.b. im Code einer Bibliothek geworfen werden, deren Quelltext bei Verwendung der Funktionalität nicht vorliegt trotzdem Behandlung des Problems möglich, ohne dass das Programm beendet werden muss Besondere Bedeutung in C++ : Ausnahmen als Objekte von speziellen Exception-Klassen signalisert Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 79

try-catch Ausnahmebehandlung: Beispiel #include <iostream> using namespace std; float kehrwert(float zahl) { if (zahl == 0) throw (char*) Division durch null! ; return 1/zahl;... Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 80

try-catch Ausnahmebehandlung: Beispiel /2... int main() { try { float x; cout << x = ; cin >> x; float y = kehrwert(x); cout << Kehrwert ist << y << endl; catch (char* ausnahme) { cout << Fehler aufgetreten: << endl; cout << ausnahme << endl; return 0; Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 81

try-catch Ausnahmebehandlung: Beispiel /2 Ausnahmen verschiedenen Typs können durch Sequenz verschiedenercatch-blöcke abgefangen werden catch (...) fängt beliebige Fehler ab try {... catch (char* ausnahme) { cout << Fehler aufgetreten: << endl; cout << ausnahme << endl; catch (int i) { cout << Fehler aufgetreten, Nr: << i << endl; catch (...) { cout << Sontiger Fehler. << endl; Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 82

Zusammenfassung: Steueranweisung Bedingte Ausführung if: einfache bedingte Ausführung if-else: mit Alternative Schachtelung und Sequenz von Verzweigungen switch-case: Sprungtabelle für Mehrfachverzweigung Schleifen for: Zählschleife while: kopfgesteuerte Schleife do-while: fußgesteuerte Schleife Steuerung mitbreak undcontinue Ausnahmebehandlung try undcatch: Behandeln ( Fangen ) von Ausnahmen throw: Signalisieren ( Werfen ) von Ausnahmen Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/09 2 83