3.3 Logische Strukturelemente
Strukturierte Programme können in jeder Programmiersprache realisiert werden.
In manchen Sprachen gibt es Befehle für die meisten der zuvor genannten Strukturelemente, in anderen Sprachen (insbesondere in Assemblersprachen) kann man Strukturelemente mit Hilfe von kontrollierten Sprungbefehlen realisieren. In Assemblersprachen muss außerdem eine logische Bedingung meist in einfache Vergleiche von 2 Datenfeldern zerlegt werden.
Logische Verknüpfungen können durch Ineinanderschachtelung von Auswahlen realisiert werden
(Konjunktion bzw. logisches UND durch Schachtelung im Ja-Zweig, Disjunktion bzw. logisches ODER durch Schachtelung im Nein-Zweig).
Auswahl
C/C++ | COBOL | PL/I | /370-ASSEMBLER |
---|---|---|---|
if (bedingung) { ... } else { ... } |
IF bedingung THEN ... ELSE ... END-IF |
IF bedingung THEN DO; ... END; ELSE DO; ... END; |
IFnn EQU * Cx feld1,feld2 By ELSEnn THENnn EQU * ... B ENDIFnn ELSEnn EQU * ... ENDIFnn EQU * |
Besteht der Ja- bzw. der Nein-Zweig nur aus einem einzigen Befehl, dann können die Block-Klammern weggelassen werden. | | Besteht der Ja- bzw. der Nein-Zweig nur aus einem einzigen Befehl, dann kann die DO-Gruppen-Klammerung weggelassen werden. | Eine logische Bedingung muss in einfache Vergleiche von 2 Datenfeldern zerlegt werden. Cx steht für CLC (logischer Vergleich) bzw. CP (arithmetischer Vergleich). By steht für einen bedingten Sprungbefehl (BE, BL, BH, BNE, BNL, BNH). Die Namen IFnn, ... sind willkürlich gewählt! |
Ist der Nein-Zweig leer, dann können in allen Sprachen die ELSE-Zweige weggelassen werden (im /370-Assembler erfolgt dann der bedingte Sprung zur Adresse ENDIFnn und der unbedingte Sprung entfällt).
Fallunterscheidung
Da die Fallunterscheidung ja im wesentlichen eine logische ODER-Verknüpfung von mehreren Auswahlen ist, kann sie durch im Nein-Zweig geschachtelte Auswahlen realisiert werden. Dies muss in Assemblersprachen so geschehen, da diese Sprachen im Allg. keine Fallunterscheidung kennen.In C/C++ gibt es nur die 2. Form der Fallunterscheidung.
In Cobol wiederum ist der entsprechende EVALUATE-Befehl noch weit mächtiger und erlaubt beispielsweise die Übersetzung von ganzen Entscheidungstabellen.
In allen Sprachen kann im folgenden der Sonst-Zweig im Allg. weggelassen werden.
C/C++ | COBOL | PL/I | /370-ASSEMBLER |
---|---|---|---|
Kein derartiger Befehl vorhanden! |
EVALUATE WHEN bedingung1 ... ... WHEN bedingungn ... WHEN OTHER ... END-EVALUATE |
SELECT; WHEN (bedingung1) DO; ... END; ... WHEN (bedingungn) DO; ... END; OTHERWISE DO; ... END; END; | Geschachtelte Auswahlen im Nein-Zweig (logisches ODER) |
C/C++ | COBOL | PL/I | /370-ASSEMBLER |
---|---|---|---|
switch (ausdruck) { case wert1: ... break; ... case wertn: ... break; default: ... } |
EVALUATE ausdruck WHEN wert1 ... ... WHEN wertn ... WHEN OTHER ... END-EVALUATE |
SELECT (ausdruck); WHEN (wert1) DO; ... END; ... WHEN (wertn) DO; ... END; OTHERWISE DO; ... END; END; | Geschachtelte Auswahlen im Nein-Zweig (logisches ODER) |
Achtung: Der Ausdruck ausdruck darf nur int oder char sein! | | | |
Wiederholung
C/C++ | COBOL | PL/I | /370-ASSEMBLER |
---|---|---|---|
while (bedingung) { ... } |
PERFORM WITH TEST BEFORE UNTIL NOT-bedingung ... END-PERFORM |
DO WHILE (bedingung); ... END; |
DOWnn EQU * Cx feld1,feld2 By ENDDOWnn ... B DOWnn ENDDOWnn EQU * |
| Achtung: Die UNTIL-Bedingung ist eine Abbruchbedingung! | | Eine logische Bedingung muss in einfache Vergleiche von 2 Datenfeldern zerlegt werden. Cx steht für CLC (logischer Vergleich) bzw. CP (arithmetischer Vergleich). By steht für einen bedingten Sprungbefehl (BE, BL, BH, BNE, BNL, BNH). Die Namen DOWnn, ... sind willkürlich gewählt! |
C/C++ | COBOL | PL/I | /370-ASSEMBLER |
---|---|---|---|
do { ... } while (NOT-bedingung) |
PERFORM WITH TEST AFTER UNTIL bedingung ... END-PERFORM |
DO UNTIL (bedingung); ... END; |
DOUnn EQU * ... Cx feld1,feld2 By DOUnn ENDDOUnn EQU * |
Achtung: Die while-Bedingung ist eine Bearbeitungsbedingung! | | | Eine logische Bedingung muss in einfache Vergleiche von 2 Datenfeldern zerlegt werden. Cx steht für CLC (logischer Vergleich) bzw. CP (arithmetischer Vergleich). By steht für einen bedingten Sprungbefehl (BE, BL, BH, BNE, BNL, BNH). Die Namen DOUnn, ... sind willkürlich gewählt! |
C/C++ | COBOL | PL/I | /370-ASSEMBLER |
---|---|---|---|
for (lv = aw; lv <= ew; lv += sw) { ... } |
PERFORM WITH TEST BEFORE VARYING lv FROM aw BY sw UNTIL lv > ew ... END-PERFORM |
DO lv = aw TO ew BY sw; ... END; |
ZAP lv,aw DOWnn EQU * CP lv,ew BH ENDDOWnn ... AP lv,sw B DOWnn ENDDOWnn EQU * |
| | | Die Namen DOWnn, ... sind willkürlich gewählt! |
Bem.: | lv | ... | Laufvariable |
aw | ... | Anfangswert | |
ew | ... | Endwert | |
sw | ... | Schrittweite |
- Weiter
- zum nächsten Kapitel
- Zurück
- zum vorherigen Kapitel
- zum Anfang dieses Kapitels
- zum Inhaltsverzeichnis
- zum Anfang dieses Kapitels