image: cobol-logo.png

COBOL (1959)

Grace Hopper

COBOL (Common Busi­ness-Oriented Language) wur­de 1959 von Grace Hopper ent­wick­elt. Es war die erste Pro­gram­mier­spra­che, die spe­ziell für Ge­schäfts­an­wen­dun­gen ent­wick­elt wur­de. COBOL ist eine imperative Pro­gram­mier­spra­che, die für die Verarbeitung von Daten in Form von Datensätzen optimiert ist. Trotz ihres hohen Alters wird die Pro­gram­mier­spra­che COBOL immer noch in der Un­ter­neh­mens­soft­ware­ent­wick­lung ein­ge­setzt.

Die Spra­che wur­de hauptsächlich in Be­rei­chen wie Banken, Versicherungen und Re­gier­ungs­be­hör­den ein­ge­setzt, um Trans­ak­tions­ver­ar­bei­tung, Buchhaltung und andere geschäftskritische An­wen­dun­gen zu unterstützen. Heutzutage ist COBOL immer noch relevant, insbesondere in der Finanzbranche und bei großen Unternehmen, die auf stabile und zuverlässige Systeme angewiesen sind. Viele dieser Systeme laufen seit Jahr­zehn­ten und werden weiterhin gepflegt und erweitert, da sie für den täglichen Betrieb unerlässlich sind.

1. Hello, world!

COBOL-Pro­gramme werden in Textdateien mit der Endung .cbl oder .cob geschrieben. Diese Da­tei­en werden anschließend von einem Compiler in ausführbare Da­tei­en übersetzt, die auf deinem Com­puter direkt ausgeführt werden können.

Stelle zuerst sicher, dass du keinen Ordner geöffnet hast. Um sicherzugehen, drücke einfach den Shortcut für »Ordner schließen«: StrgK und dann F. Dein Work­space sollte jetzt ungefähr so aussehen:

Quelltext schreiben

Klicke auf »New File« und wähle als Dateityp »Text File«.

Schreibe nun den folgenden Code in die Datei:

1
2
3
4
5
6
       IDENTIFICATION DIVISION.
       PROGRAM-ID. HELLO-WORLD.

       PROCEDURE DIVISION.
           DISPLAY "Hello, World!".
           STOP RUN.

Da Visual Studio Code noch nicht weiß, dass es sich um COBOL-Quelltext handelt, ist dein Programm momentan noch einfarbig, aber das wird sich gleich ändern. An dem weißen Punkt erkennst du, dass deine Änderungen noch nicht gespeichert sind.

Drücke nun StrgS, um die Datei zu speichern. Gib hello.cbl ein – der vollständige Pfad zu deiner Datei lautet dann /workspace/hello.cbl.

Achte darauf, dass du deine Datei nicht aus Versehen hello.cbl. (mit einem Punkt am Ende) nennst, da Visual Studio Code als Dateiname IDENTIFICATION DIVISION. vorschlägt.

Da COBOL standardmäßig nicht von Visual Studio Code un­ter­stützt wird, müssen wir noch eine passende Er­wei­te­rung installieren. Klicke dazu auf das Er­wei­te­rungs-Symbol in der Seitenleiste oder drücke StrgShiftX. Suche nach der Er­wei­te­rung »COBOL Language Support« und installiere sie.

Alternativ kannst du auch StrgP drücken und ext install broadcomMFD.cobol-language-support eingeben, um die Er­wei­te­rung zu installieren.

Anschließend solltest du dein COBOL-Programm farbig sehen:

Wie man sieht, hat COBOL eine bestimmte Vorstellung davon, wie der Code eingerückt sein sollte. Das liegt daran, dass COBOL ein sehr altes Sprachdesign hat und auf Lochkartenprogrammierung ausgelegt ist. Die Einrückung ist also nicht nur eine Frage des Stils, sondern auch der Funktionalität. Früher wur­de der Code auf solchen Formularen geschrieben:

Kompilieren und ausführen

Bevor wir das Programm ausführen können, müssen wir es kompilieren. Dadurch wird der Quelltext in Maschinencode übersetzt, den dein Com­puter ausführen kann.

Öffne dazu ein Ter­mi­nal, indem du entweder StrgJ drückst oder das Panel-Symbol rechts oben drückst. Dein Fenster sollte jetzt ungefähr so aussehen:

Um das Programm zu kompilieren, gib folgenden Befehl ein:

cobc -x hello.cbl -o hello
Du musst nicht den vollständigen Da­tei­na­men schreiben. Schreib einfach cobc -x he und drücke Tab, um den Da­tei­na­men automatisch zu hello.cbl vervollständigen zu lassen. Du kannst danach ganz normal weiterschreiben.

Falls du die Warnung »line not terminated b a newline« erhältst, ist dies nicht weiter schlimm - sie bedeutet nur, dass die letzte Zeile deines Programms keinen Zeilenumbruch am Ende hat. Du kannst sie einfach ignorieren. Wenn du keinen Fehler gemacht hast, wird das Programm erfolgreich kompiliert und die ausführbare Datei hello wird im selben Verzeichnis erstellt. Du kannst dies überprüfen, indem du dir die Da­tei­en im aktuellen Verzeichnis mit ls oder ls -l anzeigen lässt:

Die grüne Datei hello ist die ausführbare Datei – im Unterschied zu Win­dows, wo ausführbare Da­tei­en die Endung .exe haben, haben ausführbare Da­tei­en unter Linux keine Endung. Um das Programm auszuführen, gib folgenden Befehl ein:

./hello

Das Programm sollte die Nachricht Hello, World! im Ter­mi­nal ausgeben. Du kannst beide Schritte auch in einem Befehl kombinieren:

cobc -x hello.cbl -o hello && ./hello
Die Zeichenkombination && sorgt dafür, dass der zweite Befehl nur ausgeführt wird, wenn der erste erfolgreich war.

Fehler finden und beheben

Wenn du einen Fehler im Code machst, wird der Compiler eine Fehlermeldung ausgeben. Versuche zum Beispiel, statt DISPLAY das Wort DISPLY zu schreiben:

           DISPLY "Hello, World!".

Speichere die Datei und führe den Compiler erneut aus:

cobc -x hello.cbl -o hello
Nutze die Pfeiltaste hoch , um den letzten Befehl erneut einzugeben. So kannst du schnell dein Programm testen, nachdem du es verändert hast.

Der Compiler sollte eine Fehlermeldung ausgeben, die dir hilft, den Fehler zu finden:

Es lohnt sich, die Fehlermeldungen genau zu lesen, um den Fehler zu finden und zu beheben. Achte auf die Zeilennummer (in diesem Beispiel 5) und den Text, der dir sagt, was falsch ist. Denke daran, den Fehler wieder zu beheben, bevor du das nächste Beispiel ausprobierst.

2. Primfaktorzerlegung

Im zweiten Beispiel wollen wir eine Zahl in ihre Primfaktoren zerlegen. An diesem Beispiel kannst du sehen, wie man in COBOL Be­nut­zer­ein­ga­ben verar­bei­tet und Schleifen ver­wen­det. Erstelle eine neue Datei mit StrgAltN und schreibe den folgenden Code hinein:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
       IDENTIFICATION DIVISION.
       PROGRAM-ID. FACTORS.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01  CALCULATING.
           03  NUM  USAGE BINARY-LONG VALUE ZERO.
           03  LIM  USAGE BINARY-LONG VALUE ZERO.
           03  CNT  USAGE BINARY-LONG VALUE ZERO.
           03  DIV  USAGE BINARY-LONG VALUE ZERO.
           03  REM  USAGE BINARY-LONG VALUE ZERO.
           03  ZRS  USAGE BINARY-SHORT VALUE ZERO.

       01  DISPLAYING.
           03  DIS  PIC 9(10) USAGE DISPLAY.

       PROCEDURE DIVISION.
       MAIN-PROCEDURE.
           DISPLAY "Please enter a number: " WITH NO ADVANCING
           ACCEPT NUM
           DIVIDE NUM BY 2 GIVING LIM.

           DISPLAY "Factors: " WITH NO ADVANCING
           PERFORM VARYING CNT FROM 2 BY 1 UNTIL CNT > LIM
               PERFORM WITH TEST AFTER UNTIL REM <> 0
                   DIVIDE NUM BY CNT GIVING DIV REMAINDER REM
                   IF REM = 0
                       MOVE CNT TO DIS
                       PERFORM SHODIS
                       MOVE DIV TO NUM
                   END-IF
               END-PERFORM
           END-PERFORM
           DISPLAY " "
           STOP RUN.

       SHODIS.
           MOVE ZERO TO ZRS.
           INSPECT DIS TALLYING ZRS FOR LEADING ZERO.
           DISPLAY DIS(ZRS + 1:) WITH NO ADVANCING
           DISPLAY " " WITH NO ADVANCING
           EXIT PARAGRAPH.

       END PROGRAM FACTORS.

Speichere die Datei unter dem Namen factor.cbl. Kompiliere das Programm:

cobc -x factor.cbl -o factor

Falls du keine Fehlermeldung erhältst, kannst du das Programm ausführen und testen:

Das Programm hat die Zahl 123 in ihre Primfaktoren zerlegt und ausgegeben. Probiere aus, was passiert, wenn du die Zahl 3000000000 eingibst. Was könnte der Grund dafür sein?

3. Bubblesort

Im dritten Beispiel wollen wir eine Liste von 10 Zufallszahlen sortieren. Dafür verwenden wir den Bubblesort-Al­go­rith­mus, der zwar nicht besonders effizient ist, aber sehr einfach zu verstehen und zu implementieren. Der Bubblesort-Al­go­rith­mus funktioniert, indem er die Liste mehrmals durchläuft und benachbarte Elemente vertauscht, wenn sie in der falschen Reihenfolge sind.

An diesem Beispiel kannst du sehen, wie man in COBOL Arrays ver­wen­det und Schleifen verschachtelt.

Erstelle eine neue Datei und schreibe den folgenden Code hinein:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
       IDENTIFICATION DIVISION.
       PROGRAM-ID. BUBBLESORT.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 CHANGED-FLAG         PIC x.
           88 HAS-CHANGED      VALUE 'Y'.
           88 HAS-NOT-CHANGED  VALUE 'N'.
       01 ITEM-COUNT           PIC 99.
       01 TEMP-ITEM            PIC 99.
       01 ITEM-ARRAY.
           03 ITEM-ARRAY-COUNT PIC 99.
           03 ITEM             PIC 99 OCCURS 99 TIMES
                               indexed by ITEM-INDEX.

       PROCEDURE DIVISION.
       MAINK.
      * FILL ARRAY WITH VALUES
           MOVE 10 TO ITEM-ARRAY-COUNT
           MOVE 28 TO ITEM (1)
           MOVE 44 TO ITEM (2)
           MOVE 46 TO ITEM (3)
           MOVE 24 TO ITEM (4)
           MOVE 19 TO ITEM (5)
           MOVE  2 TO ITEM (6)
           MOVE 17 TO ITEM (7)
           MOVE 11 TO ITEM (8)
           MOVE 24 TO ITEM (9)
           MOVE  4 TO ITEM (10)

           DISPLAY "Unsorted: " WITH NO ADVANCING
           PERFORM VARYING ITEM-INDEX FROM 1 BY 1
              UNTIL ITEM-INDEX > ITEM-ARRAY-COUNT
              DISPLAY ITEM (ITEM-INDEX) ', ' WITH NO ADVANCING
           END-PERFORM

           DISPLAY " "

           MOVE ITEM-ARRAY-COUNT TO ITEM-COUNT
           PERFORM BUBBLE-SORT

           DISPLAY "Sorted:   " WITH NO ADVANCING
           PERFORM VARYING ITEM-INDEX FROM 1 BY 1
              UNTIL ITEM-INDEX > ITEM-ARRAY-COUNT
              DISPLAY ITEM (ITEM-INDEX) ', ' WITH NO ADVANCING
           END-PERFORM

           DISPLAY " "
           STOP RUN.

       BUBBLE-SORT.
           PERFORM WITH TEST AFTER UNTIL HAS-NOT-CHANGED
              SET HAS-NOT-CHANGED TO TRUE
              SUBTRACT 1 FROM ITEM-COUNT
              PERFORM VARYING ITEM-INDEX FROM 1 BY 1
                 UNTIL ITEM-INDEX > ITEM-COUNT
                 IF ITEM (ITEM-INDEX) > ITEM (ITEM-INDEX + 1)
                    MOVE ITEM (ITEM-INDEX) TO TEMP-ITEM
                    MOVE ITEM (ITEM-INDEX + 1) TO ITEM (ITEM-INDEX)
                    MOVE TEMP-ITEM TO ITEM (ITEM-INDEX + 1)
                    SET HAS-CHANGED TO TRUE
                 END-IF
              END-PERFORM
           END-PERFORM
           .

Speichere die Datei unter dem Namen bubblesort.cbl. Kompiliere das Programm:

cobc -x bubblesort.cbl -o bubblesort

Falls du keine Fehlermeldung erhältst, kannst du das Programm ausführen und testen:

Das Programm hat eine Liste von 10 Zufallszahlen sortiert. Versuche, den Quelltext so zu verändern, dass statt 10 Zahlen 100 oder mehr Zahlen sortiert werden.

4. Zusammenfassung

In diesem Kapitel hast du an drei Beispielen gesehen, wie man ein einfaches COBOL-Programm schreiben, kompilieren und ausführen kann. Das ist natürlich nur ein erster Eindruck. Um COBOL wirklich zu beherrschen, musst du noch viel mehr lernen – am besten, indem du eigene Pro­gramme schreibst und ausprobierst. Die Buchhandlungen, Bib­lio­theken und Youtube sind voll von Material für dich. Viel Spaß beim Pro­gram­mier­en!