Curso de COBOL - aula 2
Notas da aula de 22.11.2008 (Aula #2) do Curso de COBOL da
Escola Alcides Maya com o Professor Roberto Cabral de Mello Borges
Exemplo de registro de estoques
REG-ESTOQUES
CODIGO (P-E-P-DC)
N 13
NOME
NA 25
UNIDADES
A 2
ESTOQUE
MIN MÁX
N 5 N 5
UNITÁRIO (custo)
6V2
ROTAÇÃO (diária)
4V2
QUANT
N 5
PRAZO (entrega)
N 3
(futuro)
NA 8
---------------------------
IDENTIFICATION DIVISION.
ENVIRONMENT DIVISION.
DATA DIVISION.
FILE SECTION.
FD CAD-ESTOQUES
RECORD CONTAINS 80 CHARACTERS
* A gente declara quantos caracteres tem, mas o compilador também faz a soma. Se não fechar, ele avisa. (Só não diz quanto deu :-P).
BLOCK CONTAINS 800 CHARACTERS.
* Fator de bloco serve para tapear os IRG do disco de armazenagem – inter-record-gap (“emenda”) espaço indesejado :-P (Exemplo: parquê)
01 REG-ESTOQUES.
03 CODIGO.
05 PAIS PIC 999.
05 EMPRESA PIC 9(4).
05 PRODUTO PIC 9(5).
05 DIG-CONTR PIC 9.
03 NOME PIC X(25).
03 UNIDADE PIC AA.
03 ESTOQUE.
05 EST-MIN PIC 9(5).
05 EST-MAX PIC 9(5).
03 CUSTO-UNIT PIC 9(6)V9(2).
03 ROTACAO PIC 9(4)V99.
03 QUANT PIC 9(5).
03 PRAZO PIC 999.
03 FILLER PIC X(8).
* Filler é sempre AlfaNumérico, pois não sabemos o que ele poderá conter no futuro. ;-)
...
WORKING-STORAGE SECTION.
...
PROCEDURE DIVISION.
...
Sintaxe da Procedure Division
PROCEDURE DIVISION.
PRINCIPAL SECTION.
P1.
...
P2.
...
SEGUNDA SECTION.
P3.
...
COMANDOS
Pascal COBOL
Atribuição := COMPUTE =
Leitura READ READ
Gravação WRITE WRITE
Teste IF IF
Desvio GO TO GO TO
(FOR – (PERFORM)
WHILE –
REPEAT)
Sintaxe do Comando Compute
COMPUTE --> variável --> = --> expressão aritmética.
Exemplos do Comando Compute comparando com Pascal:
Pascal A := 5
COBOL COMPUTE A = 5
Pascal B := A * 3 / C
COBOL COMPUTE B = A * 3 / C
Pascal X := (–B + SQRT(SQR(B) – 4*A*C))/(2*A);
COBOL COMPUTE X = (–B + SQRT(B^2 – 4*A*C))/(2*A).
Pascal X := exp(2*ln(5))
Base := 5
Expoente := 2
X := exp(expoente * ln(base));
Comandos matemáticos do COBOL, comparando com Pascal
Pascal SQR, SQRT, INT, MOD, SIN, COS, TAN, LN, LOG
COBOL Só tem SQRT. Não tem nenhuma das outras (afinal, COBOL é uma linguagem comercial, não científica)
COBOL ADD, SUBTRACT, MULTIPLY, DIVIDE
COMPUTE CONT = CONT + 1
ADD 1 TO CONT
COMPUTE X = Y – 3
SUBTRACT 3 FROM Y GIVING X
COMPUTE X = X – 3
SUBTRACT 3 FROM X
DIVIDE A BY B GIVING C REMAINDER D
A = dividendo, B = divisor, C = quociente, D = resto
DIVIDE A BY A GIVING A REMAINDER A 
COMANDOS DE ENTRADA E SAÍDA
Comando Open
Sintaxe OPEN INPUT nome-do-arquivo1 , nome-do-arquivo2 ...
OUTPUT nome-do-arquivo3 , nome-do-arquivo4 ...
INPUT-OUTPUT nome-do-arquivo5 , arquivo6 ... .
* Arquivos de entrada e saída (INPUT-OUTPUT)
são sempre do periférico DISK.
Exemplo OPEN INPUT ARQ-1
OUTPUT ARQ-2
INPUT-OUTPUT ARQ-3.
* Teclado e Tela não precisam ser abertos.
Comando Read
Sintaxe READ nome-do-arquivo AT END comando.
Exemplo READ ESTOQUES AT END ADD 1 TO CONT.
Comando Write
Sintaxe WRITE nome-registro [ FROM registro-auxiliar ].
Exemplos WRITE REG-ESTOQUES.
WRITE REG-ESTOQUES FROM REG-AUX.
Comando Close
Sintaxe CLOSE nome-arquivo1, nome-arquivo2, ... .
Exemplo CLOSE ARQ-1, ARQ-2, ARQ-3.
Comando Accept (recebe dados via teclado)
Sintaxe ACCEPT nome-campo.
Exemplo ACCEPT RESPOSTA.
Comando Display (exibe dados na tela)
Sintaxe DISPLAY [ nome-campo / string ].
Exemplos DISPLAY “Bom dia! Bom trabalho!”.
DISPLAY RESPOSTA.
DISPLAY X1, X2.
DISPLAY “X1 = ”, X1, “ X2 = ”, X2.
COMANDO DE TESTE OU DECISÃO (IF)
Sintaxe IF condição --> comandoS --> ELSE --> comandoS
Condição: variável --> operador --> (variável ou constante)
(aspas “” para constante alfanumérica)
Operador: =, >, <, EQUAL, LESS, GREATER, UNEQUAL, LEQ, GEQ, NEQ,
LESS OR EQUAL, GREATER OR EQUAL, NOT EQUAL
Exemplos IF A = 5
ADD 1 TO B
MULTIPLY 2 BY C
OPEN INPUT ARQ
ELSE
COMPUTE D = A + 3 / C
DISPLAY “ABC”.
* Colunas podem “pular” de quatro em quatro.
IF X = 3 OR Y < 5
IF Z > 4
ADD 5 TO A
ELSE
ADD 2 TO B.
IF X = 3 OR Y < 5
IF Z > 4
NEXT SENTENCE
ELSE
ADD 2 TO B
ELSE
NEXT SENTENCE.
* Consistência dos nomes de pessoas, das unidades, de
qualquer campo somente alfabético. (A até Z + branco)
IF NOME IS ALPHABETIC
NEXT SENTENCE
ELSE
DISPLAY “Campo não alfabético”.
* Consistência das quantidades e outros campos numéricos. (0 a 9)
IF QUANT IS NUMERIC
COMANDOS DE DESVIO
Comando GoTo
Sintaxe GO TO --> [ nome-parágrafo / nome-seção ]
Exemplos GO TO P1 * Parágrafo
GO TO SEGUNDA * Seção
Comando Perform
Sintaxe PERFORM [ nome-parágrafo / nome-seção ]
Exemplo PERFORM P1.
Exercício-desafio * Qual valor aparece na tela? :-}
PROCEDURE DIVISION.
P1.
COMPUTE A=0.
P2.
PERFORM P3.
P3.
PERFORM P4.
P4.
ADD 1 TO A.
P5.
DISPLAY A.
Resultado:
P1
A = 0
P2 – P3 – P4
A = 1
P3 – P4
A = 2
P4
A = 3
P5
TELA
Comparação com Pascal
Procedure consiste_data(dia, mês, ano)
...
Procedure calc_dig_contr;
...
Curiosidades:
 Códigos de barras: sistema EAN (European Article Number): país (3), empresa fabricante (4), produto (5), dígito de controle (1) – usado por 99% do mundo (o 1% são os EUA e o Canadá e as Filipinas, que usam o UPC americano :-P)
 Folha, Estoque, Contabilidade, Contas a Pagar e Contas a Receber, Controle de Conciliação Bancária – todas as empresas têm, e geralmente são em COBOL.
 Unidades: KG (quilograma), MT (metro), UN (unidade), DZ (dúzia), MI (milhar), CX (caixa), FD (fardo), PC (peça), PT (pacote), CT (cento), GR (grama), TO (tonelada), RM (resma), GS (grosa), IN (inch – polegada)... Parece que são 62 siglas!
 Libras por polegada é a medida com que a gente enche os pneus. 
 Farmácias trabalham com estoque de remédios bem baixo. Prazo de entrega é de um dia. E têm controle de “estoque no verão / estoque no inverno” (bronzeador x benegrip).
 O "Unidão" foi o primeiro no Brasil a bolar um jeito de lidar com a caixa unitária de leite e com a caixa de dúzia de leite – agora o Zaffari já tem.
 Fator de bloco serve para tapear os IRG do disco de armazenagem – inter-record-gap (“emenda”) espaço indesejado :-P (parquê)
 Em dispositivos que têm motor têm IRG. Daqui a cinco anos, não deve haver mais discos, mas sim algo semelhante a um pendrive.
 Filler = “preenchedor”, como o salgadinho aquele, que “enche o bucho” e deixa o cara se sentindo “cheio”. :-} – Sempre alfanumérico.
 Antiga T.R.U. foi extinta. Programadores “escolados” apenas comentaram as linhas de cálculo dela. Os que apagaram as linhas, tiveram que reprogramar tudo quando “surgiu” o IPVA. Os “escolados” apenas DEScomentaram.
 Os cinco comandos que todas as linguagens têm que ter são os de Atribuição, Leitura, Gravação, Teste (sempre IF em todas), Desvio (não usar GO TO).
 5*5 é bem mais rápido e mais exato que 5^2 em Pascal :-P (5^2 pode dar 24,999995 )
 [ X=5^2 --> ln X = ln 5^2 --> ln X = 2*ln 5 --> e^(ln X) = e^(2*ln 5) --> X = e^(2*ln 5) = e^(2*1,60943...) = e^3,218875 = 25 ]
 Só o COBOL e o BASIC e o PL1 têm operador de exponenciação genérica. (COBOL: base^expoente) (BASIC: base**expoente) (PL1: )
 Em Porto Alegre, só a CEEE e o Banrisul ainda têm programas em PL1.
 Sempre é bom lembrar! Primeira etapa: Definição – tabela de decisão – fluxograma – teste de mesa (caprichar nesta etapa, para não sofrer na etapa seguinte). Etapa seguinte: Codificar o programa-fonte no papel – digitar o programa-fonte no computador – compilar o programa-fonte (.COB) – corrigir erros de sintaxe – compilador gera o programa-objeto (.OBJ) – converter em (.EXE) – executar/testar o .OBJ – rezar – depurar os erros de lógica – “agora vai”.
 COBOL é a única linguagem que calcula o MOD e o DIV no mesmo comando DIVIDE.
 Para saber o dia da semana, pegar sempre o resto da divisão (MOD) da função "dia-século" por 7.
 Só em Pascal e C usam apóstrofos em vez de aspas para determinar seqüências de caracteres (strings).
 ORACLE, PROGRESS, DELPHI, INFORMIX, ADABAS, DMS-2, são alguns dos ambientes para implementar um banco de dados.
 Paradigmas: A partir do C, surgiram o C++, o C# (Sharp), o PHP, o JAVA, o JAVAscript. A partir do Pascal, surgiu o Delphi.
 “Acessar” (to access) não existe em português; em Portugal, usam “aceder”. “Indentar” (to indent) também não existe; existe “adentrar”.
 Campo de formulário para data em websites deve ser um campo inteiro (e não um para dia, outro para mês e outro para ano), e o programa deve colocar as “barrinhas” e fazer a consistência do valor digitado pelo internauta.