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:

&#61607; 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)

&#61607; 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.

&#61607; 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!

&#61607; Libras por polegada é a medida com que a gente enche os pneus. &#61514;

&#61607; 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).

&#61607; 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.

&#61607; Fator de bloco serve para tapear os IRG do disco de armazenagem – inter-record-gap (“emenda”) espaço indesejado :-P (parquê)

&#61607; 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.

&#61607; Filler = “preenchedor”, como o salgadinho aquele, que “enche o bucho” e deixa o cara se sentindo “cheio”. :-} – Sempre alfanumérico.

&#61607; 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.

&#61607; 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).

&#61607; 5*5 é bem mais rápido e mais exato que 5^2 em Pascal :-P (5^2 pode dar 24,999995 &#61516;)

&#61607; [ 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 ]

&#61607; Só o COBOL e o BASIC e o PL1 têm operador de exponenciação genérica. (COBOL: base^expoente) (BASIC: base**expoente) (PL1: )

&#61607; Em Porto Alegre, só a CEEE e o Banrisul ainda têm programas em PL1.

&#61607; 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”.

&#61607; COBOL é a única linguagem que calcula o MOD e o DIV no mesmo comando DIVIDE.

&#61607; Para saber o dia da semana, pegar sempre o resto da divisão (MOD) da função "dia-século" por 7.

&#61607; Só em Pascal e C usam apóstrofos em vez de aspas para determinar seqüências de caracteres (strings).

&#61607; ORACLE, PROGRESS, DELPHI, INFORMIX, ADABAS, DMS-2, são alguns dos ambientes para implementar um banco de dados.

&#61607; Paradigmas: A partir do C, surgiram o C++, o C# (Sharp), o PHP, o JAVA, o JAVAscript. A partir do Pascal, surgiu o Delphi.

&#61607; “Acessar” (to access) não existe em português; em Portugal, usam “aceder”. “Indentar” (to indent) também não existe; existe “adentrar”.

&#61607; 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.