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.

Fallunterscheidung 1. Form:
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)

Fallunterscheidung 2. Form:
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

WHILE-Schleife (kopfgesteuerte Schleife):
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!

UNTIL-Schleife (fußgesteuerte Schleife):
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!

FOR-Schleife (zählergesteuerte Schleife, aufsteigend):
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