Sie sind auf Seite 1von 19

COBOL

Professor Alexandre Magalhes de Mattos


1 Aula
Existem mais linhas de programao escritas em Cobol (Common Business Oriented
Language Linguagem Comum para Atividades Comerciais) do que todas as outras linguagens
juntas. Isto porque desde a sua criao em 1959 pela CODASYL (Conference On Data Systems
Languages Conferncia Sobre Linguagens e Sistemas de Dados) ela a principal linguagem
para aplicaes comerciais.
Criada especialmente para aplicaes comerciais e de gerenciamento, a grande fora
desta linguagem reside nos poderosos recursos para manipulao de arquivos.
Algumas informaes imprescindveis ao Cobol so:
a) Nas linhas dos programas o smbolo de ponto (.) utilizado como separador das
linhas de comando.
b) Pode possuir palavras de at 30 caracteres, sendo que pelo menos um deles seja uma
letra e que no comece por um hfen.
c) Os programas so escritos em um editor de texto a partir da coluna 08 (divises,
sees e pargrafos) e da 12 (o restante das linhas de comando do programa.
d) Os programas apresentam-se em quatro divises (division) conhecidas como
identification, environment, data e procedure.
Identification Division: inclui os nomes do programa e programador, as datas em que
foram escrito e compilado e comentrios introdutrios.
Environment Division: especifica os detalhes do computador aonde o programa foi
escrito e executado mas seu principal uso a especificao dos arquivos externos utilizados no
programa.
Data Division: contm os detalhes de todas as reas de dados utilizadas pelo programa.
Procedure Division: aonde as operaes e procedimentos que executaro o programa se
encontram.
Variveis
As variveis em Cobol so declaradas na Working Storage Section, um sub-item da Data
Division. Se forem variveis de uso geral ao programa a primeira linha delas ser na coluna 08 e
ter o numero 77 (no incio de sua linha) para indicar que so genricas. Se pertencerem a algum
registro de arquivo tero o valor hierrquico que indicaremos a ela (isso ser visto mais tarde).
Cabe aqui salientar que, se a varivel for alfanumrica ser identificada com o atributo
PIC X, se a varivel for alfabtica, ser identificada com o atributo PIC A e, se a varivel for
numrica, ser identificada com o atributo PIC 9.
Para informarmos ao compilador quantas posies (quantidade de dgitos) que a varivel
ter utilizamos um parntesis com esta quantidade especificada l dentro e, para declamarmos as
casas decimais das variveis numricas acrescentamos aps os parnteses V99 (que indicam a
quantidade de posies decimais que queremos).
No se esquea que o Cobol uma linguagem comercial, assim sendo voc no o
utilizar para clculos cientficos e o uso de suas variveis ser restrito aos clculos comuns.
Elas so declaradas como:
77 CEP
77 IDADE
77 SALARIO
77 SEXO
77 NOME
77 FIM

PIC 9(8).
PIC 9(3).
PIC 9(10)V99.
PIC A(1).
PIC X(30).
PIX A(1).
1

COBOL
Professor Alexandre Magalhes de Mattos
Constantes
As constantes em Cobol tambm so declaradas na Working Storage Section, dentro da
Data Division. Assim como nas variveis, se elas forem de uso geral ao programa a primeira
linha ser declarada na coluna 08 e ter o numero 77 para indicar que so genricas. Se
pertencerem a algum registro de arquivo tero um valor hierrquico.
Cabe aqui salientar o mesmo que frisamos com relao as variveis. Se forem
alfanumrica sero identificadas com o atributo PIC X e, se forem numricas, sero identificadas
com o atributo PIC 9.
coluna de texto
12345678
12
DATA DIVISION.
...
WORKING STORAGE SECTION.
77 FIM-ARQ
PIC X(003) VALUE NAO.
01 TITULO-01.
02 FILLER
PIC X(057) VALUE SPACES.
02 FILER
PIC X(055) VALUE
- NOME
DATA-ASS.
PROFISSAO.
01 TITULO-02
PIC X(132) VALUE ALL -.

OBS.: Podemos declarar o tamanho dos campos como PIC X(3); PIC X(03); PIC X (003).
Lembre-se que zeros a esquerda no tem valor matemtico. Utilizamos o PIC X (003) no
exemplo acima com 2 zeros simplesmente por motivo esttico. Veja que temos uma varivel
(titulo-02) com tamanho de 132 colunas. Ns Coboleiros somos muito metdicos e gostamos de
ter nossos programas o mais alinhadinhos possvel.
Comandos Aritmticos
No Cobol, podemos trabalhar de duas maneiras distintas.
Soma: +
Subtrao: Multiplicao: *
Diviso: /
Atribuio de valores: compute
COMPUTE SOMA = (A+B).
COMPUTE DIFERENCA = (A-B).
COMPUTE MULT = (A*B).
COMPUTE DIV = (A/B).
MOVE X TO CONTA
ADD 1 TO CONTADOR
Tambm utilizamos as seguintes expresses para as operaes aritmticas em Cobol:
Soma: ADD
ADD A TO B

ou seja B = A + B

Subtrao: SUB
SUBTRACT A FROM B

ou seja B = B A
2

COBOL
Professor Alexandre Magalhes de Mattos

Multiplicao: MPY
MULTIPLY A BY B

ou seja B = B A

Diviso: DIV
DIVIDE A INTO B

ou seja B = B A

Expresses Lgicas
Operadores relacionais em Cobol
Em Cobol, alm de utilizarmos a mesma conotao do Portugus-Estruturado e do
Pascal, podemos utilizar tambm as seguintes expresses para os operadores relacionais:
=
IS EQUAL TO
>
IS GREATER THAN
<
IS LESS THAN
<>
IS NOT EQUAL TO
Ex.:

A IS EQUAL TO B
A IS GREATER THAN B
A IS NOT EQUAL TO B

Conectivos Lgicos Cobol


Utilizamos os seguintes conectivos lgicos em Cobol:
AND
OR
NOT Torna o resultado verdadeiro se ambas as variveis/expresses no o forem.
Ex.: (A>B) AND (A>C)
(A+B < 10) OR (A*B < C)
(A>B) NOT (A>C)

O Cobol uma linguagem de programao de uso comercial. Seu cdigo fonte se torna
muito grande devido as suas caractersticas gramaticais.
Tambm cabe aqui salientar que o Cobol uma linguagem em que 99,99% de suas
atividades estaro relacionadas a leitura e gravao de arquivos. Iremos ver essa caracterstica do
Cobol em captulos mais adiante.
IDENTIFICATION DIVISION.
PROGRAM-ID. TODOS.
AUTHOR. ANALISADO POR ALEXANDRE MATTOS
PROGRAMADO POR ALEXANDRE MATTOS.
DATE-WRITTEN. 15/03/2001.
DATE-COMPILED. 16/03/2001.
REMARKS. UNIAO DOS 4 PROGRAMAS ANTERIORES.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. PENTIUM II.
3

COBOL
Professor Alexandre Magalhes de Mattos
OBJECT-COMPUTER. PENTIUM II.
SPECIAL-NAMES.
DECIMAL POINT IS COMMA.
DATA DIVISION.
WORKING-STORAGE-SECTION.
77 A
PIC 9(04).
77 B
PIC 9(04).
77 SOMA
PIC 9(05).
77 DIFERENCA
PIC 9(04).
77 MULT
PIC 9(09).
77 DIV
PIC 9(05)V99.
PROCEDURE DIVISION.
DISPLAY DIGITE O PRIMEIRO NUMERO: .
ACCEPT A.
DISPLAY DIGITE O SEGUNDO NUMERO: .
ACCEPT B.
COMPUTE SOMA = (A+B).
COMPUTE DIFERENCA = (A-B).
COMPUTE MULT = (A*B).
COMPUTE DIV = (A/B).
DISPLAY A SOMA E.
DISPLAY SOMA.
DISPLAY A DIFERENCA E.
DISPLAY DIFERENCA.
DISPLAY O PRODUTO E.
DISPLAY MULT.
DISPLAY A DIVISAO E.
DISPLAY DIV.
STOP RUN.

COBOL
Professor Alexandre Magalhes de Mattos
2 Aula
Em Cobol a estrutura de deciso ser representada com o If..Else. Perceba que no
possumos a expresso ENTO (THEN).
Assim sendo, no Cobol temos nossa estrutura de deciso com a seguinte grafia:
IF UMA CONDIO (VERDADEIRA OU FALSA)
REALIZE ALGUM PROCEDIMENTO.
ou
IF UMA CONDIO (VERDADEIRA OU FALSA)
REALIZE ALGUM PROCEDIMENTO
ELSE REALIZE OUTRO PROCEDIMENTO.
Observe que no Cobol encerramos a estrutura com o sinal de ponto (.) e no possumos o
FIM-SE (um End-if).
Uma outra caracterstica prpria do Cobol o fato de podermos incluir dentro de uma
estrutura de deciso diversos procedimentos at o ponto-final (.).
Veja a seguir:
IF UMA CONDIO (VERDADEIRA OU FALSA)
REALIZE O PROCEDIMENTO X
REALIZE O PROCEDIMENTO Y
REALIZE O PROCEDIMENTO Z
ELSE REALIZE O PROCEDIMENTO A
REALIZE O PROCEDIMENTO B
REALIZE O PROCEDIMENTO C.
IDENTIFICATION DIVISION.
PROGRAM-ID. TIME2.
AUTHOR. ANALISADO POR ALEXANDRE MATTOS
PROGRAMADO POR ALEXANDRE MATTOS.
DATE-WRITTEN. 20/03/2001.
DATE-COMPILED. 20/03/2001.
REMARKS. PROGRAMA SOBRE O VASCAO DA GAMA.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. PENTIUM II.
OBJECT-COMPUTER. PENTIUM II.
SPECIAL-NAMES.
DECIMAL POINT IS COMMA.
DATA DIVISION.
WORKING-STORAGE-SECTION.
77 NOME
PIC X(30).
77 TIME
PIC X(10).
PROCEDURE DIVISION.
DISPLAY DIGITE SEU NOME: .
ACCEPT NOME.
DISPLAY DIGITE O NOME DO SEU TIME DE FUTEBOL :.
5

COBOL
Professor Alexandre Magalhes de Mattos
ACCEPT TIME.
IF TIME = VASCO OR VASCO DA GAMA
DISPLAY Parabens, seu time e o primeiro campeao do milenio
ELSE DISPLAY sabia que o vasco da gama e o primeiro campeao do milenio?.
STOP RUN.

IDENTIFICATION DIVISION.
PROGRAM-ID. MEDIA2.
AUTHOR. ANALISADO POR ALEXANDRE MATTOS
PROGRAMADO POR ALEXANDRE MATTOS.
DATE-WRITTEN. 21/03/2001.
DATE-COMPILED. 21/03/2001.
REMARKS. PROGRAMA QUE CALCULA MEDIA COM COMENTARIO.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. PENTIUM II.
OBJECT-COMPUTER. PENTIUM II.
SPECIAL-NAMES.
DECIMAL POINT IS COMMA.
DATA DIVISION.
WORKING-STORAGE-SECTION.
77 NOTA1 PIC 9(02).
77 NOTA2 PIC 9(02).
77 MEDIA PIC 9(04)V99.
77 NOME
PIC X(30).
77 SEXO
PIC A(01).
PROCEDURE DIVISION.
DISPLAY DIGITE O NOME DO ALUNO: .
ACCEPT NOME.
DISPLAY DIGITE SUA PRIMEIRA NOTA DE PROVA: .
ACCEPT NOTA1.
DISPLAY DIGITE SUA SEGUNDA NOTA DE PROVA: .
ACCEPT NOTA2.
DISPLAY DIGITE O SEXO DO ALUNO [M/F]: .
ACCEPT SEXO.
COMPUTE MEDIA = (NOTA1 + NOTA2) / 2;
IF (MEDIA >= 7) AND (SEXO = F)
DISPLAY (A aluna, NOME, esta aprovada com media:, MEDIA)
ELSE
IF (MEDIA >= 7) AND (SEXO = M)
DISPLAY (o aluno, NOME, esta aprovado com media:, MEDIA)
ELSE
IF (MEDIA < 7) AND (SEXO = F)
DISPLAY (A aluna, NOME, esta reprovada com media:, MEDIA)
ELSE DISPLAY (o aluno , NOME, esta reprovado com
-media: , MEDIA).
STOP RUN.
6

COBOL
Professor Alexandre Magalhes de Mattos
3 Aula
Perform..Until
No existe em Cobol as estruturas Enquanto..Faa (While..Do) e Repita..At-que
(Repeat..Until).
Ao invs delas duas, temos em Cobol a estrutura Perform..Until (Execute..At).
Veja nos programas a seguir como funciona essa estrutura:
IDENTIFICATION DIVISION.
PROGRAM-ID. TIME2.
AUTHOR. ANALISADO POR ALEXANDRE MATTOS
PROGRAMADO POR ALEXANDRE MATTOS.
DATE-WRITTEN. 17/04/2001.
DATE-COMPILED. 17/04/2001.
REMARKS. PROGRAMA SOBRE O VASCAO DA GAMA.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. PENTIUM II.
OBJECT-COMPUTER. PENTIUM II.
SPECIAL-NAMES.
DECIMAL POINT IS COMMA.
DATA DIVISION.
WORKING-STORAGE-SECTION.
77 NOME
PIC X(30).
77 TIME
PIC X(10).
77 CONT
PIC X(01).
PROCEDURE DIVISION.
PERFORM TESTADOR THRU FIM-TESTADOR UNTIL CONT = N.
STOP RUN.
TESTADOR.
MOVE S TO CONT.
DISPLAY DIGITE SEU NOME: .
ACCEPT NOME.
DISPLAY DIGITE O NOME DO SEU TIME DE FUTEBOL :.
ACCEPT TIME.
IF TIME = VASCO OR VASCO DA GAMA
DISPLAY (Parabens, seu time e o primeiro campeao do milenio)
ELSE DISPLAY (Sabia que o Vasco da Gama e o
-primeiro campeao do milenio?.
DISPLAY (DESEJA CONTINUAR? [S/N]).
ACCEPT CONT.
FIM-TESTADOR.
IDENTIFICATION DIVISION.
PROGRAM-ID. MEDIA2.
AUTHOR. ANALISADO POR ALEXANDRE MATTOS
PROGRAMADO POR ALEXANDRE MATTOS.
7

COBOL
Professor Alexandre Magalhes de Mattos
DATE-WRITTEN. 17/04/2001.
DATE-COMPILED. 17/04/2001.
REMARKS. PROGRAMA QUE CALCULA MEDIA COM COMENTARIO.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. PENTIUM II.
OBJECT-COMPUTER. PENTIUM II.
SPECIAL-NAMES.
DECIMAL POINT IS COMMA.
DATA DIVISION.
WORKING-STORAGE-SECTION.
77 NOTA1 PIC 9(02).
77 NOTA2 PIC 9(02).
77 MEDIA PIC 9(04)V99.
77 NOME
PIC X(30).
77 SEXO
PIC A(01).
77 CONT
PIX X(01).
PROCEDURE DIVISION.
PERFORM TESTADOR THRU FIM-TESTADOR UNTIL CONT = S.
STOP RUN.
TESTADOR.
MOVE N TO CONT.
DISPLAY DIGITE O NOME DO ALUNO: .
ACCEPT NOME.
DISPLAY DIGITE SUA PRIMEIRA NOTA DE PROVA: .
ACCEPT NOTA1.
DISPLAY DIGITE SUA SEGUNDA NOTA DE PROVA: .
ACCEPT NOTA2.
DISPLAY DIGITE O SEXO DO ALUNO [M/F]: .
ACCEPT SEXO.
COMPUTE MEDIA = (NOTA1 + NOTA2) / 2;
IF (MEDIA >= 7) AND (SEXO = F) DISPLAY (A
-aluna, NOME, esta aprovada com media:, MEDIA)
ELSE
IF (MEDIA >= 7) AND (SEXO = M) DISPLAY
-O aluno, NOME, esta aprovado com media:, MEDIA)
ELSE
IF (MEDIA < 7) AND (SEXO = F) DISPLAY
-(A aluna, NOME, esta reprovada com media:, MEDIA)
ELSE DISPLAY
-(O Aluno , NOME, esta reprovado com media: , MEDIA).
DISPLAY (DESEJA PARAR? [S/N]).
ACCEPT CONT.
FIM-TESTADOR.

COBOL
Professor Alexandre Magalhes de Mattos
Perform..Varying
A estrutura de repetio FOR representada em Cobol pela estrutura Perform..Varying.
Como no Perform..Until, iremos utilizar blocos de programas aonde, dentro deles,
teremos a repetio da estrutura.
IDENTIFICATION DIVISION.
PROGRAM-ID. COMFOR.
AUTHOR. ANALISADO POR ALEXANDRE MATTOS
PROGRAMADO POR ALEXANDRE MATTOS.
DATE-WRITTEN. 17/04/2001.
DATE-COMPILED. 17/04/2001.
REMARKS. PROGRAMA PARA VERIFICAR O FOR-NEXT EM COBOL.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. PENTIUM II.
OBJECT-COMPUTER. PENTIUM II.
SPECIAL-NAMES.
DECIMAL POINT IS COMMA.
DATA DIVISION.
WORKING-STORAGE-SECTION.
77 SOMA
PIC 9(02).
77 I
PIC 9(02).
PROCEDURE DIVISION.
PERFORM REPETIDOR THRU FIM-REPETIDOR
VARYING I FROM 1 BY 1 UNTIL I = 10.
DISPLAY (RESULTADO =, SOMA);
STOP RUN.
REPETIDOR.
SOMA := SOMA + 1.
FIM-REPETIDOR.

IDENTIFICATION DIVISION.
PROGRAM-ID. DECREMENTO1.
AUTHOR. ANALISADO POR ALEXANDRE MATTOS
PROGRAMADO POR ALEXANDRE MATTOS.
DATE-WRITTEN. 17/04/2001.
DATE-COMPILED. 17/04/2001.
REMARKS. PROGRAMA PARA VERIFICAR O FOR-NEXT EM COBOL.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. PENTIUM II.
OBJECT-COMPUTER. PENTIUM II.
SPECIAL-NAMES.
DECIMAL POINT IS COMMA.
9

COBOL
Professor Alexandre Magalhes de Mattos
DATA DIVISION.
WORKING-STORAGE-SECTION.
77 I PIC 9(02).
PROCEDURE DIVISION.
PERFORM REPETIDOR THRU FIM-REPETIDOR
VARYING I FROM 100 BY -2 UNTIL I = 50.
STOP RUN.

REPETIDOR.
DISPLAY I.
FIM-REPETIDOR.

IDENTIFICATION DIVISION.
PROGRAM-ID. PARES.
AUTHOR. ANALISADO POR ALEXANDRE MATTOS
PROGRAMADO POR ALEXANDRE MATTOS.
DATE-WRITTEN. 18/04/2001.
DATE-COMPILED. 18/04/2001.
REMARKS. PROGRAMA PARA VERIFICAR O FOR-NEXT EM COBOL.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. PENTIUM II.
OBJECT-COMPUTER. PENTIUM II.
SPECIAL-NAMES.
DECIMAL POINT IS COMMA.
DATA DIVISION.
WORKING-STORAGE-SECTION.
77 I PIC 9(02).
PROCEDURE DIVISION.
PERFORM REPETIDOR THRU FIM-REPETIDOR
VARYING I FROM 0 BY 2 UNTIL I = 100.
STOP RUN.

REPETIDOR.
DISPLAY (O PROXIMO NUMERO PAR EH: );
DISPLAY (I);
FIM-REPETIDOR.

IDENTIFICATION DIVISION.
PROGRAM-ID. FATORIAL.
AUTHOR. ANALISADO POR ALEXANDRE MATTOS
PROGRAMADO POR ALEXANDRE MATTOS.
10

COBOL
Professor Alexandre Magalhes de Mattos
DATE-WRITTEN. 18/04/2001.
DATE-COMPILED. 18/04/2001.
REMARKS. PROGRAMA PARA VERIFICAR O FOR-NEXT EM COBOL.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. PENTIUM II.
OBJECT-COMPUTER. PENTIUM II.
SPECIAL-NAMES.
DECIMAL POINT IS COMMA.
DATA DIVISION.
WORKING-STORAGE-SECTION.
77 I
PIC 9(02).
77 N
PIC 9(02).
77 FAT
PIC 9(06).

PROCEDURE DIVISION.
PERFORM INCIALIZA THRU FIM-INICIALIZA.
PERFORM REPETIDOR THRU FIM-REPETIDOR VARYING I FROM N BY 1 UNTIL I = 1.
DISPLAY O FATORIAL DE , N, EH , FAT.
STOP RUN.

INICIALIZA.
DISPLAY ENTRE COM UM NUMERO: .
ACCEPT N;
MOVE 1 TO FAT.
FIM-INICIALIZA.

REPETIDOR.
COMPUTE FAT = FAT * I;
FIM-REPETIDOR.

11

COBOL
Professor Alexandre Magalhes de Mattos
4 Aula
A diferena de uma tabela Cobol para o nosso Portugus-Estruturado e para o Pascal
que uma tabela em Cobol pode ser de 2 tipos:
Subscrio
A subscrio nada mais do que fazer uma referncia aos elementos da tabela que
trabalharemos atravs de uma constante ou de um campo numrico chamado subscritor e ele
deve ser definido na WORKING-STORAGE SECTION.
Indexao
A indexao uma maneira na qual fazemos referncia aos elementos de uma tabela
atravs de um ndice. Tal qual nosso Portugus-Estruturado e nosso Pascal. A diferena que ao
invs de utilizarmos uma estrutura For..Next definiremos nosso ndice na opo INDEXED BY
da clusula OCCURS.
Veja nos exemplo a seguir como funciona essa estrutura:
Working-storage-section.
01
ocorrencia1.
05

nome pic x(20) occurs 10 times.

01

ocorrencia2 value all x.


05
campo pic x(01) occurs 100 times.

01

ocorrencia3.
05

media pic 9(04)v99 occurs 50 times.

Entenda que:

A tabela OCORRENCIA1 um item de grupo que engloba uma


NOME com 10 posies de 20 caracteres cada.

A tabela OCORRENCIA2 um item de grupo que engloba uma


CAMPO com 100 posies que sero preenchidas com o valor X tendo cada
comprimento.

A tabela OCORRENCIA3 um item de grupo que engloba uma


MEDIA com 50 posies de 4 nmeros cada sendo que haver 2 casas decimais.

tabela chamada
tabela chamada
uma 1 byte de
tabela chamada

Portanto a clusula OCCURS que indicar a quantidade de ocorrncias em nossas


tabelas.
A tabela, e conseqentemente, a clusulA OCCURS possui alguns outros parmetros:
DEPENDING ON: controla o nmero de ocorrncias que efetivamente a tabela tem
preenchidas. O valor deve ser menor ou igual ao nmero de ocorrncias definidas para
OCCURS.
ASCENDING: informa que a tabela est ordenada em ordem ascendente por um campo
que o programador/analista definir.
INDEXED BY: indica que queremos criar um ndice para esta tabela.
Imagine que temos a seguinte tabela:
Cdigo da Funo
Descrio da Funo
001
ENGENHEIRO
002
PROGRAMADOR
003
ANALISTA
12

COBOL
Professor Alexandre Magalhes de Mattos
004
005

MEDICO
DENTISTA

Poderamos ter em Cobol a seguinte tabela:


01 TABELA.
02 DADOS
PIC X(070) VALUE
-001ENGENHEIRO002PROGRAMADOR003ANALISTA004MEDICO
-005DENTISTA.
02 NOVA-VISAO
REDEFINES DADOS.
03 LINHA-TAB
OCCUR 5 TIMES
05 COD-FUNC-TAB PIC X(003).
05 DESC-FUNC-TAB
PIC X(011).
MOVE 001
TO COD-FUNC-TAB(1).
MOVE ENGENHEIRO
TO DESC-FUNC-TAB(1).
MOVE 002
TO COD-FUNC-TAB(2).
MOVE PROGRAMADOR
TO DESC-FUNC-TAB(2).
:
:
MOVE 005
TO COD-FUNC-TAB(5).
MOVE DENTISTA
TO DESC-FUNC-TAB(5).

Nossa linha de programao na Procedure Division seriam algo do tipo:


PERFORM <PARGRAFO> THRU <FIM-PARGRAFO> VARYING <NOME-DADO1> from
<nome-dado2> by <nome-dado3> until <condio>
Ou seja, algo do tipo:
PERFORM PESQUISA THRU FIM-PESQUISA VARYING I FROM 1 BY 1 UNTIL I=5 OR
COD-FUNC-TAB(I) = CODIGO-FUNCAO.
IF COD-FUN-TAB(I) = CODIGO-FUNCAO DISPLAY PESQUISA OK ELSE DISPLAY
ERRO.
Vamos agora codificar nosso programa de clculo de mdia para 50 alunos de uma turma
em Cobol.
IDENTIFICATION DIVISION.
PROGRAM-ID. MEDIA-PROVAS.
AUTHOR. ANALISADO POR ALEXANDRE MATTOS
PROGRAMADO POR ALEXANDRE MATTOS.
DATE-WRITTEN. 23/07/2001.
DATE-COMPILED. 23/07/2001.
REMARKS. PROGRAMA QUE CALCULA MEDIA DE 50 ALUNOS.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. PENTIUM II.
OBJECT-COMPUTER. PENTIUM II.
13

COBOL
Professor Alexandre Magalhes de Mattos
SPECIAL-NAMES.
DECIMAL POINT IS COMMA.
DATA DIVISION.
WORKING-STORAGE-SECTION.
77
CONT PIC 9(04).
01
01

TURMA.
NOTAS VALUE ALL 0.
05
NOTA1 PIC 9(04)V99 OCCURS 50 TIMES.
05
NOTA2 PIC 9(04)V99 OCCURS 50 TIMES.
05
MEDIA PIC 9(04)V99 OCCURS 50 TIMES.

01

ALUNO.
05
NOME PIC X(30) OCCURS 50 TIMES.

PROCEDURE DIVISION.
PERFORM ARMAZENADOR THRU FIM-ARMAZENADOR 50 TIMES.
ADD 1 TO CONT.
PERFORM EXIBIDOR THRU FIM-EXIBIDOR 50 TIMES.
STOP RUN.
ARMAZENADOR.
ADD 1 TO CONT.
DISPLAY DIGITE O NOME DO ALUNO: .
ACCEPT NOME(CONT).
DISPLAY DIGITE SUA PRIMEIRA NOTA DE PROVA: .
ACCEPT NOTA1(CONT).
DISPLAY DIGITE SUA SEGUNDA NOTA DE PROVA: .
ACCEPT NOTA2(CONT).
COMPUTE MEDIA(CONT)=(NOTA1(CONT) + NOTA2(CONT))/2.
FIM-ARMAZENADOR.
EXIBIDOR.
DISPLAY NOME(CONT).
DISPLAY MEDIA(CONT).
FIM-EXIBIDOR.

14

COBOL
Professor Alexandre Magalhes de Mattos
5 Aula
Quando comeamos a programar em Cobol percebemos de imediato que ele uma
linguagem estruturada pelo simples fato de que todas as suas estruturas so divididas em sees,
Essa diviso de sees nos permite atacar diretamente um problema ou erro. Ou seja, se
tivermos um problema com algum dado de um programa, nos dirigimos a DATA DIVISION.
Se o programa est sendo excecutado erroneamente, ento vamos para a PROCEDURE
DIVISION. Se sabemos qual parte do programa no est executando direito, vamos ao
cabealho aonde o erro est ocorrendo.
Esse cabealho, que no Pascal seria uma Procedure, chamado por um comando
denominado PERFORM.
A praticidade do Cobol nos permite adicionar clusulas, condies, verificaes,
repeties e o que mais quisermos para controlar a execuo de um cabealho.
Veja a seguir alguns exemplos:
PERFORM BLOCO-INICIO.
Executaremos o pargrafo BLOCO-INICIO de seu incio at o seu final.
PERFORM ARMAZENADOR THRU FIM-ARMAZENADOR.
Executaremos o pargrafo ARMAZENADOR de seu incio at o seu final. Perceba que
a clusula FIM-ARMAZENADOR inserida apenas para que tenhamos uma noo em nosso
programa de onde o incio e onde o trmino do bloco.
PERFORM ARMAZENADOR THRU FIM-ARMAZENADOR 50 TIMES.
Executaremos o pargrafo ARMAZENADOR de seu incio at o seu final no mximo
50 vezes.
perform principal until fim-arq = sim.
Executaremos o pargrafo PRINCIPAL at que a condio seja satisfeita. Teramos um
tipo de Repeat..Until.
PERFORM PROCESSA-DEPTO THRU FIM-PROCESSA-DEPTO UNTIL FIMARQ=SIMOR DEPTO NOT = DEPT-ANT.
Executaremos o pargrafo PROCESSA-DEPTO at o seu afinal at que uma das duas
condies seja satisfeita. Teramos um tipo de Repeat..Until com dois testes.
PERFORM CADASTRO THRU FIM-CADASTRO VARYING I FROM 1 BY 1 UNTIL I=500
OR COD-FUNC-TAB(I) = CODIGO-FUNCAO.
O pargrafo CADASTRO ser executado e terminar em duas hipteses. Como se
estivesse em uma estrutura For..next com valor mximo de 500 ocorrcias ou quando a condio
de igualdade for satisfeita.
PERFORM PESQUISA THRU FIM-PESQUISA UNTIL I<=500 OR ACHOU = SIM.
O pargrafo PESQUISA, que obviamente deve executar algum tipo de pesquisa, ser
executado e terminar ou quando chegar ao elemento de nmero 500 ou quando a condio de
igualdade for satisfeita.

Como voc pode perceber, a sintaxe do PERFORM pode ser feita da maneira mais
funcional possvel para que o programa alcance seu objetivo.
15

COBOL
Professor Alexandre Magalhes de Mattos
No existe limite de condies para um PERFORM mas certamente a velocidade de
processamento de seu programa ser proporcional a quantidade de verificaes que o mesmo
fizer.
Obs.: Muitos programadores preguiosos adoram utilizar o comando GO ou GOTO em seus
programas ao invs do PERFORM. A diferena bsica que o PERFORM retorna para a linha
imediatamente aps aquela em que foi chamado. Se voc quer trabalhar profissionalmente e de
uma maneira estruturada, JAMAIS utilize GO e GOTO em seus programas. Usando-os voc
assim estar passando um atestado de que no sabe estruturar um programa.

16

COBOL
Professor Alexandre Magalhes de Mattos
6 Aula
Os arquivos em Cobol so organizados de maneira seqencial. Ou seja, os registros so
gravados no arquivo um aps o outro e a nica maneira de se acessar esses arquivos seqenciais
atravs de leitura (acesso) seqencial.
Obviamente que os novos registros para um arquivo s sero includos no final do deste.
Podemos dividir os arquivos seqenciais de duas maneiras: os do tipo LINE
SEQUENTIAL e os do tipo RECORD SEQUENTIAL.
Os arquivos do tipo LINE RECORD so arquivos do tipo texto e podem ser criados por
editores de texto, como um arquivo em Pascal. Seu formato varivel e no final da linha de
dados de um registro usado um delimitador para identificar o final de um registro e o incio do
prximo.
Os arquivos do tipo RECORD SEQUENTIAL se diferenciam do LINE SEQUENTIAL
pode possurem um formato fixo de seus registros, ou seja, todos tm que ter necessariamente o
mesmo tamanho.
Vejamos um exemplo:
IDENTIFICATION DIVISION.
PROGRAM-ID. EXEMPLO1.
AUTHOR. ANALISADO POR ALEXANDRE MATTOS
PROGRAMADO POR ALEXANDRE MATTOS.
DATE-WRITTEN. 25/07/2001.
DATE-COMPILED. 25/07/2001.
REMARKS. PROGRAMA QUE EXEMPLIFICA ARQUIVOS.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. PENTIUM II.
OBJECT-COMPUTER. PENTIUM II.
SPECIAL-NAMES.
DECIMAL POINT IS COMMA.
INPUT-OUTPUT SECTION.
FILE CONTROL.
SELECT ENTRADA ASSIGN TO DISK
ORGANIZATION IS LINE SEQUENTIAL.
SELECT SAIDA ASSIGN TO DISK
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD ENTRADA
LABEL RECORD IS STANDARD
FILE IS ASSINAN.DAT.
01 REG-ASSINANTES.
05 NOME
PIC X(30).
05 PROFISSAO
PIC X(03).
05 DATA-ASS
PIC 9(06).

17

COBOL
Professor Alexandre Magalhes de Mattos

FD RELATORIO
LABEL RECORD IS OMITTED.
01 LINHA
PIC X(132).

WORKING-STORAGE-SECTION.
77
TOTAL-ASS
PIC 9(05).
77
TOT-ASS-ANT
PIC 9(04)
77
FIM-ARQ
PIC X(03) VALUE NAO.
01 DETALHE.
02 FILLER
PIC X(10) VALUE SPACES.
02 DET-NOME
PIC X(30).
02 FILLER
PIC X(01) VALUE SPACES.
02 DET-DATA
PIC 9(06).
02 FILLER
PIC X(01) VALUE SPACES.
02 DET-PROFISSAO PIC X(03).
01 TITULO-01.
02 FILLER
02 FILLER

PIC X(57) VALUE SPACES.


PIC X(18) VALUE ASSINANTES ANTIGOS.

01 TITULO-02.
02 FILLER
PIC X(10) VALUE SPACES.
02 FILLER
PIC X(55) VALUE
-NOMEDATA-ASS.PROFISSAO.
01 RODAPE-01.
02 FILLER
02 FILLER
02 RP01-TOTAL-ANT
01 RODAPE-02.
02 FILLER
02 FILLER
02 RP02-TOTAL

PIC X(10) VALUE SPACES.


PIC X(24) VALUE TOTAL DE ASSINANTES ANT.
PIC 9(04).

PIC X(10) VALUE SPACES.


PIC X(10) VALUE TOTAL DE ASSINANTES.
PIC 9(05).

PROCEDURE DIVISION.
PERFORM BLOCO-INICIO.
PERFORM BLOCO-CORPO.
PERFORM BLOCO-TERMINO.

BLOCO-INICIO.
OPEN INPUT ASSINANTES
OUTPUT RELATORIO.
MOVE 0 TO TOT-ASS.
MOVE ZEROS TO TOT-ASS-ANT.
18

COBOL
Professor Alexandre Magalhes de Mattos
MOVE TITULO-01 TO LINHA.
WRITE LINHA.
MOVE TITULO-02 TO LINHA.
WRITE LINHA.
READ ASSINANTES AT END MOVE SIM TO FIM-ARQ.
FIM-BLOCO-INICIO.
BLOCO-CORPO.
PERFORM PRINCIPAL UNTIL FIM-ARQ = SIM.
FIM-BLOCO-CORPO.
BLOCO-TERMINO.
MOVE TOTAL-ASS TO RP01-ASS-TOTAL.
MOVE RODAPE-01 TO LINHA.
WRITE LINHA.
MOVE TOTAL-ASS-ANT TO RP02-TOTAL-ANT.
MOVE RODAPE-02 TO LINHA.
WRITE LINHA.
CLOSE ASSINANTES
RELATORIO.
STOP RUN.
FIM-BLOCO-TERMINO.
PRINCIPAL.
IF DATA-ASS < 990101
MOVE NOME TO DET-NOME.
MOVE DATA-ASS TO DET-DAT.
MOVE PROFISSAO TO DET-PROFISSAO.
MOVE DETALHE TO LINHA.
WRITE LINHA.
ADD 1 TO TOTAL-ASS-ANT.
READ ASSINATES AT END MOVE SIM TO FIM-ARQ.
ADD 1 TO TOT-ASS.
FIM-PRINCIPAL.

19

Das könnte Ihnen auch gefallen