EMZETT.
Login

Kurz: COBOL kennt zwei Stile: die englischen Satz-Befehle (ADD, SUBTRACT, MULTIPLY, DIVIDE) und den mathematischen COMPUTE.

Teil des Kurses COBOL

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

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 (mit GIVING, REMAINDER) und COMPUTE für Formeln
  • ROUNDED rundet, ON SIZE ERROR erkennt Überlauf; ohne beides wird abgeschnitten
  • Vorzeichen brauchen ein S in der PIC
  • Dezimalarithmetik: 0,1 + 0,2 = 0,3 exakt

Übungsaufgabe

Berechne die Mehrwertsteuer (19 %) und den Bruttopreis für 49,90 Euro, gerundet auf Cent.

Quiz zur Selbstkontrolle

Weiter im Kurs

Zurück: Daten und die PICTURE-Klausel

Weiter: Bedingungen und Schleifen mit PERFORM

Alle Kapitel: COBOL im Überblick