Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Definida pela Comisso CODASYL, em 1960 Common Business Oriented Language O COBOL uma linguagem industrial, e no propriedade de nenhuma companhia ou grupo de companhias, nem de nenhuma organizao ou grupo de organizaes Nenhuma garantia dada pela Comisso CODASYL quanto preciso (accuracy) e funcionamento (functioning) do sistema de programao e da linguagem. Alm disso, a Comisso no assume nenhuma responsabilidade em relao a isso. Evoluo: ANSI COBOL 68 ANSI COBOL 74 ANSI COBOL 8? COBOL 1
Caractersticas principais *
1 Tudo global. 2 Procedimentos sem parmetros. (pargrafos). 3 S se itera sobre chamadas de procedimentos*. 4 Procedimentos usados antes de declarados. 5 Verbos SEARCH e SORT. 6 Variedade de mecanismos para formatao de mapas.
Identificao do programa (nome do programa, nome do autor, etc.) ENVIRONMENT var file of assign Especificao do hardware e do inputoutput
DATA
var
Descrio dos dados (registos dos ficheiros e variveis de trabalho) PROCEDURE procedure begin ... end. Parte algortmica COBOL 3 COBOL 4
Para definir os registos dos ficheiros WORKING-STORAGE SECTION describes records and data items that are not part of external data files, but rather are developed and processed internally PROCEDURE DIVISION (Seces escolha) COBOL 5
Exemplo (1)
IDENTIFICATION DIVISION. PROGRAM-ID. SEGREGACAO. AUTHOR. GUERREIRO. ENVIRONMENT DIVISION. CONFIGURATION SECTION. SOURCE-COMPUTER. DG MV15000. OBJECT-COMPUTER. DG MV15000. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT F-TODOS ASSIGN TO 'ALUNOS.DAT'. SELECT F-BOYS ASSIGN TO 'BOYS.DAT'. SELECT F-GIRLS ASSIGN TO 'GIRLS.DAT. DATA DIVISION. FILE SECTION. FD F-TODOS LABEL RECORD IS OMITTED DATA RECORD IS TOD-REG. 01 TOD-REG. 02 TOD-NOME PIC X(32). 02 TOD-SEXO PIC A. 02 TOD-TELEFONE PIC X(16). FD F-BOYS LABEL RECORD IS OMITTED DATA RECORD IS BOY-REG. 01 BOY-REG PIC X(49).
Exemplo (2)
FD F-GIRLS LABEL RECORD IS OMITTED DATA RECORD IS GIRL-REG. 01 GIRL-REG PIC X(49). WORKING-STORAGE SECTION. 77 B-EOF-TODOS PIC 9. PROCEDURE DIVISION. PROGRAMA. PERFORM INICIALIZACAO. PERFORM BOY-OR-GIRL UNTIL B-EOF-TODOS = 1. PERFORM FINALIZACAO. STOP RUN. INICIALIZACAO. OPEN INPUT F-TODOS. MOVE 0 TO B-EOF-TODOS. READ F-TODOS AT END MOVE 1 TO B-EOF-TODOS. OPEN OUTPUT F-BOYS, F-GIRLS. BOY-OR-GIRL. IF TOD-SEXO = 'M' WRITE BOY-REG FROM TOD-REG ELSE WRITE GIRL-REG FROM TOD-REG. READ F-TODOS AT END MOVE 1 TO B-EOF-TODOS. FINALIZACAO. CLOSE F-TODOS, F-BOYS, F-GIRLS. DISPLAY 'FIM!'.
COBOL
COBOL
Regras de codificao
Folhas de codificao baseadas nos cartes de 80 colunas: 1 Colunas 1-6: nmero sequencial opcional 2 Coluna 7: coluna de continuao '-': continuao do carto anterior (a partir da coluna 12) '/': mudana de pgina na listagem '*': linha de comentrio 3 Colunas 8-11: Zona A 4 Colunas 12-72: Zona B 5 Colunas 73-80: (identificao do programa, no processado) Convenes: 1. Zona A: ttulos de diviso, seco e pargrafo, FD, 01, 77. 2. Zona B: o resto (instrues, etc.) Data General COBOL: formato livre Zona A: a partir da coluna 1 Zona B: a partir de um TAB... Caracteres especiais (- * /): coluna 1 COBOL 10
FD file-name LABEL RECORDS ARE OMITTED DATA RECORD IS data-name. ... READ file-name RECORD AT END imperative-statement
Palavras definidas pelo utilizador (userdefined words): data-name (identificador de varivel) condition-name paragraph-name record-name file-name
9 Ficheiros OPEN INPUT F-TODOS OPEN OPEN OUTPUT F-BOYS F-GIRLS CLOSE READ READ file-name [INTO identifier] [AT END imperative-statement] WRITE WRITE record-name [FROM identifier] COBOL 12
11
PIC 9(16). PIC A(1). PIC X(32). PIC X(30). PIC X(30). PIC 9(4). PIC X(16). PIC PIC PIC PIC 9(4). 9(2). 9(10). 9(10). nomes de nomes de condio condio
* apenas um exemplo de programao COBOL. ENVIRONMENT DIVISION. CONFIGURATION SECTION. SOURCE-COMPUTER. DG MV15000. OBJECT-COMPUTER. DG MV15000. INPUT-OUTPUT SECTION. FILE-CONTROL SELECT F-CLIENTES ASSIGN TO "CLIENTES.DATA".
USAGE INDEX. PIC X. VALUE "S". VALUE "N". PIC 9 VALUE 0. VALUE 1. PIC 9. VALUE 1.
COBOL
13
COBOL
14
CONFIRMAR-DADOS-CLIENTE. DISPLAY "TUDO BEM? " NO ADVANCING. ACCEPT SIM-OU-NAO. IF SIM MOVE 1 TO B-DADOS-CLIENTE-OK ELSE MOVE 0 TO B-DADOS-CLIENTE-OK. ESCREVER-REGISTO-CLIENTE. MOVE 0 TO CLI-DIVIDA. WRITE CLI-REG. ADD 1 TO N-REGS. HAVERA-MAIS-CLIENTES. DISPLAY "Mais? ". ACCEPT SIM-OU-NAO. IF NAO MOVE 1 TO B-NAO-HA-MAIS-CLIENTES.
COBOL
15
COBOL
16
Ficheiros sequenciais
ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT file-name ASSIGN TO implementor-name [ORGANIZATION IS SEQUENTIAL] [ACCESS MODE IS SEQUENTIAL]. DATA DIVISION. FILE SECTION. FD file-name [BLOCK CONTAINS int-1 RECORDS] [RECORD CONTAINS int-2 CHARACTERS] LABEL RECORDS ARE OMITTED DATA RECORD IS data-name. 01 data-name ... Exemplo:
... SELECT F-CLIENTES ASSIGN TO NOME-F-CLIENTES. ... WORKING-STORAGE SECTION. 77 NOME-F-CLIENTES PIC X(32). ou: 77 NOME-F-CLIENTES PIC X(32) VALUE "UDD:UNIBANCO:CLIENTES".
CLOSE CLOSE file-name READ READ file-name [INTO identifier] AT END imperative statement {para ficheiros abertos com OPEN INPUT ou OPEN I-O} WRITE WRITE record-name [FROM identifier] {para ficheiros abertos com OPEN OUTPUT ou OPEN EXTEND} REWRITE REWRITE record-name [FROM identifier] {para ficheiros abertos com OPEN I-O} COBOL
COBOL
17
18
COBOL
19
COBOL
20
VALUE SPACES. VALUE "LISTAGEM DE CLIENTES". VALUE " COM DIVIDA SUPERIOR". VALUE " AO CREDITO EM ". PIC 99/99/99. X(08) VALUE SPACES.
PROCEDURE DIVISION. ESTRUTURA SECTION. PROGRAMA-PRINCIPAL. PERFORM INICIALIZACAO. PERFORM LISTAR-CONDICIONALMENTE UNTIL EOF-CLIENTES. PERFORM FINALIZACAO. STOP RUN.
COBOL
21
COBOL
22
Processamento de quadros
Declarao de uma tabela (exemplo):
WORKING-STORAGE SECTION. 77 N-CAMBIOS USAGE INDEX. 01 TABELA-CAMBIOS. 02 CAMBIOS OCCURS 0 TO 32 TIMES DEPENDING ON N-CAMBIOS INDEXED BY I-CAMBIOS. 03 PAIS-CAMBIOS PIC X(16). 03 DIVISA-CAMBIOS PIC X(8). 03 CODIGO-CAMBIOS PIC X(3). 03 FILLER PIC X(1). 03 COMPRA-CAMBIOS PIC 9(4)V9(4). 03 VENDA-CAMBIOS PIC 9(4)V9(4).
CARREGAR-CAMBIOS. OPEN INPUT F-CAMBIOS. xx := y; MOVE 0 TO B-EOF-CAMBIOS. := y; while not cc do PERFORM LER-UM-CAMBIO while not do begin VARYING I-CAMBIOS FROM 1 BY 1 begin p; UNTIL EOF-CAMBIOS. p; xx := xx ++ zz COMPUTE N-CAMBIOS = I-CAMBIOS - 1. := end; CLOSE F-CAMBIOS. end; LER-UM-CAMBIO. READ F-CAMBIOS INTO CAMBIOS (I-CAMBIOS) AT END MOVE 1 TO B-EOF-CAMBIOS.
COBOL
23
COBOL
24
Busca linear
77 ESTE-CODIGO 77 B-HA-CODIGO 88 HA-CODIGO ... PIC X(3). PIC 9. VALUE 1.
Busca dicotmica
DATA DIVISION. 77 N-CAMBIOS USAGE INDEX. 01 TABELA-CAMBIOS. 02 CAMBIOS OCCURS 0 TO 32 TIMES DEPENDING ON N-CAMBIOS ASCENDING KEY IS CODIGO-CAMBIOS INDEXED BY I-CAMBIOS. 03 PAIS-CAMBIOS PIC X(16). 03 DIVISA-CAMBIOS PIC X(8). 03 CODIGO-CAMBIOS PIC X(3). 03 FILLER PIC X(1). 03 COMPRA-CAMBIOS PIC 9(4)V9(4). 03 VENDA-CAMBIOS PIC 9(4)V9(4). ... BUSCA-CODIGO. SEARCH ALL CAMBIOS AT END MOVE 0 TO B-HA-CODIGO WHEN CODIGO-CAMBIOS (I-CAMBIOS) = ESTE-CODIGO MOVE 1 TO B-HA-CODIGO.
BUSCA-CODIGO. SET I-CAMBIOS TO 1. SEARCH CAMBIOS AT END MOVE 0 TO B-HA-CODIGO WHEN CODIGO-CAMBIOS (I-CAMBIOS) = ESTE-CODIGO MOVE 1 TO B-HA-CODIGO. ... MOSTRAR-CAMBIO. ACCEPT ESTE-CODIGO. PERFORM BUSCA-CODIGO. IF HA-CODIGO DISPLAY PAIS-CAMBIOS (I-CAMBIOS) DIVISA-CAMBIOS (I-CAMBIOS) COMPRA-CAMBIOS (I-CAMBIOS) VENDA-CAMBIOS (I-CAMBIOS) ELSE DISPLAY "*** CODIGO INEXISTENTE ***". Notas: Os ndices tm que ser constantes ou variveis (no podem ser expresses). Tem que haver um espao antes do '('. No h MOVE, ADD ou SUBTRACT para indexadores. S SET.
Notas: No SEARCH simples pode haver vrios WHENs e as condies so arbitrrias; No SEARCH ALL s pode haver um WHEN.
COBOL
25
COBOL
26
Tabelas de constantes
01 TABELA-MESES 02 FILLER PIC X(9) VALUE "JANEIRO ". 02 FILLER PIC X(9) VALUE "FEVEREIRO". 02 FILLER PIC X(9) VALUE "MARO ". 02 FILLER PIC X(9) VALUE "ABRIL ". 02 FILLER PIC X(9) VALUE "MAIO ". 02 FILLER PIC X(9) VALUE "JUNHO ". 02 FILLER PIC X(9) VALUE "JULHO ". 02 FILLER PIC X(9) VALUE "AGOSTO ". 02 FILLER PIC X(9) VALUE "SETEMBRO ". 02 FILLER PIC X(9) VALUE "OUTUBRO ". 02 FILLER PIC X(9) VALUE "NOVEMBRO ". 02 FILLER PIC X(9) VALUE "DEZEMBRO ". 01 FILLER REDEFINES TABELA-MESES. 02 MES PIC X(9) OCCURS 12 TIMES.
Ordenao de ficheiros
Exemplo: ordenao do ficheiro de cmbios.
IDENTIFICATION DIVISION. PROGRAM-ID. SORT-CAMBIOS. * * * * EXEMPLO DA UTILIZACAO DO VERBO SORT, PARA ORDENAR O FICHEIRO DE CAMBIOS F-CAMB, COM RESULTADO NO FICHEIRO F-CAMB-ORD.
ENVIRONMENT DIVISION. CONFIGURATION SECTION. SOURCE-COMPUTER. DG MV15000. OBJECT-COMPUTER. DG MV15000. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT F-CAMB ASSIGN TO NOME-F-CAMB. SELECT F-CAMB-ORD ASSIGN TO NOME-F-CAMB-ORD. SELECT F-SORT ASSING TO NOME-F-SORT. DATA DIVISION. FILE SECTION. FD F-CAMB LABEL 01 CAMB-REC FD F-CAMB-ORD LABEL 01 CAMB-REC-ORD
Exemplo:
01 HOJE. 02 HOJE-ANO 02 HOJE-MES 02 HOJE-DIA ... DISPLAY-HOJE. ACCEPT HOJE FROM DATE. DISPLAY HOJE-DIA, " DE ", MES (HOJE-MES), " DE 19", HOJE-ANO. PIC 9(2). PIC 9(2). PIC 9(2).
COBOL
27
COBOL
28
WORKING-STORAGE SECTION. 77 NOME-F-CAMB PIC X(12) VALUE "FCAMBIOS.DAT". 77 NOME-F-CAMB-ORD PIC X(12) VALUE "FCAMBIOS.ORD". PROCEDURE DIVISION. PARAGRAFO-UNICO. SORT F-SORT ON ASCENDING KEY SORT-KEY USING F-CAMB GIVING F-CAMB-ORD. STOP RUN. Notas: Pode haver vrias chaves de ordenao (ASCENDING e DESCENDING). O verbo SORT abre e fecha os trs ficheiros envolvidos. Existe uma variante com INPUT PROCEDURE que emite os registos para ordenao (verbo RELEASE); e outra com OUTPUT PROCEDURE, que recolhe os registos de ordenao (verbo RETURN).
COBOL
29
COBOL
30
data-name]
COBOL
31
COBOL
32
Aleatrio
Gostaram?
Dinmico
COBOL
33
COBOL
34