Kurz: COBOL kennt zwei Stile: die englischen Satz-Befehle (ADD, SUBTRACT, MULTIPLY, DIVIDE) und den mathematischen COMPUTE.
Teil des Kurses COBOL
Die Rechenbefehle
COBOL kennt zwei Stile: die englischen Satz-Befehle (ADD, SUBTRACT, MULTIPLY, DIVIDE) und den mathematischen COMPUTE.
IDENTIFICATION DIVISION.
PROGRAM-ID. RECHNEN2.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 A PIC 9(4) VALUE 100.
01 B PIC 9(4) VALUE 30.
01 C PIC 9(4) VALUE 7.
01 ERG PIC S9(6)V99.
01 GANZ PIC 9(4).
01 REST PIC 9(4).
PROCEDURE DIVISION.
ADD B TO A.
DISPLAY "A nach ADD B TO A: " A.
ADD 1 2 3 TO C.
DISPLAY "C nach ADD 1 2 3: " C.
ADD A B C GIVING ERG.
DISPLAY "A+B+C = " ERG.
SUBTRACT 10 FROM A.
DISPLAY "A nach SUBTRACT: " A.
SUBTRACT B C FROM A GIVING ERG.
DISPLAY "A-B-C = " ERG.
MULTIPLY 2 BY C.
DISPLAY "C verdoppelt: " C.
MULTIPLY A BY B GIVING ERG.
DISPLAY "A*B = " ERG.
DIVIDE 7 INTO A GIVING GANZ REMAINDER REST.
DISPLAY "A/7 = " GANZ " Rest " REST.
DIVIDE A BY 8 GIVING ERG.
DISPLAY "A/8 = " ERG.
COMPUTE ERG = (A + B) * C / 4 - 2 ** 3.
DISPLAY "COMPUTE: " ERG.
COMPUTE ERG = FUNCTION SQRT(A) + FUNCTION MOD(A B).
DISPLAY "Funktionen: " ERG.
COMPUTE GANZ = FUNCTION INTEGER(A / 7).
DISPLAY "Ganzzahl: " GANZ.
STOP RUN.Ausgabe:
A nach ADD B TO A: 0130
C nach ADD 1 2 3: 0013
A+B+C = +000173.00
A nach SUBTRACT: 0120
A-B-C = +000077.00
C verdoppelt: 0026
A*B = +003600.00
A/7 = 0017 Rest 0001
A/8 = +000015.00
COMPUTE: +000967.00
Funktionen: +000010.95
Ganzzahl: 0017Rundung, Überlauf und Vorzeichen
IDENTIFICATION DIVISION.
PROGRAM-ID. RUNDEN.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 PREIS PIC 9(3)V99 VALUE 19.99.
01 ABGESCHN PIC 9(3).
01 GERUNDET PIC 9(3).
01 WINZIG PIC 9.
01 NEGATIV PIC S9(3) VALUE -5.
01 BETRAG PIC 9(3).
01 SUMME PIC S9(3)V9 VALUE 0.
01 ALT PIC 9 VALUE 9.
PROCEDURE DIVISION.
COMPUTE ABGESCHN = PREIS.
COMPUTE GERUNDET ROUNDED = PREIS.
DISPLAY "abgeschnitten " ABGESCHN ", gerundet " GERUNDET.
COMPUTE WINZIG = 7 * 3
ON SIZE ERROR DISPLAY "7*3 passt nicht in PIC 9 (Überlauf)"
NOT ON SIZE ERROR DISPLAY "passt"
END-COMPUTE.
ADD 1 TO ALT
ON SIZE ERROR DISPLAY "9 + 1 passt nicht in PIC 9"
END-ADD.
DISPLAY "ALT bleibt bei Fehler unverändert: " ALT.
COMPUTE BETRAG = FUNCTION ABS(NEGATIV).
DISPLAY "Betrag: " BETRAG.
MOVE NEGATIV TO BETRAG.
DISPLAY "MOVE auf unsigned verliert das Vorzeichen: " BETRAG.
COMPUTE SUMME = 0.1 + 0.2.
DISPLAY "0.1 + 0.2 = " SUMME.
COMPUTE SUMME ROUNDED = 10 / 3.
DISPLAY "10 / 3 = " SUMME.
COMPUTE SUMME = 10 / 3.
DISPLAY "ohne ROUNDED = " SUMME.
STOP RUN.Ausgabe:
abgeschnitten 019, gerundet 020
7*3 passt nicht in PIC 9 (Überlauf)
9 + 1 passt nicht in PIC 9
ALT bleibt bei Fehler unverändert: 9
Betrag: 005
MOVE auf unsigned verliert das Vorzeichen: 005
0.1 + 0.2 = +000.3
10 / 3 = +003.3
ohne ROUNDED = +003.3Zinsrechnung und Tilgungsplan
IDENTIFICATION DIVISION.
PROGRAM-ID. TILGUNG.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 SCHULD PIC 9(6)V99 VALUE 10000.00.
01 ZINSSATZ PIC 9V9999 VALUE 0.0600.
01 RATE PIC 9(5)V99 VALUE 2000.00.
01 ZINS PIC 9(5)V99.
01 TILGUNG PIC 9(5)V99.
01 JAHR PIC 99 VALUE 0.
01 AUSG-SCHULD PIC ZZZ,ZZ9.99.
01 AUSG-ZINS PIC ZZ,ZZ9.99.
PROCEDURE DIVISION.
DISPLAY "Jahr Zinsen Restschuld".
PERFORM UNTIL SCHULD = 0 OR JAHR >= 20
ADD 1 TO JAHR
COMPUTE ZINS ROUNDED = SCHULD * ZINSSATZ
IF SCHULD + ZINS < RATE
MOVE SCHULD TO TILGUNG
COMPUTE SCHULD = 0
ELSE
COMPUTE SCHULD = SCHULD + ZINS - RATE
END-IF
MOVE ZINS TO AUSG-ZINS
MOVE SCHULD TO AUSG-SCHULD
DISPLAY JAHR " " AUSG-ZINS " " AUSG-SCHULD
END-PERFORM.
DISPLAY "Abbezahlt nach " JAHR " Jahren".
STOP RUN.Ausgabe:
Jahr Zinsen Restschuld
01 600.00 8,600.00
02 516.00 7,116.00
03 426.96 5,542.96
04 332.58 3,875.54
05 232.53 2,108.07
06 126.48 234.55
07 14.07 0.00
Abbezahlt nach 07 JahrenMerke
ADD,SUBTRACT,MULTIPLY,DIVIDE(mitGIVING,REMAINDER) undCOMPUTEfür FormelnROUNDEDrundet,ON SIZE ERRORerkennt Überlauf; ohne beides wird abgeschnitten- Vorzeichen brauchen ein
Sin derPIC - Dezimalarithmetik:
0,1 + 0,2 = 0,3exakt
Übungsaufgabe
Berechne die Mehrwertsteuer (19 %) und den Bruttopreis für 49,90 Euro, gerundet auf Cent.
Quiz zur Selbstkontrolle
Was bewirkt ON SIZE ERROR?
- Fängt einen Überlauf des Zielfelds ab (richtig)
- Vergrößert das Feld
- Beendet das Programm immer
- Rundet das Ergebnis
Wofür steht GIVING?
- Ergebnis in ein Zielfeld speichern (richtig)
- Eine Schleife starten
- Ein Feld löschen
- Text ausgeben
Wie gibt man ein negatives Vorzeichen in PIC an?
- Mit S, z. B. PIC S9(3) (richtig)
- Mit -
- Mit N
- Gar nicht
Weiter im Kurs
Zurück: Daten und die PICTURE-Klausel
Weiter: Bedingungen und Schleifen mit PERFORM
Alle Kapitel: COBOL im Überblick