Primi passi in COBOL

Scritto il 24 maggio 2020 da

Recentemente si è sentito parlare molto del COBOL a causa della necessità di alcuni Stati di aggiornare i propri sistemi informatici e la difficoltà nel trovare programmatori con una certa esperienza nell’uso di questo linguaggio di programmazione. Non conoscendo il linguaggio, se non per “sentito dire”, ho pensato di approfondirne un po’ la conoscenza, più per curiosità personale che altro.

Per muovere i primi passi in COBOL ho scelto l’approccio “vecchia scuola”. Ho recuperato il compilatore COBOL della Microsoft per CP/M e relative manuale, l’ho installato sul mio computer Z80 RC2014 e ho cominciato a scrivere il tipico “Hello World” con cui si inizia a programmare con qualsiasi linguaggio.

000010 IDENTIFICATION DIVISION.
000020 PROGRAM-ID. HELLO.
000030
000040*    SAMPLE HELLO WORLD PROGRAM.
000050
000060 ENVIRONMENT DIVISION.
000070
000080 DATA DIVISION.
000090
000100 PROCEDURE DIVISION.
000110 MAIN.
000120     DISPLAY "HELLO WORLD".
000130     STOP RUN.

Il passo successivo è stato quello di scrivere un programma un po’ più complesso facendo il porting del convertitore di numeri romani che ho scritto in BASIC.

       IDENTIFICATION DIVISION.
       PROGRAM-ID. HELLO.

      *    DECIMAL TO ROMAN NUMBER CONVERSION.

       ENVIRONMENT DIVISION.

       DATA DIVISION.
       WORKING-STORAGE SECTION.

       01 CONST VALUE "1000M 0900CM0500D 0400CD0100C 0090XC0050L 0040XL0
      -    "010X 0009IX0005V 0004IV0001I ".
           02 ROMAN OCCURS 13 TIMES INDEXED BY I.
               03 VAL PIC 9(4).
               03 STR PIC A(2).

       77 NUM PIC 9(4).
       77 RES PIC X(14).
       77 A   PIC 9(4).

       PROCEDURE DIVISION.
       MAIN.
           DISPLAY "DECIMAL TO ROMAN NUMBERS CONVERTER".
       L2. DISPLAY "ENTER NUMBER TO CONVERT".
           ACCEPT NUM.
           IF NUM IS NOT ZERO,
                   PERFORM DEC-TO-ROMAN THROUGH END-DEC-TO-ROMAN
                   DISPLAY RES
                   GO TO L2.
           STOP RUN.

       DEC-TO-ROMAN.
           MOVE NUM TO A.
           MOVE " " TO RES.
           SET I TO 1.
       L1. IF A IS NOT LESS THAN VAL(I),
                   STRING RES STR(I) DELIMITED BY SPACE INTO RES
                   COMPUTE A = A - VAL(I)
                   GO TO L1.
           IF I LESS THAN 13,
                   SET I UP BY 1
                   GO TO L1.
       END-DEC-TO-ROMAN.

A differenza del programma BASIC, questo converte solo da numeri arabi (decimali) a numeri romani.

Devo dire che il COBOL è un linguaggio abbastanza interessante anche se l’approccio con il compilatore Microsoft non è dei migliori, poichè essendo piuttosto datato, molti degli esempi reperibili in Internet, che utilizzano costrutti più moderni, non funzionano. Per approfondire la conoscenza del linguaggio è sicuramente meglio utilizzare un compilatore come GNU Cobol, disponibile per Linux e Windows.

Galleria Immagini

cpm_cobol1cpm_cobol2
cpm_cobol3cpm_cobol4
cpm_cobol5