EMZETT.
Login

Kurz: DATA DIVISION. WORKING-STORAGE SECTION. 01 PUNKTE PIC 999 VALUE 78. 01 TAG PIC 9 VALUE 3. 01 NOTE PIC X(12).

Teil des Kurses COBOL

Kapitel 4 von 8 im Kurs COBOL. Mit Fortschritt, Quiz und Zertifikat auf der Lernseite.

IF und EVALUATE

IDENTIFICATION DIVISION.
PROGRAM-ID. BEDINGUNG.
 
DATA DIVISION.
WORKING-STORAGE SECTION.
01 PUNKTE  PIC 999 VALUE 78.
01 TAG     PIC 9   VALUE 3.
01 NOTE    PIC X(12).
 
PROCEDURE DIVISION.
    IF PUNKTE >= 90
        DISPLAY "sehr gut"
    ELSE IF PUNKTE >= 75
        DISPLAY "gut"
    ELSE
        DISPLAY "weiter üben"
    END-IF
    END-IF.
 
    IF PUNKTE > 50 AND PUNKTE < 100
        DISPLAY "zwischen 50 und 100"
    END-IF.
    IF PUNKTE < 10 OR PUNKTE = 78
        DISPLAY "kleiner 10 oder genau 78"
    END-IF.
    IF NOT PUNKTE = 0
        DISPLAY "nicht null"
    END-IF.
    IF PUNKTE IS NUMERIC
        DISPLAY "ist numerisch"
    END-IF.
 
    EVALUATE TAG
        WHEN 1 DISPLAY "Montag"
        WHEN 2 THRU 4 DISPLAY "Mitte der Woche"
        WHEN 6 THRU 7 DISPLAY "Wochenende"
        WHEN OTHER DISPLAY "anderer Tag"
    END-EVALUATE.
 
    EVALUATE TRUE
        WHEN PUNKTE >= 90 MOVE "A" TO NOTE
        WHEN PUNKTE >= 75 MOVE "B" TO NOTE
        WHEN OTHER        MOVE "C" TO NOTE
    END-EVALUATE.
    DISPLAY "Note: " NOTE.
    STOP RUN.

Ausgabe:

gut
zwischen 50 und 100
kleiner 10 oder genau 78
nicht null
ist numerisch
Mitte der Woche
Note: B

Vergleichsoperatoren: =, NOT =, >, <, >=, <= (auch ausgeschrieben: EQUAL TO, GREATER THAN, LESS THAN). Wichtig: Beende IF und EVALUATE mit END-IF bzw. END-EVALUATE, sonst gilt der Punkt als Ende aller offenen Blöcke.

PERFORM: Schleifen und Unterprogramme

PERFORM ist COBOLs universelle Schleife und führt außerdem benannte Absätze (Paragraphs) aus:

IDENTIFICATION DIVISION.
PROGRAM-ID. SCHLEIFEN.
 
DATA DIVISION.
WORKING-STORAGE SECTION.
01 I       PIC S99 VALUE 0.
01 SUMME   PIC 9(5) VALUE 0.
01 N       PIC 99 VALUE 3.
 
PROCEDURE DIVISION.
HAUPT.
    PERFORM 3 TIMES
        DISPLAY "Hallo"
    END-PERFORM.
 
    PERFORM VARYING I FROM 1 BY 1 UNTIL I > 5
        DISPLAY "I = " I
    END-PERFORM.
 
    MOVE 0 TO SUMME.
    PERFORM VARYING I FROM 1 BY 1 UNTIL I > 10
        ADD I TO SUMME
    END-PERFORM.
    DISPLAY "Summe 1..10: " SUMME.
 
    PERFORM UNTIL N = 0
        DISPLAY "Countdown " N
        SUBTRACT 1 FROM N
    END-PERFORM.
 
    PERFORM VARYING I FROM 10 BY -3 UNTIL I < 1
        DISPLAY "runter " I
    END-PERFORM.
 
    PERFORM GRUSS.
    PERFORM GRUSS 2 TIMES.
    PERFORM RECHNE THRU RECHNE-ENDE.
    STOP RUN.
 
GRUSS.
    DISPLAY "Gruß aus einem Absatz".
 
RECHNE.
    COMPUTE SUMME = SUMME * 2.
    DISPLAY "Doppelt: " SUMME.
RECHNE-ENDE.
    EXIT.

Ausgabe:

Hallo
Hallo
Hallo
I = +01
I = +02
I = +03
I = +04
I = +05
Summe 1..10: 00055
Countdown 03
Countdown 02
Countdown 01
runter +10
runter +07
runter +04
runter +01
Gruß aus einem Absatz
Gruß aus einem Absatz
Gruß aus einem Absatz
Doppelt: 00110
  • Eine Section/Paragraph ist ein benannter Block in der PROCEDURE DIVISION (Name mit Punkt)
  • PERFORM name ruft den Absatz auf und kehrt zurück (wie eine Prozedur)
  • PERFORM VARYING i FROM 1 BY 1 UNTIL ... ist die Zählschleife
  • Aufgepasst: STOP RUN vor den Absätzen, sonst läuft das Programm hinein (“Durchfallen”)

Typische Muster

IDENTIFICATION DIVISION.
PROGRAM-ID. MUSTER.
 
DATA DIVISION.
WORKING-STORAGE SECTION.
01 ZAHL     PIC 9(4) VALUE 29.
01 TEILER   PIC 9(4).
01 REST     PIC 9(4).
01 QUOT     PIC 9(4).
01 IST-PRIM PIC X VALUE "J".
   88 PRIM  VALUE "J".
01 A        PIC 9(4) VALUE 48.
01 B        PIC 9(4) VALUE 18.
01 T        PIC 9(4).
 
PROCEDURE DIVISION.
    PERFORM VARYING TEILER FROM 2 BY 1 UNTIL TEILER * TEILER > ZAHL
        DIVIDE ZAHL BY TEILER GIVING QUOT REMAINDER REST
        IF REST = 0
            MOVE "N" TO IST-PRIM
        END-IF
    END-PERFORM.
    IF PRIM
        DISPLAY ZAHL " ist eine Primzahl"
    ELSE
        DISPLAY ZAHL " ist keine Primzahl"
    END-IF.
 
    PERFORM UNTIL B = 0
        DIVIDE A BY B GIVING QUOT REMAINDER REST
        MOVE B TO A
        MOVE REST TO B
    END-PERFORM.
    DISPLAY "ggT = " A.
    STOP RUN.

Ausgabe:

0029 ist eine Primzahl
ggT = 0006

Merke

  • IF ... ELSE ... END-IF, Verknüpfung mit AND, OR, NOT; EVALUATE ersetzt switch
  • PERFORM n TIMES, PERFORM VARYING ... UNTIL ..., PERFORM UNTIL
  • Absätze (Paragraphs) sind Unterprogramme: PERFORM NAME
  • Immer mit END-IF/END-PERFORM abschließen, nicht nur mit Punkt

Übungsaufgabe

Gib die Zahlen von 1 bis 20 aus und ersetze Vielfache von 3 durch “Fizz”.

Quiz zur Selbstkontrolle

Weiter im Kurs

Zurück: Rechnen in COBOL

Weiter: Tabellen und Zeichenketten

Alle Kapitel: COBOL im Überblick