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
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: BVergleichsoperatoren: =, 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 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.Ausgabe:
0029 ist eine Primzahl
ggT = 0006Merke
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
Übungsaufgabe
Gib die Zahlen von 1 bis 20 aus und ersetze Vielfache von 3 durch “Fizz”.
Quiz zur Selbstkontrolle
Womit beendet man ein IF am besten?
- END-IF (richtig)
- ENDIF
- }
- FI
Was macht PERFORM VARYING?
- Eine Zählschleife (richtig)
- Eine Funktionsdefinition
- Ein Dateioperator
- Ein Vergleich
Was ist EVALUATE?
- Ein Mehrfachverzweigung wie switch (richtig)
- Ein Rechenbefehl
- Eine Schleife
- Ein Typ
Weiter im Kurs
Zurück: Rechnen in COBOL
Weiter: Tabellen und Zeichenketten
Alle Kapitel: COBOL im Überblick