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: 0017
Rundung, Ü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.3
Zinsrechnung 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 Jahren
Merke
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
Aufgabe
Berechne die Mehrwertsteuer (19 %) und den Bruttopreis für 49,90 Euro, gerundet auf Cent.