Kap 4. Befehle und Struktogramme

Ähnliche Dokumente
5. Elementare Befehle und Struktogramme

Kap 4. Befehle und Struktogramme

Einstieg in die Informatik mit Java

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

Grundlagen der Informatik 5. Kontrollstrukturen II

Programmieren in C/C++ und MATLAB

FACHHOCHSCHULE AUGSBURG Hochschule für Technik, Wirtschaft und Gestaltung

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

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

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

Einstieg in die Informatik mit Java

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

Es ist für die Lösung der Programmieraufgabe nicht nötig, den mathematischen Hintergrund zu verstehen, es kann aber beim Verständnis helfen.

BKTM - Programmieren leicht gemacht.

C++ - Einführung in die Programmiersprache Schleifen

Kap 9. Bitoperationen und -strukturen

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

Einführung in die Programmierung

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

Kontrollstrukturen Blöcke / Schleifen / Bedingungen

Algorithmen & Programmierung. Steuerstrukturen im Detail Selektion und Iteration

2.5 Programmstrukturen Entscheidung / Alternative

Hochschule Darmstadt Informatik-Praktikum WS 2016/2017 WIng Bachelor 4. Aufgabenblatt Modularisierung, Funktionen, Unterprogramme

3. Grundanweisungen in Java

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

FB Informatik. Fehler. Testplan

3. Anweisungen und Kontrollstrukturen

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

Schleifen in C/C++/Java

Programmieren I. Kapitel 5. Kontrollfluss

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

Klausur Informatik I WS 2006/2007

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

4 Schleifen und Dateien

Arbeitsblätter für die Lehrveranstaltung OOP JAVA 1

Programmiertechnik Kontrollstrukturen

Grundlagen der Programmierung

Informatik für Elektrotechnik und Informationstechnik

GI Vektoren

4. Ablaufsteuerung (Kontrollstrukturen)

Annehmende Schleife do while

Klausur: Grundlagen der Informatik I, am 05. Februar 2008 Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.: Punkte:

Nachname: Vorname: Matr.-Nr.: Punkte: 1. Aufgabe: ( / 25 Pkt.) Gegeben ist das folgende Struktogramm zur Berechnung von sin(x) mit Hilfe einer Reihe.

Unterlagen. CPP-Uebungen-08/

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

Funktionales C++ zum Ersten

Angewandte Mathematik und Programmierung

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

Hochschule Darmstadt Informatik-Praktikum SS 2017 EIT Bachelor 5. Aufgabenblatt Datenstruktur, Dateieingabe und -ausgabe

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

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

4. Einfache Programmstrukturen in C Einfache Programmstrukturen in C

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

System.out.println("TEXT");

6. Iteration (Schleifenanweisungen)

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

Operatoren (1) Operatoren (2)

Vom Problem zum Programm

8. Referenzen und Zeiger

Objektorientierte Programmierung

ModProg 15-16, Vorl. 5

Programmieren in C (Übungsblatt 1)

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

7. Grundlagen von Funktionen

Algorithmen zur Datenanalyse in C++

Java: Eine kurze Einführung an Beispielen

Klausur: Grundlagen der Informatik I, am 05. Februar 2008 Dirk Seeber, h_da, Fb Informatik

Präzedenz von Operatoren

Vorlesung Programmieren

Kapitel 3: Variablen

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

1 Aufgaben 1.1 Umgebungsvariable setzen: CLASSPATH

Programmieren in C/C++ und MATLAB

Fallunterscheidung: if-statement

Javakurs für Anfänger

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

Javakurs für Anfänger

Auswahlen (Selektionen)

Ein- und Ausgabe (I/O)

Programmierkurs Java

Programmieren in C. Eine Einführung in die Programmiersprache C. Prof. Dr. Nikolaus Wulff

Grundlagen der Programmierung

Tag 3 Repetitorium Informatik (Java)

Schleifenanweisungen

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

C++ Teil 1. Sven Groß. 9. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil 1 9. Apr / 19

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

Flussdiagramm / Programmablaufplan (PAP)

Programmsteuerung mit PHP - if/else, elseif,switch

C- Kurs 04 Anweisungen

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

Schleifen in Javascript

Objektorientierte Programmierung OOP Programmieren mit Java

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

Einstieg in die Informatik mit Java

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

2. Programmierung in C

Dr. Monika Meiler. Inhalt

Informationsverarbeitung

Transkript:

Kap 4. Befehle und Struktogramme

4.1 Elementare Befehle Befehlstypen Zuweisung (eigentlich kein Befehl) Verzweigung Wiederholung/Schleife Block (zusammengesetzt) Ein-/Ausgabe (eigentlich kein Befehl) Beispiel aus dem Musterprogramm x=a; if ( a<=0 )// unzulaessige Eingabe while ( abs (x*x-a)>genauigkeit ) { } cin>>a; cout <<"\n a muss > 0 sein "; Sowohl Zuweisung als auch Ein-/Ausgabe sind Ausdrücke mit einemwert!!! Operand Operator Operand x cin = >> a a Dr. Norbert Spangler / Programmieren I 28.10.2017 2

Elementare Befehle Die elementaren Befehle sind also Verzweigung Fallunterscheidungen Schleife Block Wiederholungen Ein Block ist aus anderen Befehlen zusammengesetzt Ausdrücke wie Zuweisung oder Ein-/Ausgabe Anmerkung: Es kann jeder Ausdruck hingeschrieben werden alsoauch 1; a<5; In der Regel macht dies keinen Sinn. Dr. Norbert Spangler / Informatik 28.10.2017 3

4.2 Grafische Darstellung Zur Verdeutlichung der Logik eines Programmes sind grafische Darstellungen sehr hilfreich. Hierzu gibt es eine Reihe von Möglichkeiten und zugehörige Tools: Flußdiagramme Struktogramme (*) UML (Unified Modeling Language) Ziele sind eine bessere Darstellung komplexer Abläufe und vor allem die Dokumentation des Programms Dr. Norbert Spangler / Informatik 28.10.2017 4

Grafische Darstellung des Programmablaufs/Flussdiagramm Start a lesen Flußdiagramme sind einfach zu verstehen, werden aber schnell unübersichtlich. a<= 0 nein x=a ja a unzulässig Es gibt nur wenige Symbole x=x- nein Ergebn is genau ja Ergebnis ausgeben Ende Dr. Norbert Spangler / Informatik 28.10.2017 5

Grafische Darstellung des Programmablaufs/Struktogramm Struktogramme unterstützen sehr gut die Entwicklung komplexer Abläufe und sind daher eher ein Mittel zur Unterstützung des Entwurfs und nicht zur Dokumentation. W u r z e l b e r e c h n e n E i n g a b e a a < = 0 J a N e i n Es gibt nur wenige Symbole und daher ist diese Technik sehr einfach. Sie sind ab sofort zu jedem Programm anzufertigen und vor Beginn des Praktikums zusammen mit dem Testplan abzugeben. a m u s s > 0 s e i n x = a S o l a n g e x * x - a u n g e n a u x * x - a x = x - ------- 2 x A u s g a b e x Dr. Norbert Spangler / Informatik 28.10.2017 6

Grafische Darstellung des Programmablaufs/UML UML Unified Modeling Language Ist eine Sprache für für Modellierung von Programmen mit grafischen Symbolen für die verwendeten Begriffe. UML ist wesentlich komplexer (es gibt 13 Diagrammtypen) als die bisher genannten Bespiele und wird in späteren Vorlesungen behandelt. Beispiele siehe unten (Quelle: Wikipedia) Dr. Norbert Spangler / Informatik 28.10.2017 7

4.3 Blöcke und Gültigkeitsbereiche Ein Block ist die Zusammenfassung mehrerer Befehle mittels eines Paars geschweifter Klammern: { } hier kommen die Befehle des Blocks Ein Block ist damit wie ein Befehl. Er wird immer dort verwendet, wo nur ein Befehl stehen soll, wo man aber mehrere Befehle ausführen möchte. Dies wird dann bei den Schleifen und Verzweigungen in der Regel der Fall sein Dr. Norbert Spangler / Informatik 28.10.2017 8

Gültigkeitsbereich In einem Block dürfen auch Variable deklariert werden, welche dann aber nur in diesem Block verwendet werden können! Unter dem Gültigkeitsbereich einer Variablen versteht man daher den Programmabschnitt, wo die Variable bekannt ist und wo sie verwendet werden kann. Der Bereich beginnt mit der Stelle innerhalb des Blocks, wo sie deklariert wird und endet am Ende dieses Blocks. Nach Beendigung des Blocks existiert diese Variable nicht mehr. Ihr Speicherplatz ist freigegeben. Derartige Variable nennt man lokale Variable. Sie sind im Stack abgelegt. { Deklaration z.b. int i } Gültigkeitsbereich Dr. Norbert Spangler / Informatik 28.10.2017 9

Gültigkeitsbereich/globale Variable Globale Variable müssen außerhalb von geschweiften Klammern deklariert werden, also vor dem Programm. Damit sind sie überall bekannt, d.h. in jedem Block. // lokal/global #include <iostream> using namespace std; int i=2; void main() { int j=1; { int k=2; } } Lokale Variable Globale Variable Weil globale Variable überall bekannt sind und überall damit geändert werden können sind stellen sie ein Risiko dar und sollten üblicherweise nicht verwendet werden. Ausnahme etwa: globale Konstanten Dr. Norbert Spangler / Informatik 28.10.2017 10

// lokal/global #include <iostream> using namespace std; int i=2; void main() { int j=1; { int j=2; cout << i << j << endl; } Gültigkeitsbereich/Beispiel Der Name der Variablen kann auch dem einer Variablen gleich sein, die schon vorher deklariert wurde. Damit "überdeckt diese Variable die vorher deklarierte, solange man sich in diesem Block befindet. } cout << i << j << endl; Was wird ausgegeben? Dr. Norbert Spangler / Informatik 28.10.2017 11

4.4 Zuweisungen Zuweisung sind aus Kapitel 3 bekannt. Sie stellen eigentlich einen Ausdruck dar!!! Beispiel Bzw. auch flaeche=r*r*3.14159; i = i+1; i+=1;//zusammengesetzte Zuweisung Aufbau Variable =Ausdruck L-Wert = R-Wert bzw. Variable op=ausdruck Die Zuweisung ist ein Ausdruck der Form Operand Operator Operand. Der Wert des Ausdrucks ist der R-Wert. Dr. Norbert Spangler / Informatik 28.10.2017 12

Zuweisungen/Struktogramm flaeche = r*r*3.14159 Symbol: Rechteck!!!!!!! flaeche = r 2 *π Inhalte sind beliebig zu beschreiben. Es muss kein C++ Code sein. x = x x 2 a 2x C++ Code sollte aber daraus direkt ableitbar sein Anmerkung: Das Rechtecksymbol ist das allgemeine Symbol innerhalb der Struktogramme. Es kann jeder Befehl hineingeschrieben werden. Dr. Norbert Spangler / Informatik 28.10.2017 13

Sequenz i = i+1 j+=2 Ausgabe i und j Es dürfen auch mehrere Befehle in ein Rechteck. i = i+1 j+=2 Mehrere Rechtecke stehen direkt untereinander. Dies wird dann auch als Sequenz bezeichnet. Ausgabe i und j Dr. Norbert Spangler / Informatik 28.10.2017 14

4.5 Verzweigungen Verzweigungen dienen zur Fallunterscheidung, d.h. in Abhängigkeit von einer Bedingung soll zwischen verschiedenen Möglichkeiten der weiteren Befehlsausführung entschieden werden wie z.b. - beim Wurzelziehen (Radikand <0 ) - beim Suchen ( Vergleich mit dem gesuchten Element) - bei der Eingabe (zulässig ja/nein) -- der Anwender kann aus einer Reihe von Aktionen auswählen (Menue). Es gibt 3 Arten von Verzweigungen Verzweigungen mit if-else switch Auswahloperator Dr. Norbert Spangler / Informatik 28.10.2017 15

if ( x<y ) minimum=x; else minimum=y; Verzweigung mit if else : Beispiele if ( x<y ) { minimum=x; cout<<" das Minimum ist x"<<endl; } else { minimum=y; cout<<" das Minimum ist y"<<endl; } cout<< Der Wert des Minimums ist <<minimum<<endl; Einrücken und Klammern if/else stehen in derselben Spalte. Die Befehle im if- bzw. else-zweig sollten stets eingerückt werden: z.b. 3 Positionen Die Klammern sollten auf Höhe von if / else stehen Dr. Norbert Spangler / Informatik 28.10.2017 16

Verzweigung mit if-else : Allgemein if ( Bedingung ) Anweisung1 else Anweisung2 Anweisung3//naechste Anweisung nach dem if-else Wirkungsweise Auswertung der Bedingung = boolescher Ausdruck falls true : Führe Anweisung1 aus, dann kommt Anweisung3 falls false: Führe Anweisung2 aus, dann kommt Anweisung3 Anmerkung: -Mit Anweisung ist jeweils auch ein Block gemeint (siehe Musterprogramm). -Der else-zweig kann weggelassen werden. if ( Bedingung) Anweisung1 Anweisung3//naechste Anweisung Dr. Norbert Spangler / Informatik 28.10.2017 17

Struktogramm Dr. Norbert Spangler / Informatik 28.10.2017 18

Beispiel Sequenz: 2 Rechtecke untereinander Sequenz: 2 Rechtecke untereinander Dr. Norbert Spangler / Informatik 28.10.2017 19

// Werte Stromimpuls #include <iostream> using namespace std; void main() { double t; cin >> t ; if ( t < 0 ) cout << " Wert ist " << 0 <<endl; else { if ( t < 1 ) cout << " Wert ist " << t <<endl; else { if ( t < 2 ) cout << " Wert ist " << 2-t <<endl; else cout << " Wert ist " << 0 <<endl; } } } Verschachtelung Verschachtelung ja Ausgabe 0 t<0 ja Ausgabe t t<1 ja t<2 nein nein nein Ausgabe 2-t Ausgabe 0 if-else Befehle müssen immer vollständig im if oder else Teil eines übergeordneten if-else Befehls enthalten sein. Übliche Vorgehensweise: Von außen nach innen. Dr. Norbert Spangler / Programmieren I 28.10.2017 20

Alternative // Werte Stromimpuls #include <iostream> using namespace std; void main() { double t; cin >> t ; if ( t < 0 ) cout << " Wert ist " << 0 <<endl; else if ( t < 1 ) cout << " Wert ist " << t <<endl; else if ( t < 2 ) cout << " Wert ist " << 2-t <<endl; else cout << " Wert ist " << 0 <<endl; 1,2 1 0,8 0,6 0,4 0,2 0-1 -0,5 0 0,5 1 1,5 2 2,5 } if - else if - else if - else else if Kette Dr. Norbert Spangler / Informatik 28.10.2017 21

else if Kette if ( Bedingung1) Anweisung1 else if (Bedingung2) Anweisung2 else if... else Anweisungm Anweisungn Wirkungsweise Auswertung von Bedingung1 falls true : Führe Anweisung1 aus, dann Anweisungn falls false: Auswertung von Bedingung2 falls true : Führe Anweisung2 aus, dann Anweisungn falls false:... Dr. Norbert Spangler / Informatik 28.10.2017 22

Struktogramm Elsw-If-Kette Verschachtelung Else-If-Kette ja t<0 nein ja t<1 nein Ausgabe 0 Ausgabe t t<2 ja nein Ausgabe 2-t Ausgabe 0 Wie Verschachtelung Dr. Norbert Spangler / Informatik 28.10.2017 23

IF-Sünden Sünde 1: Abfrage boolschergrößen bool a;. if ( a==true)// a ist schon wahr oder falsch!!!! {} //kein Vergleich erforderlich Besser: if ( a ) {} bool b;. if ( b==false) {} Besser: if (!b ) {} Sünde 2: Namensvergabe bool keinfehler;// statt a wie oben if ( keinfehler ) {} bool fehler;// statt b wie oben if (!fehler ) {} Dr. Norbert Spangler / Informatik 28.10.2017 24

Sünde 3: Vergleiche IF-Sünden bool gleich; int wert, eingabe;. if (eingabe == wert) gleich=true; else gleich=false; bool ungleich; int wert,eingabe;. if eingabe!=wert) ungleich=true; else ungleich=false; Besser: gleich = (eingabe==wert); Besser: ungleich = (eingabe!=wert); Sünde 4: 2xif verschachtelt aber nur ein else ( Dangling else ) bool b1,b2, if (b1) if ( b2) cout<<"1"; else cout<<"2"; Wohin gehört das else? Was passiert? Was ist gewollt? Besser: geschweifte Klammern setzen Dr. Norbert Spangler / Informatik 28.10.2017 25

// Kleinrechner/switch #include <iostream> using namespace std; void main() { int i,j; char op; cin >> i >> op >> j; switch (op) { case '+' : } } case '-' : case '*' : case '/' : case '%' : default : Verzweigung mit Switch: Beispiel Rechner für Grundrechenarten und % cout << i << op << j <<" = " << i+j << endl; break; cout << i << op << j <<" = " << i-j << endl; break; cout << i << op << j <<" = " << i*j << endl; break; cout << i << op << j <<" = " << i/j << endl; break; cout << i << op << j <<" = " << i%j << endl; break; cout << " unzulässiger Operator " << endl; Dr. Norbert Spangler / Informatik 28.10.2017 26

switch switch ( ganzzahliger Wert ) { case konstante1 : Befehl;Befehl;...Befehl; break; case konstante2 : Befehl;Befehl;...Befehl; break;... Einrücken/Klammern Analog Verzweigung } default : Befehl;Befehl;...Befehl; Kann weggelassen werden Nicht empfehlenswert!!!!! Dr. Norbert Spangler / Informatik 28.10.2017 27

switch Wirkungsweise Bestimmung des Werts (muss ganzzahliger Typ sein) Vergleich mit den ganzzahligen Konstanten (alle verschieden) Bei Übereinstimmung mit einer Konstanten->Verzweigung zur case Marke. Ausführung der Befehle bis zum break, dann Verzweigung zum Ende (nach dem switch). Fehlt der break-befehl wird mit dem darauf folgenden Befehl fortgesetzt!!!!! Stimmt der Wert mit keiner Konstanten überein wird bei default fortgesetzt, Sofern vorhanden (wenn nicht, findet keine Aktion statt). Dr. Norbert Spangler / Informatik 28.10.2017 28

Struktogramm switch + - * / % sonst op Ausgabe Ausgabe Ausgabe Ausgabe Ausgabe Fehler i + j i - j i * j i / j i modulo j meldung Dr. Norbert Spangler / Informatik 28.10.2017 29

Gegenüberstellung Die else-if Kette ist universeller als switch. Sie kann mit beliebigen Bedingungen formuliert werden. Switch ist beschränkt auf den Vergleich ganzzahliger Ausdrücke (u.a. Aufzählungstyp!!), ist aber übersichtlicher, insbesondere wenn es viele Fälle sind. Dr. Norbert Spangler / Informatik 28.10.2017 30

Beispiel Anstelle von Verzweigung mit dem Auswahloperator Form : (Bedingung)? wert1: wert2; if ( x<y ) minimum = x; else minimum = y; Wirkung : Ist die Bedingung wahr, wird wert1 verwendet, sonst wert2. kann auch minimum = (x<y)? x : y; mit dem Auswahloperator? verwendetwerden (bedingte Bewertung). Der Auswahloperator wird bei größerenausdrücken schnell unübersichtlich wert=(t<0)?0:(t<1)?t:(t<2)?(2-t):0; Dr. Norbert Spangler / Informatik 28.10.2017 31

4.6 Schleifen Schleifen dienen dazu, eine Gruppe von Befehlen zu wiederholen etwa bei - Der Eingabe einer Tabelle von Zahlen - Berechnung des Durchschnitts einer großen Menge von Zahlen - Der Bestimmung des Minimums/Maximus einer Menge von Messwerten - Der Suche eines Elements in einer Tabelle -Der Anwender wird/kann beliebig oft Aktionen durchführen (Menue) Diese Wiederholungen finden solange statt, wie eine Wiederholungsbedingung (WB ) gilt: -Noch Daten da -Noch nicht alle Zahlen untersucht (bei Maximum, Minimum, Suche) WB ist üblicherweise ein Ausdruck vom Typ bool. Das Prinzip ist also.. WB prüfen Befehle ausführen WB prüfen. C++ kennt nun 3 verschiedene Arten von Schleifen Dr. Norbert Spangler / Informatik 28.10.2017 32

Übersicht Schleifen while-schleife (siehe Musterprogramm) while (WB) { Befehle } Arbeitsweise: WB Befehle WB Befehle WB do-while-schleife Einrücken/Klammer Analog Verzweigung do { Befehle } while (WB) Arbeitsweise: Befehle WB Befehle WB Befehle WB for-schleife (Verallgemeinerung der While-Schleife) Übliche Arbeitsweise: Zähler durchläuft Werte von anfang bis ende Dr. Norbert Spangler / Informatik 28.10.2017 33

While-Schleife while (WB) { Befehle } Arbeitsweise: Befehle WB Befehle WB Befehle WB while ( Wiederholungsbedingung) Anweisung1 Anweisung2//naechste Anweisung Wirkung (*) Werte Bedingung aus falls true : Führe Anweisung1 aus Mache weiter bei (*) falls false: Führe Anweisung2 aus Kopfgesteuerte Schleife Dr. Norbert Spangler / Informatik 28.10.2017 34

Struktogramm/Allgemein Dr. Norbert Spangler / Informatik 28.10.2017 35

Modellierung einer while-schleife 1) Identifizierung der Wiederholungsbedingung (WB) der Schleife (ev. Negation einer Abbruchbedingung) 2) Identifizierung aller Befehle, die wiederholt werden wie z.b.: nächste Daten lesen neue Summe berechnen zählen... 3) Ermittlung, ob die Schleife immer mindestens einmal durchlaufen wird falls ja: do while -> später andernfalls: while 4) Existenz von Befehlen unter 3) prüfen, welche WB ändern. Ansonsten ist es eine unendliche Schleife. Dr. Norbert Spangler / Informatik 28.10.2017 36

Beispiel Musterprogramm Aufgabe: es sollen positive Zahlen eingelesen und deren Summe berechnet werden. Bei Eingabe einer Zahl <=0 endet die Aufgabe. Wiederholungsbedingung (WB) : eingelesene Zahl > 0 Befehle in der Schleife : Summe bestimmen, neue Zahl lesen Mindestens einmal: nein, wenn die erste Zahl <= 0 ist -> while-schleife Änderung WB : ja da neue Zahl gelesen wird Dr. Norbert Spangler / Informatik 28.10.2017 37

Beispiel While-Schleife summe = 0 erste zahl lesen zahl>0 summe=summe+zahl zahl lesen summe weiter verarbeiten double summe=0.0, zahl; cin>>zahl; while ( zahl>0 ) { summe+=zahl; cin>>zahl; } //summe ist berechnet Übliche Vorgehensweise, wenn eine unbekannte Anzahl von Daten zu lesen ist: 1. Lesen (genauer 1. Leseversuch) direkt vor der Schleife 2. WB: Kontrolle der Eingabe 3. am Ende der Schleife: nächster Lesebefehl Dr. Norbert Spangler / Informatik 28.10.2017 38

do while Schleife do { Befehle } while (WB) Arbeitsweise: Befehle WB Befehle WB Befehle WB do Anweisung1 while ( Wiederholungsbedingung) Anweisung2 Wirkung (*) Führe Anweisung1 aus Werte WB (boolscher Ausdruck) aus falls true : Mache weiter bei (*) falls false: Führe Anweisung2 aus In einer do while Schleife wird die Anweisung in der Schleife mindestens 1 mal ausgeführt!!!! Fußgesteuerte Schleife Modellierung analog while-schleife Dr. Norbert Spangler / Informatik 28.10.2017 39

Struktogramm Dr. Norbert Spangler / Informatik 28.10.2017 40

Beispiel: do while Die do-while schleife ist selten. Typisch hierfür sind allenfalls Eingaben mit Plausibilitätskontrolle wie z.b. Es soll eine ganze Zahl größer 0 und kleiner gleich 100 eingelesen werden. do { cin>>zahl; } while ( zahl<=0 zahl>100 ) Allgemein Dr. Norbert Spangler / Programmieren I 28.10.2017 41

for-schleife- ein Beispiel Es sollen n ganze Zahlen gelesen und aufsummiert werden. n ist ebenfalls einzulesen. Hier steht die Anzahl der Wiederholungen zu Beginn der Schleife fest. int n,summe=0,zahl; cin>>n; for ( int zaehler=1; zaehler<=n; zaehler++) { cin>>zahl; summe+=zahl; } Einrücken/Klammer analog Verzweigung Wirkung Initialisierung(1 mal) : zaehler wird deklariert und 1 gesetzt * WB prüfen: ist zaehler<=n wie While-Schleife Befehle: zahl lesen und aufsummieren wie While-Schleife Reinitialisierung: zaehler erhöhen weiter bei * Dr. Norbert Spangler / Informatik 28.10.2017 42

for-schleife allgemein for (Anweisung1;Wiederholungsbedingung;Anweisung3) Anweisung2 Anweisung4//naechste Anweisung Wirkung Führe Anweisung1(=Initialisierung) aus (ev. mehrere durch Komma getrennt, Deklarationen sind üblich) Beispiel: int zaehler=1 (*) Werte die Wiederholungsbedingung aus Falls true : Führe Anweisung2 (Schleifenbefehle) aus Führe Anweisung3 (=Reinitialisierung) aus (ev. mehrere durch Komma getrennt) Weiter bei (*) Beispiel: zaehler<=n Beispiel: zaehler++ Falls false: Weiter mit dem ersten Befehl nach der Schleife Anweisung4 Dr. Norbert Spangler / Informatik 28.10.2017 43

Struktogramm/vereinfacht Die For-Schleife ist kopfgesteuert. Daher ist das Symbol identisch zur While-Schleife. Hinweis: Der structorizer schlägt hier ein anderes Symbol vor, welches üblicherweise als Endlosschleife verwendet wird. Wir werden es hier nicht verwenden!! Dr. Norbert Spangler / Informatik 28.10.2017 44

Modellierung von for-schleifen (Zählschleifen) Prinzipielles Vorgehen bei üblichen einfachen Schleifen 1. Bestimmung des Zählers und seines Anfangswertes, der Anzahl der Wiederholungen bzw. des Wertes wo die Schleife endet 2) Initialisierung: Zähler= Anfangswert 3) Wiederholungsbedingung: Zähler < =Endwert 4) Reinitialisierung: Zähler erhöhen 5) Identifizierung aller Befehle, die wiederholt werden wie z.b.: nächste Daten lesen neue Summe berechnen... Die Möglichkeiten einer for-schleife sind wesentlich weitreichender als hier dargestellt. Dr. Norbert Spangler / Informatik 28.10.2017 45

Struktogramm/Beispiel For-Schleife summe = 0 n lesen zaehler von 1 bis n zahl lesen summe=summe+zahl summe weiter verarbeiten Dr. Norbert Spangler / Informatik 28.10.2017 46

For-Schleife: Variationen Für eine Schleife über geraden Zahlen ändert man die Reinitialisierung for (int i=0 ; i<n ; i=i+2) {... } Für eine Rückwärtsschleife formuliert man beispielsweise wie folgt for (int k=m ; k>0 ; k=k-1)//alternative k-- {... } Eine Schleife über relle Zahlen for (double x=0.0; x<=1; x+=0.01) {... } Mehrere Befehle, durch Komma getrennt, bei Initialisierung und Reinitialisierung for ( i=1, k=100; i<n && k > 0; i=i+1,k=k-1) {... } Eine Endlosschleife for (; ;) // besser while(1) oder while(true) {... } Dr. Norbert Spangler / Informatik 28.10.2017 47

For-Schleife/ohne Zähler Die for-schleife ist ein sehr mächtiger Befehl, der prinzipiell jede Wiederholung modellieren kann. Dies ist dann oft sehr trickreich und meist schwer lesbar/verständlich. for (Datei oeffnen, hole erste Daten ; kein Dateiende ; lese naechste Daten) { verarbeite Daten } Initialisierung: Wiederholungsbedingung: Schleifenbefehle: Reinitialisierung: Datei oeffnen, ersten Datensatz lesen (Versuch) Leseversuch geglückt, Daten sind da Daten verarbeiten naechste Daten lesen (Versuch) Es ist lesbarer, dies mittels einer While-Schleife zu realisieren. Datei oeffnen; Erste Daten holen; while( kein Dateiende) { Daten verarbeiten; naechste Daten lesen; } Dr. Norbert Spangler / Informatik 28.10.2017 48

Schleifen: geänderter Ablauf break : Der Befehl break beendet sofort die aktuelle Schleife, in welcher dieser Befehl steht. Es geht mit dem ersten Befehl nach der Schleife weiter. while (true) // keine Endebedingung unendliche Schleife { if ( ) break; } continue : Der Befehl continue beendet die Befehle innerhalb der Schleife und setzt (bei for-schleifen mit der Reinitialisierung) und anschließender Überprüfung der Wiederholungsbedingung fort. for ( int i=0;i<1000;i++) { if ( ) continue; } break und continue werden oft nicht gerne gesehen Dr. Norbert Spangler / Informatik 28.10.2017 49

4.7 Ein-/Ausgabe Die Ein- und Ausgabe in C++ erfolgt üblicherweise mittels cin und cout. Dies sind jedoch keine Befehle sondern Objekte von Stream-Klassen. Die Klassen als wesentlicher Bestandteil der Objektorientierung wurden jedoch wegen der Fülle des Stoffes für diese einsemestrige Vorlesung weggelassen. Weiterhin werden die aus C stammenden Funktionen printf/scanf nicht betrachtet. Dr. Norbert Spangler / Informatik 28.10.2017 50

Ein-/Ausgabe mit cin/cout Es können ein aber auch mehrere Daten mit einem Aufruf bearbeitet werden. Formatierungen sind mittel I/O-Manipulatoren möglich. cin>>x; cin>>a>>b>>c; cout<<i; cout<<"ergebnis "<<i<<endl; cout<<setw(10)<<setprecision(5)<<fixed<<d<<endl;//mit Manipulatoren Dr. Norbert Spangler / Informatik 28.10.2017 51

Weitere Ein-/Ausgabebefehle character c1;// Variable fuer Zeichen put schreibt ein Zeichen cout.put(c1); get liest das nächste Zeichen, welches auch ein Whitespace-Zeichen sein kann! cin.get(c1); read/write Lesen und Schreiben von character-arrays (später) cin.read(c,10) bzw. cout.write(c,10) für jeweils 10 Zeichen getline Lesen von Zeichen in eine Variable vom Typ String bis zumauftreten eines Begrenzungszeichens. getline(cin,name) Stringvariable name / Begrenzungszeichen newline getlinie(cin,name,'#') Stringvariable name / Begrenzungszeichen # Dr. Norbert Spangler / Informatik 28.10.2017 52

4.8 Sonstige Befehle returnausdruck Beendigung einer Funktion mit dem Wert desausdrucks als Funktionswert-> Kap. Funktionen return beendigung einer Funktion vom Typ void exit(n) goto marke Beendigung des Programms :Fehlercode n (ganze Zahl) Verzweigung zu einer Marke / soll nicht verwendet werden schlechter Programmierstil Dr. Norbert Spangler / Informatik 28.10.2017 53

4.9 Beispiel for Es sollen n Zahlen eingelesen und ihr Maximum berechnet werden. Zusätzlich ist die Nummer der eingelesenen Zahl, welche,das Maximum ist, zu bestimmen. n ist voher einzulesen. Testplan Nr. Achtung: bei Maximum/Minimumsuche als Anfangswert immer das erste Element wählen Fall Eingabe n Zahlen 0 Ergebnis Nummer Max Meldung 1 Keine Zahl 2 Eine Zahl 1 5 1 5 3 Normal/Anfang 3 8 5 1 1 8 4 Normal/Mitte 3 5 8 1 2 8 5 Normal/Ende 3 5 1 8 3 8 6 Gleiche Zahlen 3 8 1 8 1 8 Dr. Norbert Spangler / Informatik 28.10.2017 54

Beispiel for void main() { int n; cout<<"n einlesen "; cin >>n; if ( n<=0 ) cout<<" keine Zahlen gelesen "<<endl; else { int zahl, nummer=1; cin>>zahl; int maximum=zahl; for ( int i=2 ; i<=n ; i++ ) // Zaehlvariable in der Schleife deklarieren { cin>>zahl; if ( zahl>maximum ) { maximum=zahl; nummer=i; } } cout<<"maximum "<<maximum<<" = "<<nummer<<". Zahl"<<endl; } } Initialisierung : i=2 (Zählvariable auf den Anfangswertsetzen) Wiederholungsbedingung: i<=n (Zählvariable abfragen) Reinitialisierung: i=i+1 (Zählvariable hochzählen Dr. Norbert Dr. Norbert Spangler Spangler / Informatik / Programmieren I 28.10.2017 55

In einem Programm sollen positive ganze Zahlen eingelesen und deren Durchschnitt berechnet werden. Das Programm endet, wenn eine negative Zahl oder 0 eingegeben wird. Danach sind Durchschnitt und Anzahl der gelesenen Zahlen am Bildschirm auszugeben. 4.10 Beispiele/while Achtung: Hier ist die Anzahl der Wiederholungen zu Beginn der Schleife nicht bekannt -> While-Schleife empfohlen Dr. Norbert Spangler / Informatik 28.10.2017 56

Beispiele/while // Lesen von positiven Zahlen #include <iostream> using namespace std; void main() { int anzahl=0,eingabezahl; float summe=0.0; // Erste Zahl eingeben cout << " Bitte positive Zahl eingeben " << endl; cout << " Abbruch mit 0 " << endl; cin >> eingabezahl; //Schleife while (eingabezahl>0) { anzahl=anzahl+1; summ=summe+eingabezahl; } //Ergebnis ausgeben } cout << " Bitte naechste Zahl eingeben/abbruch mit 0 " << endl; cin >> eingabezahl; cout << " Der Durchschnitt ist : " << summe/anzahl << endl; cout << " Es wurden "<<anzahl<<" Zahlen gelesen"<<endl; Welche Testfälle sollte man wählen? Welche Schwächen hat dieses Programm? Dr. Norbert Spangler / Informatik 28.10.2017 57

Beispiele/while Ein guter Testplan hätte die Schwächen des Programms aufgedeckt. Der Fall n=0 sollte noch nach der Schleife abgefangen werden. Testplan Nr. Fall Eingabe Ergebnis Zahlen Durchschnitt Anzahl 1 Keine Zahl 0????????? 0 2 Eine Zahl 2,2 0 2,2 1 3 Normalfall 1 0,3 2 0 1,1 3 Dr. Norbert Spangler / Informatik 28.10.2017 58

Beispiele/while // Lesen von positiven Zahlen #include <iostream> using namespace std; void main() { int anzahl=0,eingabezahl; float summe=0.0; // Erste Zahl eingeben cout << " Bitte positive Zahl eingeben " << endl; cout << " Abbruch mit 0 " << endl; cin >> eingabezahl; //Schleife while (eingabezahl>0) { anzahl=anzahl+1; summ=summe+eingabezahl; cout << " Bitte naechste Zahl eingeben/abbruch mit 0 " << endl; cin >> eingabezahl; } //Ergebnis ausgeben if ( anzahl==0 ) cout<<" keine Zahlen gelesen"<<endl; else { } cout << " Der Durchschnitt ist : " << summe/anzahl << endl; cout << " Es wurden "<<anzahl<<" Zahlen gelesen"<<endl; } Durch die Berücksichtigung des Testfalls "keine Zahlen" ( Testplan! ) ergibt sich ein geänderter Programmcode. Dr. Norbert Spangler / Informatik 28.10.2017 59

Der Anwender soll eine Zahl n>0 eingeben. 4.11 Beispiel do while void main() { int n; do { cout<<endl; cout<<" Zahl > 0 eingeben "; cin>>n; } while(n<=0) // jetzt geht s weiter } Nachteil: Der Anwender bekommt keinen Hinweis, dass seine letzte Eingabe fehlerhaft war. Aber: Do-While Schleifen kommen selten vor. Dr. Norbert Spangler / Informatik 28.10.2017 60

4.12 Übung Schleife und switch Es soll in einem Auswahlmenue der Anwender gefragt werden, welche Aktion er durchführen will bzw. ob erdie Durchführung von Aktionen abbrechenwill. Als Aktionen sollen der Einfachheit dieaktionen Ausgabe " AktionA" Ausgabe " AktionF" vorgegeben sein. Erstellen Sie ein entsprechendes Programm. Tipp: Lesen sie Zeichen (char) ein für die Wahldes Menuepunktes und keine Zahlen. Sie ersparen sich Fehleingaben. Dr. Norbert Spangler / Informatik 28.10.2017 61

Übung Schleife und switch Testplan Nr. Fall Eingabe Ergebnis 1 Wahl A A Aktion A: Ausgabe A 2 Wahl B B Aktion B: Ausgabe B 3 Wahl C C Aktion C: Ausgabe C 4 Wahl D D Aktion D: Ausgabe D 5 Wahl E E Aktion E: Ausgabe E 6 Wahl F F Aktion F: Ausgabe F 7 Ende X Programmende Struktogramm und Programm zur Übung Dr. Norbert Spangler / Informatik 28.10.2017 62

4.13.Vorgehensweise Struktogramme Von außen nach innen TOP DOWN Einzelne Rechtecke erst mit Stichwort zusammenfassend beschreiben und dann detaillieren Dr. Norbert Spangler / Programmieren I 28.10.2017 63

4.14 echte Klausurerlebnisse