COBOL

REGOLE SINTATTICHE

Tutte le linee di comandi sono terminate da . e sono dette imperative. Dicesi paragrafo l'insieme di una o piu' istruzioni che terminano con un unico punto.

COLONNE

Un programma in COBOL deve rispettare alcune 'colonnature' standard. C margine A margine B 1<-->6 7 8<---->11 12<--->72 | | | | | | | +--------- qui si digita il programma | | +--------------------- intestazione division/section/nomi par. | +--------------------------- se * la riga e' un commento +--------------------------------- documentazione Un programma e' suddiviso in DIVISION e SECTION: IDENTIFICATION DIVISION. dichiarazioni generali del programma PROGRAM-ID nome del programma ENVIRONMENT DIVISION. CONFIGURATION SECTION. definisce tipo di elaboratore INPUT-OUTPUT SECTION. solo se il prog utilizza i file FILE-CONTROL. SELECT ... assegna nomi interni a file esterni DATA DIVISION. definizione tipo e dimensione dei dati FILE SECTION. FD ... file description WORKING-STORAGE SECTION. contiene le dichiarazioni delle variabili contiene dati elementari(77) e composti(>=01) VALUE ... PICTURE ... A=alpha, 9=numerico, X=alphanum PROCEDURE DIVISION. MAIN SECTION. MAIN EXIT.

NUMERI DI LIVELLO

I numeri di livello permetto di dichiarare le variabili che saranno utilizzate nel programma. Una variabile di tipo semplice o elementare viene indicata da 77, es: 77LATO PIC 9. Soltanto i campi elementari hanno la clausola PICTURE. Le variabili strutturate sono formate da una o piu' variabili elementari. Il livello 01 viene riservato per la dichiarazione dei record. [[struct]] 01NOME-STUD. 03 COGNOME PIC X(15) 03 NOME PIC X(15) 03 CLASSE PIC X(5) E' possibile associare nomi diversi ai valori che puo' assume un campo. [[enum]] 77 GRADO PIC9(01) 88 PRIMO VALUE 1 88 SECONDO VALUE 2 88 TERZO VALUE 3

DICHIARAZIONE VARIABILI

PICTURE

Permette di definire la lunghezza di un campo e la sua classe. PIC XXXXX. o PIC X(5). 5 caratteri alphanumerici PIC 99. o PIC 9(2). 2 caratteri numerici - VALUE Associata alla PICTURE vi e' l'istruzione VALUE che permette una inizializzazione di una variabile durante la fase dichiarativa. PIC 9(3) VALUE 145. - variabile con segno: VALORE S PIC S9(06) - variabile con virgola: VALORE V PIC 9(03)V9(03) - variabili zoned (numeriche) per la variabile sono utilizzati tanti byte quanti indicati nella PICTURE. 01VAR1-ZONED PIC 9(6). 01VAR2-ZONED PIC S9(6) DISPLAY. MOVE 19 TO VAR1-ZONED. MOVE -1993 TO VAR2-ZONED. - variabili packed (numeriche) in ogni byte sono impaccati 3 digit piu' un nibble per il segno. 01VAR-PAC PIC 9(6) COMP-3. - variabili binarie (numeriche) il numero viene memorizzato in 2, 4 o 8 byte secondo il numero di cifre. 01VAR-BINPIC PIC 9(4) COMP. Fino a 4 cifre utilizza 2 byte da 5 a 9 " " 4 " da 10 a 18 " " 8 " - variabili floating-point puo' essere in singola (COMP-1) o doppia precisione (COMP-2). Se singola precisione utilizza 4 byte (1 esponente + 3 mantissa) Se doppia precisione utilizza 8 byte (1 esponente + 7 mantissa)

TABELLE ----------------------------------------------------------

Una tabella e' un array di tipi omogenei: 01TABELLA OCCURS 10 TIMES PIC 9(6). 01TABELLA OCCURS 10 TIMES. 03 CAMPO-1 PIC 9(2). 03 CAMPO-3 PIC X(4). Per riferirsi alla variabile CAMPO-1 nel secondo elemento della tabella e' sufficente usare: campo-1(2) Volendo riferirsi all'intero secondo record della tabella: tabella(2)

OPERAZIONI MATEMATICHE ===========================================

COMPUTE ----------------------------------------------------------

Esegue le operazioni matemetiche fondamentali (+, -, /, *): COMPUTE campo-1 = VALORE * 2 + 10. COMPUTE X = VALORE + VALORE.

OPERAZIONI ALGEBRICHE --------------------------------------------

Le operazioni matematiche sono utilizzabili con keyword indipendenti: ADD op-1 op-2 ... op-n GIVING ris-1 ... ris-m ADD op-1 op-2 ... op-n TO ris-1 ... ris-m se VAR1 = 23 allora con ADD VAR1 2 GIVING RIS1 RIS2. RIS1 e RIS2 contengono 25 se VAR1 = 23 e RIS1 = 5 allora con ADD VAR1 3 TO RIS1. RIS1 contiene 31 In ugual modo vi sono: SUBTRACT op-1 ... op-n FROM valore GIVING ris-1 ... ris-m SUBTRACT op-1 ... op-n FROM valore TO ris-1 ... ris-m MULTIPLY val-1 BY val-2 GIVING ris-1 ... ris-n MULTIPLY val-1 BY ris-1 ... ris-n DIVIDE val-1 INTO val-2 GIVING ris-1 REMAINDER campo-1 DIVIDE val-1 INTO ris-1 ... ris-n

I/O CON TERMINALE ================================================

ACCEPT -----------------------------------------------------------

Attende da stdin un dato [[gets o scanf]]: ACCEPT VALORE.

DISPLAY ----------------------------------------------------------

Scrive a stdout il contenuto di una variabile [[puts o printf]]: DISPLAY VALORE.

TERMINAZIONE PROGRAMMA ===========================================

STOP RUN ---------------------------------------------------------

Termina l'esecuzione del programma [[exit o return da main]]. Deve essercene almeno una.

ISTRUZIONI DI CONTROLLO ==========================================

IF ---------------------------------------------------------------

IF condizione istruzione-1 [ ELSE istruzione-2 ]. Per es: IF VARIABILE-A > VARIABILE-B DISPLAY 'A maggiore di B' ELSE DISPLAY 'B maggiore di A'. IF SCONTO NOT EQUAL ZERO COMPUTE TOT = IMP + ( IMP * SCONTO / 100 ) DISPLAY TOT.

ALTRE ISTRUZIONI =================================================

MOVE -------------------------------------------------------------

Trasferisce il contenuto di una variabile ad un altra. MOVE campo-1 TO campo-2. MOVE 12345 TO VALORE.

FILE I/O =========================================================

DICHIARAZIONI ----------------------------------------------------

L' associazione dei files interni a quelli reali esterni viene effettuata in ENVIRONMENT DIVISION, INPUT-OUTPUT SECTION, paragrafo FILE-CONTROL mediante la clausola SELECT. ... Per ogni file gestito si deve scrivere un FD (File Description): FILE SECTION. FD nome-file LABEL RECORD IS STANDARD [BLOCK CONTAINS number RECORD]. 01 nome-record PIC .......... ...oppure... 01 REC-ARTICOLO. 03 CODICE PIC X(10). 03 DESCRIZIONE PIC X(20). 03 GIACENZA PIC 9(5). 03 GIACENZA-MIN PIC 9(5). 03 QTA-ORD PIC 9(5).

ISTRUZIONI PER OPERAZIONI SUI FILE -------------------------------

Un file puo' essere aperto in input od in output. Quando si legge un file si puo' far leggere i dati in una struttura che ricalca quella dei record nella WORKING-STORAGE SECTION. - OPEN OPEN INPUT nome-file1 [nome-file2] ... OPEN OUTPUT nome-file1 [nome-file2] ... OPEN INPUT nome-file1 OUTPUT nome-file2 - CLOSE CLOSE nome-file1 [nome-file2] ... - READ READ nome-file [AT END istruzioni] READ nome-file INTO nome-dato [AT END istruzioni] - WRITE WRITE nome-record WRITE nome-record FROM nome-dato

PRE-PROCESSING ===================================================

COPY - INCLUDE DI ALTRI FILES ------------------------------------

Mediante questo comando [[#include]] e' possibile includere altri files che contengono per esempio definizioni comuni. COPY filename

CHIAMATE DI PROGRAMMI ============================================

PERFORM ----------------------------------------------------------

PERFORM nome-di-procedura Esegue un paragrafo o una section. Equivale alla call subroutine di molti linguaggi. Al ritorno viene eseguita l'istruzione successiva.

CALL -------------------------------------------------------------

L'istruzione call consente di chiamare un sotto-programma: CALL nome-modulo Il programma chiamato ritorna il controllo mediante l'istruzione GOBACK.

USER SECTION (SUBROUTINES) ---------------------------------------

E' possibile dichiarare una subroutine mediante le istruzioni: SCONTO SECTION. INIZIO-SCONTO. COMPUTE TOT = IMP + ( IMP * SCONTO / 100 ). FINE-SCONTO. EXIT.

Designed by Alberto Bellina