4. Ablaufsteuerung (Kontrollstrukturen)

Slides:



Advertisements
Ähnliche Präsentationen
OStR Dipl. Ing. Carsten Kraft
Advertisements

Forschungszentrum caesar
Hochschule Fulda – FB ET Sommersemester 2010
Verzweigung oder bedingte Anweisung Weiter mit PP.
3. Berechenbarkeit Wann ist eine Funktion (über den natürlichen Zahlen) berechenbar? Intuitiv: Wenn es einen Algorithmus gibt, der sie berechnet! Was heißt,
der Universität Oldenburg
SWITCH - Anweisung.
SWITCH - Anweisung.
ARRAY oder FELD oder VEKTOR
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Zusammenfassung Vorwoche
Die Skriptsprache Perl (2) Wolfgang Friebel DESY Zeuthen.
Einführung in C++ und das objektorientierte Programmieren (OOP)
DVG Ablaufsteuerung
Struktogramme IF-ELSE FOR – Schleife
Informatik 1 Übung 2.
Zustandsautomat.
Präsentation C Tutorium von Daniel J. Nowak Folie 1 C Tutorium.
Einführung in die Programmierung
Einführung in die Programmiersprache C 4
Wiederholte Programmausführung
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
University of Applied Sciences Übung Objektorientierte Programmierung II Dipl.-Inf. (FH) Markus Vogler.
Programmbereich, zu dem eine Deklaration gehört Arten von Gültigkeitsbereichen -Namespace : Deklarationen von Klassen, Interfaces, Structs, Enums, Delegates.
Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014.
Einführung in PHP.
Einführung in PHP 5.
Agenda für heute, 7. April, 2005 Bedingte ProgrammausführungBedingte Programmausführung Algorithmische Grundlagen Vergleichsoperatoren, Wahrheitswerte.
BMEVIEEA100 Grundlagen der Programmierung
Vorlesung 3. if else Anweisung if (Ausdruck) Anweisung1 else Anweisung2 Ausdruck hat einen von 0 verschiedenen Wert, so wird Anweisung 1 ausgeführt. Bei.
PHP: Operatoren und Kontrollstrukturen
Beispiel 8 aus den Vorlesungsbeispielen (2) Struktogrammentwurf schrittweise.
Hochschule Fulda – FB ET Sommersemester 2014
A) Erklären Sie den Datentyp char. b) Erklären Sie den Datentyp Struct c) Erklären Sie die Wirkungsweise des Operators & bei Anwendung im Zusammenhang.
Software Engineering Struktogramme
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
Wann ist eine Funktion (über den natürlichen Zahlen) berechenbar?
Einführung in die Programmiersprache C 2
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
Funktionen. Aufgabe : Eingabe zweier Zahlen ---> Minimum bestimmen Dann nochmals Eingabe zweier Zahlen ---> Minimum bestimmen.
TRUE und FALSE in C Der Wert 0 steht für FALSE Jeder von 0 verschiedene Wert steht für TRUE FALSE wird als 0 dargestellt TRUE wird als 1 dargestellt.
FOR Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm.
Inhalte der Übungen 1.Grundlagen, Ein- und Ausgabe 2.Kontrollstrukturen (Projekt 1) 3.Funktionen 4.Zeiger, Felder (Projekt 2) 5.Strings, Strukturen 6.Fileverarbeitung.
1 Arrays und Schleifen Özgü & Tim. 2 Inhaltsverzeichnis Arrays Was ist ein Array? Bauanleitung Beispiel Matrix Fehler Schleifen Wofür Schleifen? While-Schleife.
Operatoren, Kontrollstrukturen und Funktionen. Logische Operatoren  zum Vergleich zweier Ausdrücke  ==, !=,, =  Ergebnis ist vom Typ bool  Achtung!
Wiederholte Programmausführung
Praktische Informatik 1
Hello World! Javakurs 2013 Arne Kappen
JavaKara programmieren: Verzweigungen
Datentypen: integer, char, string, boolean
Java-Kurs - 4. Übung weitere Kontrollstrukturen
Kontrollstrukturen von Algorithmen
Struktogramme.
Datentypen: integer, char, string, boolean
Durchschnitt (verbal)
Java-Kurs - 2. Übung primitive Datentypen, Konstanten
Unterschiedliche Kontrollstrukturen
Syntax: while ( BEDINGUNG ) { // Anweisungen die so lange immer wieder ausgeführt // werden, wie die Bedingung zutrifft } for (INITIALISIERUNG; BEDINGUNG;
SS 04 Christiane Rauh Christian Hellinger
Arten von Kontrollstrukturen
Arrays in Java Ein Array ist eine Variable, die aus einer An-zahl von Elementen des gleichen Datentyps besteht, die aufeinanderfolgend im Speicher liegen.
Unterschiedliche Arten von Kontrollstrukturen
Schleifen mit der Turtle
Algorithmen.
Arrays in Java Ein Array ist eine Variable, die aus einer An-zahl von Elementen des gleichen Datentyps besteht, die aufeinanderfolgend im Speicher liegen.
Arrays in C Ein Array ist eine Variable, die aus einer Anzahl von Elementen des gleichen Datentyps besteht, die aufeinanderfolgend im Speicher liegen.
REKURSION + ITERATION.
Datentyp- umwandlung.
Schleifen Datenfelder (Arrays) Verzweigungen
 Präsentation transkript:

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

4.1 Anweisungen Ein Programm besteht aus einer Folge von Anweisungen. Routinenaufruf Zuweisung Leere Anweisung Anweisung mit Marke Iterationsanweisung Anweisungsblock Auswahlanweisung Sprunganweisung

Wertzuweisung (1) ("Ergibt-Anweisung", assignment statement) Berechnung des rechts stehenden Ausdrucks Wertzuweisung an die links stehende Variable (den L-Wert) Zuweisung L-Wert Zuweisungsoperator Ausdruck ; Empfehlung: Der Ausdruck sollte denselben Datentyp haben wie die Variable. Wenn dies nicht der Fall ist, sollte ein expliziter typecast durchgeführt werden.

Wertzuweisung (2) Beispiel: summe += 4; /* identisch mit summe = summe + 4; */ produkt *= i; /* identisch mit produkt = produkt * i; */ Dadurch, dass Zuweisungen syntaktisch selbst Ausdrücke sind, sind "Mehr-fachzuweisungen" in C möglich! a = b = c = 0.0; if ((c = getc(datei)) != EOF) ... ... Man beachte die Klammerung wegen der Vorrangregeln. Die Initialisierung mehrerer Werte und die Verwendung als Operand sind typische Anwendungen.

Wertzuweisung ungleich Vergleichsoperator! i = i + 1; ist eine Wertzuweisung an i, neuer Wert ist alter Wert + 1 i == i + 1; ist ein Boole'scher Ausdruck, der immer false ist. Aber: syntaktisch korrekt! Kann ersetzt werden durch 0 (false).

Beispiele für Wertzuweisungen Deklaration der Variablen: int i, j, k; double x, y, z; int fertig; i = j/k+i; z = x/y; fertig = (z < j) && !(x == y); i = j/x; /* implizite Typkonvertierung */ i = z/x+15; /* implizite Typkonvertierung */ fertig = 1&&x; /* zugewiesen wird 0 oder 1! */

Folgen von einfachen Anweisungen (Sequenz) Anweisungen, sequentiell aufgeschrieben, getrennt durch ";" Sequenz Anweisung Beispiel a = b; x = y+3; z = 17; a = 3*87-5; wahr = (x < 5) || (y > 20);

Ein erstes Programm /* Programm Produkt */ int main () { float x, y, prod; x = 3.5; y = 27.8; prod = x*y; }

Anweisungsblock Anweisungsblock Deklaration Anweisungs- sequenz } { Ein Anweisungsblock kann überall da stehen, wo eine einfache Anweisung stehen kann, insbesondere in Abhängigkeit von einer Bedingung im Rumpf einer Schleife. Der ausführbare Teil eines C-Programms kann als Anweisungsblock auf-gefasst werden. Siehe auch die rekursive Verwendung von "Anweisung" im Syntax-Diagramm. In C kann zu Beginn jedes Anweisungsblocks eine Variablendeklaration ein-gefügt werden. Die hier deklarierten Variablen sind dann jedoch nur inner-halb des Blockes gültig.

4.2 Selektion (bedingte Anweisung) (1) if - Anweisung Ausdruck ) ( if Anweisung else

Selektion (bedingte Anweisung) (2) Anmerkung 1 Als "Anweisung" tritt häufig eine zusammengesetzte Anweisung (ein Anwei-sungsblock) der Form { Anweisung; Anweisung; . . . Anweisung; } auf, die dann als Ganzes von der Bedingung abhängt.

Selektion (bedingte Anweisung) (3) Anmerkung 2 Eine bedingte Anweisung der Form if Ausdruck Anweisung; Anweisung; else Anweisung; ist syntaktisch falsch!

Geschachtelte if-Anweisungen Die Zugehörigkeit der else-Klausel zur if-Klausel wird üblicherweise durch Einrückung deutlich gemacht. Die Einrückung ist aber nicht signi-fikant für den Compiler! Regel: Ein else gehört immer zu dem letzten if, das noch keine else-Klausel hat.

Beispiel: Knobelspiel Zwei Spieler geben unabhängig voneinander gleichzeitig je eine nicht-nega-tive ganze Zahl an (etwa durch Ausstrecken von Fingern auf Kommando oder durch verdecktes Aufschreiben). Nennen beide Spieler die gleiche Zahl, so endet das Spiel unentschieden; andernfalls gewinnt, falls die Summe der genannten Zahlen gerade ist, der Spieler, der die kleinere Zahl genannt hat, und sonst (falls also die Summe ungerade ist) derjenige, der die größere Zahl genannt hat.

Erster Entwurf /* PROGRAMM Knobelspiel */ int main () { /* Variablen deklarieren */ /* ... */ if (eingabe fehlerhaft) {meldung} else {Entscheidung} }

Schrittweise Verfeinerung (1) Die Entscheidung lässt sich schreiben als if (eingaben gleich) {unentschieden} else {ermittle sieger} Der Sieger kann ermittelt werden mit If (summe gerade) {kleinerer siegt} else {grösserer siegt}

Schrittweise Verfeinerung (2) Um anzugeben, welcher der beiden Spieler (der erste oder der zweite) gewonnen hat, kann man den Sieg des Spielers mit der kleineren Zahl beschreiben als if (erster spieler kleinere zahl) {erster spieler siegt} else {zweiter spieler siegt} Der Sieg des Spielers mit der größeren Zahl wird beschrieben als if (erster spieler grössere zahl)

Programm "Knobelspiel" in Pseudo-Code /* Variablendeklaration */ int main () { {eingabe} if (eingabe fehlerhaft) {meldung} else if (eingaben gleich) {unentschieden} if (summe gerade) if (erster Spieler kleinere zahl) {erster spieler siegt} else {zweiter spieler siegt} else /* summe ungerade */ if (erster spieler grössere zahl) {erster spieler gewinnt} else {zweiter spieler siegt} } /* main */

Programm "Knobelspiel" in C (1) int main () { int k,l; printf ("Bitte die beiden Knobelwerte eingeben:"); scanf ("%d \n", &k); scanf ("%d \n", &l); /* "call by reference" - Erklärung folgt später */ if ((k<0) || (l<0)) printf ("unzulässige Eingabe"); else if (k == l) printf ("unentschieden"); if (((k + l) % 2) == 0) /* gerade Summe */ if (k < l)

Programm "Knobelspiel" in C (2) printf ("1. Spieler siegt"); else printf ("2. Spieler siegt"); else /* ungerade Summe */ if (k > l) } /* main */

Mehrfach-Selektion (Fallunterscheidung) (1) Die Mehrfachselektion ist eine Auswahlanweisung für die Auswahl zwischen mehre-ren Alternativen. Es wird untersucht, ob ein Ausdruck einen von mehreren konstanten ganzzahligen Werten besitzt, und entsprechend verzweigt. Mehrfachauswahl switch ( ) Ausdruck Listenelement } { : Anweisung Case- Marke break; default

Mehrfach-Selektion (Fallunterscheidung) (2) Die default-Klausel kann höchstens einmal am Ende der Liste verwendet werden. Die case-Marke: Case- Marke case konstanter Ausdruck

Beispiel Mehrfach-Selektion (1) int main () { typedef enum {sieben, acht, neun, zehn, bube, dame, koenig, as} spielkartentyp ; spielkartentyp karte; int wert; switch (karte) { case sieben : wert = 7; break; case acht : wert = 8; break; case neun : wert = 9; break; case zehn : case bube : case dame : case koenig : wert = 10; break; case as : wert = 11; break; default : wert = 0; }

Beispiel Mehrfach-Selektion (2) Merke: Die Anweisungen in einem switch-Block werden sequentiell abgearbeitet. Die break-Anweisung bewirkt ein Verlassen des Blocks. Einen case-Block ohne eine break-Anweisung abzuschließen bewirkt, dass alle darauf fol-genden case-Blöcke bis zu einem break oder gar dem Ende der switch-Anweisung ausgeführt werden. Beispiel: int x = 0, y; switch (x) { case 0 : y = 1; case 1 : y = 2; break; case 2 : y = 3; break; default : } Der Programmierer wollte für den Fall x = 0 der Variablen y den Wert 1 zu-weisen. So aber erhält für x=0 y den Wert 2!

4.3 Iteration (Schleife) Es gibt drei Varianten von Iterationsanweisungen: do-Schleife while-Schleife for-Schleife do - Schleife do Anweisung ; ) while ( Ausdruck Merke: Die „Weitermachbedingung“ wird jeweils nach der Ausführung der Anwei-sung geprüft.

while-Schleife Merke: Bedingungsschleife while ) ( Ausdruck Anweisung Merke: Die „Weitermachbedingung“ wird jeweils vor der Ausführung der Anwei-sung geprüft.

for-Schleife ("Zählschleife") (1) Die for-Schleife (Zählschleife) sieht allgemein wie folgt aus: Zählschleife ( ; for Ausdruck 1 Ausdruck 2 ) Ausdruck 3 Anweisung

for-Schleife ("Zählschleife") (2) Ausdruck 1 wird nur einmal berechnet und dient zur Initialisierung der Schleife (in der Regel zur Anfangszuweisung an die Kontrollvariable). Ausdruck 2 ist in der Regel eine Abbruchbedingung. Sie wird vor jedem Schleifendurchlauf berechnet. Die for-Schleife bricht ab, falls Ausdruck 2 = 0 ist. Ausdruck 3 wird nach jeder Wiederholung berechnet und gibt deshalb eine Reinitialisierung für jeden Durchlauf an (in der Regel eine Kontroll-variablenänderung).

Analogie zwischen for- und while-Schleife Eine for-Schleife der Syntax for (expr1; expr2; expr3) Anweisungsblock; ist äquivalent zur folgenden while-Schleifen-Konstruktion: expr1; while (expr2) { expr3; } Die for-Schleife ist immer dann sinnvoll, wenn die Anzahl der Wiederholun-gen im Voraus bekannt ist.

Beispiel für eine for-Schleife int main() { int kalt, warm, temp; printf ("Bitte Unter- und Obergrenze für Temperatur eingeben (in Grad Celsius)"); scanf ("%d %d", &kalt, &warm); printf ("Celsius Fahrenheit \n"); for (temp = kalt; temp <= warm; temp++) printf ("%d %d \n", temp, (9*temp/5+32)); }

continue in Schleifen continue bewirkt, dass der Schleifenblock nicht weiter abgearbeitet wird, sondern sofort mit dem nächsten Schleifendurchlauf begonnen wird. Beispiel: #define N 10 int i, a[N]; for (i=0; i < N; i++) { /* negative Elemente werden nicht bearbeitet */ if (a[i] < 0) continue; /* Bearbeitung positiver Elemente */ ... }

break in Schleifen Wie in der switch-Anweisung bewirkt break auch in der Schleife, dass die ganze Schleife verlassen wird. Beispiel: Im obigen Beispiel würde break an der Stelle von continue bewirken, dass beim ersten negativen Element die Bearbeitung des gesamten Arrays abgebrochen wird.

while-Schleife mit Abbruch in der Mitte Man könnte sich auch eine Iteration vorstellen, bei der eine Abbruchbeding-ung an beliebiger Stelle zwischen Schleifenbeginn und Schleifenende steht: beginloop statement; statement; if (expr) then quitloop; statement; statement endloop; Eine solche Anordnung der Abbruchbedingung ist in C in der while-Schleife möglich: while (1) { /* entspricht while (true) */ Anweisung; Anweisung; if (Ausdruck) break; }

4.4 Flussdiagramm (Programmablaufplan) Ein Hilfsmittel zur Visualisierung von Abläufen (Kontrollstrukturen). Es gibt genormte Symbole für verschiedene ausführbare Anweisungen. Symbol für Anfang und Ende Anfang Lies kapital, zinssatz, tage Symbol für Eingabe und Ausgabe berechne zins drucke zins Ende

Selektion im Flussdiagramm gehe ins Kino regnet es? gehe spazieren gehe nach Hause ja nein Verzweigungssymbol (enthält eine Bedingung)

Mehrfach-Auswahl im Flussdiagramm Mahnungs- art =1 Fehler ja nein schreibe „Ich weiß, dass...“ Mahnungs- art =2 schreibe „Die nach- stehenden Rechnungen ...“ Mahnungs- art =3 schreibe „Trotz 1. und 2. Mahnung haben Sie...“

Iteration im Flussdiagramm Bedingung Anweisung(en) Die Bedingung wird vor der Ausführung der Schleife geprüft. Das Diagramm entspricht also einer while-Schleife.