9 Steueranweisungen. if... then if... then... else case... of goto. Gliederung. 9.1 Die einseitige Verzweigung if... then...2

Ähnliche Dokumente
10 Wiederholungsanweisungen

15 Der strukturierte Datentyp»set«(Mengen)

(Aufgaben zu Wertzuweisungen siehe Vorlesungsbeilage S. 49)

Java Anweisungen und Ablaufsteuerung

2.2 Einfache Datenstrukturen

Datentypen: integer, char, string, boolean

Syntax der Sprache PASCAL

Einstieg in die Informatik mit Java

Javakurs für Anfänger

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

Einstieg in die Informatik mit Java

Javakurs für Anfänger

Einstieg in die Informatik mit Java

1953/54 (USA) PS FORTRAN (FORmula TRANslating system) 1958/60 (Europa) ALGOL (ALGOrithmic Language)

Einstieg in die Informatik mit Java

16 Der strukturierte Datentyp "record"

FACHHOCHSCHULE AUGSBURG Hochschule für Technik, Wirtschaft und Gestaltung

Einstieg in die Informatik mit Java

Einfache Bedingte Ausführung

4.Grundsätzliche Programmentwicklungsmethoden

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

Einführung in die Programmierung Wintersemester 2011/12

Grundlegende Programmstrukturen sind Sequenzen, Schleifen und Entscheidungen.

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

Um mit dem Computer über ein Programm in Kontakt treten zu können braucht man sogenannte Ein- und Ausgabebefehle.

Einführung in die Programmierung

Informatik I Übung, Woche 40

5. Strukturierte Programmierung

Algorithmen & Programmierung. Steuerstrukturen im Detail Selektion und Iteration

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

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

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

1.3 Handhabung eines Programmiersystems

Informatik I Übung, Woche 41

Objektorientierte Programmierung

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

Unterlagen. CPP-Uebungen-08/

2.5 Programmstrukturen Entscheidung / Alternative

Informatik für Ingenieure (InfIng)

Kontrollstrukturen -- Entscheidungen, Abfragen und Fallunterscheidungen

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

Kontrollstrukturen Blöcke / Schleifen / Bedingungen

Intensivübung zu Algorithmen und Datenstrukturen

3. Anweisungen und Kontrollstrukturen

Java Übung. Übung 2. Werner Gaulke. 19. April Universität Duisburg-Essen Kommedia, Übung EinPro SS06, Einführung in Java - Übung.

Abschnitt 5. Grundlagen der funktionalen & imperativen Programmierung

Einführung in die Programmierung I. 4. Kontrollstrukturen. Stefan Zimmer

Informatik I Übung, Woche 40

Android-Apps Gegenüberstellung Delphi java

5. Elementare Befehle und Struktogramme

Schleifen Datenfelder (Arrays) Verzweigungen

Einstieg in die Informatik mit Java

Vorlesung Informatik II

Einführung in die Programmierung II. 3. Kontrollstrukturen

Offenbar hängt das Ergebnis nur von der Summe der beiden Argumente ab...

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

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

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

Programmiertechnik Kontrollstrukturen

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

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

Herzlich willkommen!

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

Institut für Computational Science Prof. Dr. H. Hinterberger. Praxismodul 1. Einführung in die Programmierung Erste Programme

12 == 12 true 12 == 21 false 4 === 7 true 4 === "vier" false 4 === 4.0 false 12!= 13 true 12!== 12 false 12!== 12.0 true. 1 < 3 true 3 < 1 false

4.4 Imperative Algorithmen Prozeduren

Elementare Konzepte von

Vorkurs Informatik WiSe 16/17

Einstieg in die Informatik mit Java

DFÜ-Skript-Befehlssprache Zur Unterstützung bei der Skripterstellung für das DFÜ-Netzwerk

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

Anweisungen. Ausdrucksanweisungen. Null-Anweisungen. Kapitel 4 KAPITEL 4

Tag 2 Repetitorium Informatik (Java)

Grundlagen der Programmierung Teil1 Einheit III Okt. 2009

einseitige Selektion zweiseitige Selektion

EINI LogWing/WiMa. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 17/18

Einführung in die Programmierung mit VBA

Flussdiagramm / Programmablaufplan (PAP)

Informatik I (D-MAVT)

Vorsichtige Programmierer verwenden Inkrement- Operatoren nicht in komplizierteren Ausdrücken

Anweisungen in Fortran - Wertzuweisung

Visual Basic Ricardo Hernández García 1. Ausgabe, März Grundlagen der Programmierung

Grundlagen der Programmiersprache C für Studierende der Naturwissenschaften

Programmieren 1 C Überblick

Programmierkurs I. Gliederung: Deklarationsteil als BNF 2. Blöcke in Ada95 (Lebenszeit, Sichtbarkeit von Variablen)

Grundlagen der Informatik 4. Kontrollstrukturen I

Schleifenprogrammierung in C/C++, Fortran und Pascal

Martin Unold INFORMATIK. Geoinformatik und Vermessung

3/4/2009. Schalter: Ein vs. Aus Lochkarten: Loch vs. Kein Loch Boolean/Wahrheitswerte: true vs. false

PIC16 Programmierung in HITECH-C

EINI WiMa. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 11/12

BKTM - Programmieren leicht gemacht.

Informatik I (D-ITET)

Transkript:

Dr. K. Haller Turbo-Pascal Kap. 9: Steueranweisungen 9-1 9 Steueranweisungen if... then if... then... else case... of goto Gliederung 9.1 Die einseitige Verzweigung if... then...2 9.2 Die zweiseitige Verzweigung if... then... else...3 9.3 Verschachtelung von Verzweigungen...5 9.4 Selektion mit case... of...6 9.5 Die Sprunganweisung goto...8

9-2 Dr. K. Haller Turbo-Pascal Kap. 9: Steueranweisungen Der lineare Programmablauf kann durch Verzweigungen und durch Sprünge nach vorwärts/rückwärts verändert werden. 9.1 Die einseitige Verzweigung if... then Zweck: Programmablauf in Abhängigkeit von einer Bedingung einseitig verzweigen. Format 1: if bedingung then a1; Eine a1 a2; Nächste a2 Format 2: if bedingung then Mehr als eine : Mit "" und "end" a11; zu einem sa12; block klammern...; (compound statement) a1n; end; a2; Nächste a2 bedingung: Boolescher Ausdruck. Wenn die Auswertung "True" ergibt, wird die nach "then" stehende a1 (bzw. der sblock) ausgeführt, sonst nicht. Anschließend wird mit der nach "if... then" stehende, die schematisch mit a2 bezeichnet werden soll, fortgesetzt. Wenn die Bedingung nicht zutrifft, wird gleich mit a2 fortgesetzt. a1 kann eine beliebige sein und inbesondere auch wieder "if... then" enthalten. Mehr dazu im Kapitel 9.3. Der boolesche Ausdruck kann beliebige relationale Operatoren (=, <, >, <=, >=, <>) und logische Operatoren (not, and, or, xor) enthalten. Die Priorität der Operatoren ist in Kapitel 8 behandelt (Stufe 1 = höchste Priorität: not, Stufe 2: and, Stufe 3: or, xor). Die relationalen Operatoren haben die Prioritätsstufe 4. Eine andere Abarbeitung muß durch Klammersetzung erzwungen werden. 1. Beispiel: if x = 4711 then WriteLn('Anton Huber'); schöner: if (x = 4711) { In C Klammerung immer notwendig } then WriteLn('Anton Huber'); 2. Beispiel: if (x = 4711) and (y <> 0) { Klammerung notwendig! } then WriteLn('Anton Huber');

Dr. K. Haller Turbo-Pascal Kap. 9: Steueranweisungen 9-3 Graphische Darstellung der einseitigen Verzweigung: a) im Programmablaufplan b) im Struktogramm: PAP (Flußdiagramm): a1 Bedingung a1 Bedingung./. a2 a2 program Pas09011; { Demo: Einseitige Programmverzweigung if..then } i: Integer; Write('Geben Sie die Geheimzahl ein: '); ReadLn(i); if i = 4711 then WriteLn('Sie haben die Geheimzahl erraten!'); WriteLn('Drücken Sie die Taste ENTER. Dann erpart man sich in '); Write( 'Turbo-Pascal das lästige Fenster-Umschalten.' ); ReadLn; { "ReadLn" Warten auf ENTER } 9.2 Die zweiseitige Verzweigung if... then... else Zweck: Programmablauf in Abhängigkeit von einer Bedingung zweiseitig verzweigen. Format: if bedingung then a1true { Kein Semikolon vor diesem "else" } else a1false; a2; { Nächste } Zu bedingung siehe 9.1. Wenn die Auswertung der Bedingung "True" ergibt, wird a1true ausgeführt, anderenfalls a1false. Wenn a1true oder a1false aus mehreren en bestehen, dann

9-4 Dr. K. Haller Turbo-Pascal Kap. 9: Steueranweisungen wie bei 9.1 mit "" und "end" zu einem sblock klammern. Die Programmfortsetzung erfolgt nach der Verzweigung mit der folgenden a2. Man beachte, daß vor dem»else«-zweig einer zweiseitigen Verzweigung kein Semikolon stehen darf! Graphische Darstellung der zweiseitigen Verzweigung: a) im Programmablaufplan b) im Struktogramm: PAP (Flußdiagramm): Bedingung a1true a1false a1true Bedingung a1false a2 a2 program Pas09021; { Demo: Zweiseitige Programmverzweigung "if... then... else" } i: Integer; Write('Geben Sie die Geheimzahl ein: '); ReadLn(i); if i = 4711 then WriteLn('Sie haben die Geheimzahl erraten!') { kein ";" } else WriteLn(#7); { Steuerzeichen #7: Bell } WriteLn('Sie haben die Geheimzahl vergessen!'); WriteLn('Das nächste mal zerstöre ich alle Dateien!'); WriteLn; end; WriteLn('Drücken Sie die Taste ENTER. Dann erpart man sich in '); Write( 'Turbo-Pascal das lästige Fenster-Umschalten.'); ReadLn; { "ReadLn" wartet auf ENTER }

Dr. K. Haller Turbo-Pascal Kap. 9: Steueranweisungen 9-5 9.3 Verschachtelung von Verzweigungen Da die nach then bzw. nach else beliebig sein kann und insbesondere auch wieder eine Bedingung enthalten kann, können ein- und zweiseitige Verzweigungen können beliebig verschachtelt werden. Dabei gilt: Jedes else bezieht sich auf das jeweils letzte if, zu dem noch kein else- Zweig angegeben ist. Die folgenden Graphiken zeigen beispielhaft eine derartige Situation als Programmablaufplan und als Struktogramm und die programmtechnische Lösung in schematischer Pascal-Schreibweise. Dabei steht "b" allgemein für eine beliebige Bedingung, "a" allgemein für eine beliebige, "j" bzw. "" für "True" und "n" bzw. "" für "False" a) im Programmablaufplan b) im Struktogramm: PAP (Flußdiagramm): j a1 b2 n a2 b1 j b3 n a3 b2 b1 b3 a1 a2./. a3 a4 a4 c) in schematischer Pascal-Programmierung: if b1 then if b2 then a1 else a2 else if b3 then else a3; a4;

9-6 Dr. K. Haller Turbo-Pascal Kap. 9: Steueranweisungen Wie das schematische Beispiel mit der Bedingung b3 zeigt, kann auch der then-zweig entfallen. Klarer wäre aber die Programmierung mit einer Negierung der Bedingung b3 wie folgt: if b1 then if b2 then a1 else a2 else if not b3 then a3; a4; program Pas09031; { Demo: Verschachtelung von Verzweigungen } const a1 = 'a1'; a2 = 'a2'; a3 = 'a3'; a4 = 'a4'; B1, B2, B3: Boolean; B1 := False; { nur für Demo } B2 := True; B3 := False; { ---- Version 1 ------- } if B1 then if B2 then WriteLn(a1) else WriteLn(a2) else if B3 then { then-zweig leer, unschön! } else WriteLn(a3); { ---- Version 2 (Bedingung B3 negiert, ---> klarer ------} if B1 then if B2 then WriteLn(a1) else WriteLn(a2) else if not B3 then WriteLn(a3); WriteLn(a4); ReadLn; 9.4 Selektion mit "case... of" sfolgen wie z.b.

Dr. K. Haller Turbo-Pascal Kap. 9: Steueranweisungen 9-7 if x = 1 then anweisung1; if x = 2 then anweisung2; if x = 3 then anweisung3;... if x = N then anweisungn; sind aufwendig in der Schreibweise und ineffizient, da jeder Fall abgeprüft werden muß. Die Umstellung auf zweiseitige Verzweigung führt leicht zu unübersichtlichen Verschachtelungen. Eine effiziente und klare Programmierung gestattet in diesen Fällen die Selektionsanweisung "case... of". Zweck: Auswahl eines Falles aus mehreren Möglichkeiten Format: case ordinalausdruck of konstante1: anweisung1; konstante2: anweisung2;...; konstanten: N; [ else anweisung_fuer_restliche_faelle ]; { optional } end; Das eingangs geschilderte Problem kann dann wie folgt effizient gelöst werden: case x of 1: anweisung1; 2: anweisung2; 3: anweisung3;... N: anweisungn; end; Wenn ein Fall erkannt und abgearbeitet ist, werden die restlichen Fälle nicht mehr geprüft; die case- wird verlassen. Als Selektor dient ein Ordinal-Ausdruck, dessen Ordinalwert zwischen -32768 und +32767 liegen muß. Der Datentyp des Selektors kann somit sein: Integer, ShortInt, Byte, Char und Boolean. Teilbereichstypen und Aufzählungstypen sind zulässig, soweit sie der genannten Ordinalwert-Forderung genügen. Ausdrücke mit den Datentypen Word und LongInt sind somit nicht als Selektor zulässig. Die Typen String, Real usw. sind nicht ordinal und somit auch nicht zulässig. Der else-zweig ist optional. Die eckigen Klammern in der Formatbeschreibung dienen nur als Hinweis auf die Option; sie dürfen im gegebenen Fall nicht eingegeben werden. Vor diesem "case/else" darf ein Semikolon stehen, bekanntlich aber nicht vor dem "else" einer "if/then/else-konstruktion. Jede kann eine einfache (nur eine ) sein oder ein mit und end geklammerter sblock mit zwei oder beliebig vielen Anwei-

9-8 Dr. K. Haller Turbo-Pascal Kap. 9: Steueranweisungen sungen. Beim optionalen else-zweig kann die Klammerung entfallen; man sollte sie der Einheitlichkeit wegen dennoch vornehmen. Statt einer Konstanten ist auch eine Konstanten-Liste oder ein Konstanten-Bereich und auch eine Kombination zulässig. Die Listenelemente sind mit einem Komma voander zu trennen. Ein Bereich wird durch den Kleinstwert und dem Größtwert dargestellt, dazwischen sind zwei Punkte zu setzen. program Pas09041; { Demo: Selektion mit "case... of" const Escape = #27; { #27: Ordnungsnummer für ESC nach ASCII } Zeichen: Char; repeat Write('Drücke eine Taste (Abbruch mit Taste "Esc": '); Zeichen := ReadKey; if Zeichen = #13 then Write(' ') { sonst unschöner Zeilenvorschub } else Write(Zeichen); case Zeichen of '+': WriteLn(' Plus-Zeichen'); '-': WriteLn(' Minus-Zeichen'); '!', '?': WriteLn(' Ausrufe- oder Fragezeichen'); 'a'..'z': WriteLn(' Kleinbuchstabe'); 'A'..'Z': WriteLn(' Großbuchstabe'); '0'..'9': WriteLn(' Ziffernzeichen'); #13: WriteLn(' Taste RETURN'); Escape: WriteLn(' Taste ESC'); { <--- Semikolon hier vor diesem "else" zulässig, aber nicht notwendig. Bei "if then/else" dagegen kein Semikolon vor "else" } else WriteLn(' Ein sonstiges Zeichen '); end; { von "case... of" } until Zeichen = Escape; 9.5 Die Sprunganweisung "goto" Zweck: Unbedingter oder bedingter Sprung zu einer mit einem Label (Marke) gekennzeichneten Programmstelle. Format 1: goto marke; unbedingter Sprung Format 2: if bedingung then goto marke; bedingter Sprung Programmsprünge sind in Turbo-Pascal nur innerhalb des gleichen Programmblocks möglich. Man kann also nicht vom Hauptprogramm in eine Routine springen oder umgekehrt und das ist gut so! Mit den Strukturierungsmöglichkeiten von Pascal sollten Programmsprünge nur für Testzwecke oder zur Behandlung von Fehlersituationen

Dr. K. Haller Turbo-Pascal Kap. 9: Steueranweisungen 9-9 benutzt werden. Die Sprünge können sowohl nach vorwärts, als auch rückwärts gerichtet sein. Die Sprungmarken müssen in der Label-Deklaration aufgeführt sein. Die Labelbezeichner können beliebige Bezeichner, aber auch Ganzzahlen aus dem Bereich 0 bis 9999 sein. An der Sprungstelle muß dem Labelbezeichner unbedingt ein Doppelpunkt nachgesetzt werden. Nichtbenutzte Labels werden vom Compiler nicht beanstandet. program Pas09051; { Demo "goto-" } { GOTO-Programme sind verdammenswert! } label Fall1, Fall2, Ende; x: Integer; Write('Eingabe Integer-Zahl: '); ReadLn(x); if (x = 4711) then goto Fall1 { Bedingter Sprung } else goto Fall2; Fall1: { Doppelpunkt nach einem Label } WriteLn('x hat den Wert 4711'); goto Ende; { Unbedingter Sprung } Fall2: { Das 2. Label } WriteLn('x hat nicht den Wert 4711'); goto Ende; { Überflüssige "goto"- } Ende: { Das 3. Label } ReadLn; { Wartet auf Tastendruck ENTER } 70200308 Dr. K. Haller