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.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.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 nameruft den Absatz auf und kehrt zurück (wie eine Prozedur)PERFORM VARYING i FROM 1 BY 1 UNTIL ...ist die Zählschleife- Aufgepasst:
STOP RUNvor 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.0029 ist eine Primzahl ggT = 0006
Merke
IF ... ELSE ... END-IF, Verknüpfung mitAND,OR,NOT;EVALUATEersetztswitchPERFORM n TIMES,PERFORM VARYING ... UNTIL ...,PERFORM UNTIL- Absätze (Paragraphs) sind Unterprogramme:
PERFORM NAME - Immer mit
END-IF/END-PERFORMabschließen, nicht nur mit Punkt
Aufgabe
Gib die Zahlen von 1 bis 20 aus und ersetze Vielfache von 3 durch "Fizz".