Buscar

APOSTILA COBOL

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 43 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 43 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 43 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

COBOL 
 
 
 
 
 
Lógica estruturada e linguagem 
de programação Cobol para 
processamento de dados de 
grandes empresas 
 
 
 
 
 
 
 
 
 
Edinelson Pacci 
Maria Edjane 
 
 COBOL 
 
 
2 
 
 
PÚBLICO-ALVO 
 
Este material se destina à estudantes com 
conhecimento iniciante em raciocínio lógico para 
resolver problemas. 
 
 
OBJETIVOS 
 
1. Capacitar os alunos na construção de programas 
cobol fáceis de ler, depurar, modificar e manter. 
 
2. Treinar o pensamento lógico para construção de 
programas estruturados para processamento batch de 
dados de grandes empresas. 
 
3. Apresentar aos alunos metodo de programação 
estruturada. 
 
4. Simular o ambiente de trabalho de fábrica de 
programas, preparando os participantes para o 
mercado de trabalho na área de programação e 
desenvolvimento de sistemas. 
 
 
 COBOL 
 
 
3 
 
 
ÍNDICE 
1. INTRODUÇÃO ............................................................................................................................... 5 
IDENTAÇÃO .............................................................................................................................................. 5 
2. FORMATO DO FONTE COBOL ............................................................................................... 7 
ÁREA DE NUMERAÇÃO SEQÜENCIAL (COLUNAS DE 1 A 6) ....................................................... 7 
ÁREA DE INDICAÇÃO (COLUNA 7) ..................................................................................................... 7 
ÁREA A ÁREA B (COLUNAS DE 8 A 72) ............................................................................................ 8 
3. DIVISÕES DO COBOL .............................................................................................................. 9 
IDENTIFICATION DIVISION................................................................................................................. 9 
ENVIRONMENT DIVISION .................................................................................................................. 10 
CONFIGURATION SECTION .............................................................................................................. 10 
INPUT-OUTPUT SECTION .................................................................................................................. 10 
DATA DIVISION ..................................................................................................................................... 11 
FILE SECTION. ...................................................................................................................................... 11 
WORKING-STORAGE SECTION. ...................................................................................................... 11 
ESPECIFICAÇÃO PARA DADOS DE ARQUIVOS OU VÁRIAVEIS ............................................ 11 
MÁSCARAS DE EDIÇÃO ...................................................................................................................... 14 
BLANK WHEN ZERO ............................................................................................................................. 14 
PROCEDURE DIVISION ....................................................................................................................... 16 
4. COMANDOS DE REPETIÇÃO PROGRAMAÇÃO ESTRUTURADA .................... 17 
PERFORM ................................................................................................................................................ 17 
PERFORM PARÁGRAFO [THRU] PARÁGRAFO-FIM ................................................................................ 17 
PERFORM PARÁGRAFO N TIMES .......................................................................................................... 17 
PERFORM PARÁGRAFO [WITH TEST {BEFORE | AFTER}] UNTIL ............................................. 17 
CONDIÇÃO .................................................................................................................................................. 17 
PERFORM PARÁGRAFO [WITH TEST {BEFORE|AFTER}] VARYING ......................................... 18 
CAMPO FROM N BY M .............................................................................................................................. 18 
COMANDOS BASICOS .................................................................................................................... 19 
ACCEPT ................................................................................................................................................... 19 
DISPLAY .................................................................................................................................................. 20 
MOVE ....................................................................................................................................................... 20 
INITIALIZE ............................................................................................................................................. 21 
EXIT .......................................................................................................................................................... 22 
STOP RUN ................................................................................................................................................ 22 
5. COMANDOS ARITMÉTICOS ................................................................................................ 23 
ADD ........................................................................................................................................................... 23 
 
 COBOL 
 
 
4 
 
SUBTRACT .............................................................................................................................................. 24 
DIVIDE ..................................................................................................................................................... 25 
MULTIPLY .............................................................................................................................................. 26 
COMPUTE................................................................................................................................................ 26 
6. COMANDOS DE DECISÃO .................................................................................................... 28 
IF ................................................................................................................................................................ 28 
EVALUATE .............................................................................................................................................. 30 
CONTINUE .............................................................................................................................................. 31 
NEXT SENTENCE ................................................................................................................................... 31 
7. COMANDOS PARA PROCESSAMENTO DE ARQUIVOS SEQUENCIAIS ......... 32 
ENVIRONMENT DIVISION - INPUT-OUTPUT SECTION ........................................................... 32 
DATA DIVISION - FILE SECTION. ................................................................................................... 34 
PROCEDURE DIVISION ....................................................................................................................... 35 
OPEN ......................................................................................................................................................... 35 
READ .........................................................................................................................................................35 
WRITE ...................................................................................................................................................... 36 
CLOSE ...................................................................................................................................................... 36 
INSTRUÇÕES FREQUENTEMENTE UTILIZADAS, TABELAS INTERNAS E 
FORMATOS DE DADOS .................................................................................................................. 37 
COPY ......................................................................................................................................................... 37 
CALL E LINKAGE SECTION ............................................................................................................... 37 
CANCEL ................................................................................................................................................... 38 
EXIT PROGRAM .................................................................................................................................... 38 
GOBACK .................................................................................................................................................. 38 
STRING ..................................................................................................................................................... 39 
TABELAS INTERNAS ............................................................................................................................ 39 
CLAUSULA OCCURS ................................................................................................................................ 39 
NÍVEIS DE TABELAS ............................................................................................................................ 40 
FORMATO ESPECIAIS DE DADOS .................................................................................................... 41 
FORMATOS BINÁRIOS ........................................................................................................................ 41 
CLÁUSULA USAGE................................................................................................................................ 42 
USAGE COMP. ........................................................................................................................................ 43 
USAGE COMP-3. ..................................................................................................................................... 43 
./ 
 
 
 
 
 
 
 COBOL 
 
 
5 
 
1. INTRODUÇÃO 
O Cobol é uma linguagem de alto nível criada no ano de 1959. A palavra Cobol 
é uma abreviação de: 
 COmmon 
 Business 
 Oriented 
 Language 
 
Como seu nome indica, o objetivo desta linguagem é permitir o 
desenvolvimento de aplicações comerciais para pessoas sem conhecimento 
profundo de computadores. Por isso a linguagem Cobol usa frases normais da 
língua inglesa, e a estrutura de um programa Cobol se assemelha a um texto 
com divisões, parágrafos e frases em inglês. 
 
IDENTAÇÃO 
O processo de identação consiste em alinhar comandos, de forma que fique 
mais fácil ao programador que estiver analisando o código, visualizar e, por 
decorrência, entender o conjunto de instruções. Algumas instruções trabalham 
com Subconjuntos (blocos) de (outras) instruções; por meio da identação 
coloca-se instruções que façam parte de um mesmo bloco num mesmo 
alinhamento. 
 
O caso mais comum é o das instruções de teste (IF), onde normalmente existe 
pelo menos um bloco de instruções que deve ser executado quando a condição 
testada for satisfeita; e, opcionalmente, outro bloco de instruções que devem 
ser executadas quando a condição testada não for satisfeita, exemplo: 
 
IF condição 
 Instruções para condição satisfeita 
ELSE 
 Instruções para condição não satisfeita 
END-IF 
 
Visualmente facilita-se bastante se deslocar os blocos algumas posições à 
direita (duas ou três posições são suficientes), para que fique destacado o ELSE 
e o END-IF, facilitando a análise do fonte. 
 
Se a especificação fosse feita sem identação, a leitura não seria fácil. 
IF condição 
COMPUTE A = (B * C ) ** 4 
ELSE 
COMPUTE A = (B * C ) ** 5 
COMPUTE C = A / 0.015 
END-IF 
 
 
 
 COBOL 
 
 
6 
 
Ficaria mais difícil analisar do que se houvesse sido especificado com identação: 
IF condição 
 COMPUTE A = (B * C ) ** 4 
 COMPUTE C = A / 0.005 
ELSE 
 COMPUTE A = (B * C ) ** 5 
 COMPUTE C = A / 0.015 
END-IF 
 
A vantagem fica muito mais evidente quando houver IFs encadeados : 
Sem identação : 
IF condição 
IF condição 
COMPUTE A = (B * C ) ** 4 
COMPUTE C = A / 0.005 
ELSE 
COMPUTE A = (B * C ) ** 8 
COMPUTE C = A / 0.055 
END-IF 
ELSE 
IF conical 
COMPUTE A = (B * C ) ** 5 
COMPUTE C = A / 0.007 
ELSE 
COMPUTE A = (B * C ) ** 9 
COMPUTE C = A / 0.007 
END-IF 
END-IF 
 
Com identação: 
IF condição 
 IF condição 
 COMPUTE A = (B * C ) ** 4 
 COMPUTE C = A / 0.005 
 ELSE 
 COMPUTE A = (B * C ) ** 8 
 COMPUTE C = A / 0.055 
 END-IF 
ELSE 
 IF condição 
 COMPUTE A = (B * C ) ** 5 
 COMPUTE C = A / 0.007 
 ELSE 
 COMPUTE A = (B * C ) ** 9 
 COMPUTE C = A / 0.007 
 END-IF 
END-IF. 
 
 
 
 
 COBOL 
 
 
7 
 
2. FORMATO DO FONTE COBOL 
Todo programa escrito na linguagem Cobol possui algumas regras a serem 
seguidas. Uma destas regras se refere ao formato das linhas de comando 
(instruções) dentro do seu editor de fonte. Uma linha de comando Cobol 
pode ter até 80 caracteres, conforme o formato abaixo: 
 
Seqüência I Área A Área B Não utilizado 
1 6 7 8 11 12 72 73 80 
 
Colunas de 1 a 6: Área de numeração seqüencial (ou comentário) 
Coluna 7: Área de indicação 
Colunas de 8 a 11: Área A 
Colunas de 12 a 72: Área B 
 
ÁREA DE NUMERAÇÃO SEQÜENCIAL (COLUNAS DE 1 A 6) 
Normalmente coloca-se comentários nesta área. 
 
ÁREA DE INDICAÇÃO (COLUNA 7) 
 
HÍFEN(-) 
Se o hífen estiver nesta posição indica que existe uma continuação de 
uma cadeia de caracteres, (uma palavra ou frase), que foi iniciada na 
linha anterior. Uma literal que não caiba numa linha, para que seja 
continuada na próxima linha, precisa ter na próxima linha a indicação 
da continuação (hífen na coluna 7) e, em qualquer coluna a partir da 
12, um apóstrofe indicando o início da continuação. 
 
1 A 6 7 A AREA B 
 
 - 
 
ASTERISCO(*) 
Nesta posição indica, para o compilador COBOL, que toda a linha 
deve ser tratada como uma linha de comentário. 
1 A 6 7 A AREA B 
 * ESTA ROTINA CONFERE A DATA DGITADA 
 VERIFICAR-DATA. 
 
 
 COBOL 
 
 
8 
 
 
ÁREA A ÁREA B (COLUNAS DE 8 A 72) 
 
Área A: Posição a partir da qual se escreve nome de Division, 
Sections, parágrafos e nível 01 de grupo de dados. 
 
Área B: Posição a partir da qual se escrevem as instruções Cobol. 
Veja o exemplo de código fonte a seguir: 
 
Num. I A AREA B 
000110 * ESTE E UM COMENTARIO 
 PARAGRAFO-1. 
 ADD VALOR TO LUCRO. 
 
 COBOL 
 
 
9 
 
3. DIVISÕES DO COBOL 
De maneira semelhante a um livro com seus capítulos, parágrafos e 
itens, um programa Cobol é formado por uma hierarquia de Divisions, 
Sections, parágrafos e instruções. Uma regra importante em Cobol é que 
toda declaração (Instrução, Nome de parágrafo, Division ou Section), 
deve ser terminada por ponto final (.). 
 
O código Cobol possui quatro divisões que devem ser utilizadas nesta 
ordem: 
 IDENTIFICATION DIVISION. 
 ENVIRONMENT DIVISION.DATA DIVISION. 
 PROCEDURE DIVISION. 
 
Como foi explicado no item anterior (Formato do fonte Cobol) a 
declaração das DIVISÕES devem se iniciar na área A do texto (coluna 
8). 
 
IDENTIFICATION DIVISION 
Esta é a divisão de identificação do programa. Não contêm sections, 
mas somente alguns parágrafos pré-estabelecidos e opcionais. O 
único parágrafo obrigatório é o PROGRAM-ID (Nome do programa). O 
nome do programa deve ser uma palavra com até 8 caracteres (letras 
ou números), começando por uma letra. 
 
Esta divisão possui a seguinte estrutura: 
 IDENTIFICATION DIVISION. 
 PROGRAM-ID. PROGRAMA. 
 AUTHOR. EDINELSON PACCI. 
 
Observe a utilização do ponto final (.) no fonte Cobol. Nenhum destes 
pontos pode ser omitido para não causar erro de compilação. 
 
 COBOL 
 
 
10 
 
 
ENVIRONMENT DIVISION 
Esta divisão descreve o equipamento envolvido no programa. Possui 
duas SECTION e sua estrutura é a seguinte: 
 
 ENVIRONMENT DIVISION. 
 * 
 CONFIGURATION SECTION. 
 SOURCE-COMPUTER. Comentário. 
 OBJECT-COMPUTER. Comentário. 
 SPECIAL-NAMES. 
 * 
 INPUT-OUTPUT SECTION. 
 FILE-CONTROL. 
 I-O CONTROL. 
 
 
CONFIGURATION SECTION 
Esta seção destina-se a uma descrição geral do ambiente do 
computador. Ela é usualmente composta pelo parágrafo 
SPECIAL-NAMES. 
 
SPECIAL-NAMES 
Comandos pré-definido do Cobol separador de decimal 
(vírgula ou ponto) 
 
Formato: 
SPECIAL-NAMES. 
 DECIMAL-POINT IS COMMA. 
 
Esta instrução informa que a vírgula (COMMA) será 
usada como separador de decimais. 
 
INPUT-OUTPUT SECTION 
Esta seção destina-se a configuração dos arquivos e será 
tratada no item 8. 
 
 COBOL 
 
 
11 
 
 
DATA DIVISION 
A DATA DIVISION é a divisão do programa onde são definidos os 
dados, incluindo todas as variáveis e constantes necessárias, assim 
como o conteúdo dos registros dos arquivos. A DATA DIVISION é 
composta habitualmente por duas Sections: FILE SECTION e 
WORKING-STORAGE SECTION. Também existe a LINKAGE SECTION 
que será tratada no COBOL AVANÇADO. 
 
FILE SECTION. 
A FILE SECTION é a Section usada para detalhar o conteúdo dos 
registros dos arquivos e será tratada no item 8. 
 
WORKING-STORAGE SECTION. 
NA WORKING-STORAGE SECTION devemos definir todas as variáveis 
que o programa precisa para seu completo funcionamento. Não há 
parágrafos nesta Section, e os dados podem ser definidos como 
grupos hierárquicos (níveis 01 a 49), ou dados independentes (nível 
77) em qualquer ordem, desde que não se crie um nível 77 no meio 
de uma hierarquia causando seu rompimento. Exemplo: 
 
 WORKING-STORAGE SECTION. 
 77 CONTADOR PIC 999. 
 77 SOMA PIC 9(6)V99. 
01 DATA-VENCIMENTO. 
03 DIA PIC 99. 
03 MES PIC 99. 
03 ANO PIC 99. 
 
 
 
ESPECIFICAÇÃO PARA DADOS DE ARQUIVOS OU VÁRIAVEIS 
A definição de um dado em Cobol é feito com o seguinte formato: 
 
 
 
 
NÍVEL 
O nível é um número variando de 01 a 99 que define a hierarquia do 
dado em relação aos outros dados. Em Cobol pode-se agrupar os 
dados e concatená-los formando hierarquias como no exemplo 
abaixo: 
 
 DATA-NASCIMENTO 
 DIA-NASCIMENTO 
 MES-NASCIMENTO 
 ANO-NASCIMENTO 
 
Neste exemplo, DIA MÊS E ANO de NASCIMENTO são partes 
integrantes da DATA-NASCIMENTO. Em Cobol, os níveis de 01 a 49 
podem ser usados para especificar estas hierarquias, onde um valor 
maior significa dependência. O exemplo acima acrescido dos níveis 
seria: 
 
Nível identificador-1 Formato Valor-inicial 
 
 COBOL 
 
 
12 
 
03 DATA-NASCIMENTO 
05 DIA-NASCIMENTO 
05 MES-NASCIMENTO 
05 ANO-NASCIMENTO 
 
Os níveis de 50 a 99 têm uso específico, reservado para futuras 
expansões do Cobol. Atualmente usam-se dois níveis nesta faixa: 
Nível 77- usado quando o dado não tem hierarquia (item 
independente). 
Nível 88 usado para nomes condicionais. Será explicado no Cobol 
Avançado 
 
De todos estes níveis, somente o nível 01 e o nível 77 podem ser 
codificados na margem A do fonte Cobol (coluna 8). Os outros níveis 
devem ser codificados na margem B (coluna 12). 
O Cobol exige também que toda a hierarquia de um grupo de itens 
comece com um item de nível 01. A partir dele, cada nível 
subordinado deve ter o mesmo número, por exemplo, se para o 
segundo nível for escolhido o número 3 todos os itens do segundo 
nível devem ter nível 03, e se para o terceiro nível for escolhido o 
número 10, todos os itens do terceiro nível devem ser especificado 
com o nível 10. 
 
NOME-DO-DADO 
Qualquer palavra, pode ter no máximo 30 caracteres, incluindo 
letras, números e hífen, sendo que pelo menos um dos caracteres 
deve ser letra. Quando um campo criado na DATA DIVISION não for 
referenciado em nenhum comando do programa, não será necessário 
criar um nome-do-dado para este campo, e neste caso usa-se a 
palavra FILLER como nome-do-dado deste campo. 
 
A palavra FILLER é o nome padrão para identificar campos 
anônimos. 
 
FORMATO DO DADO 
O formato dos dados em Cobol é especificado pela palavra reservada 
PICTURE, ou pela sua abreviação PIC. Os formatos são descritos 
usando uma das 3 letras seguintes: 
9 O dado é numérico. 
X O dado é alfa-numérico, e pode conter letras, números e 
outros caracteres. 
A O dado é alfabético, e contem somente letras e espaços. 
 
A quantidade de caracteres contidos no dado é especificado no 
Formato repetindo-se as letras acima. Por exemplo, se o item 
QUANT-PROD tem 5 algarismos, seu formato será: 
 
 77 QUANT-PROD PIC 99999. 
 
Pode-se abreviar esta repetição colocando o número de repetições 
entre parênteses: 
 
 77 QUANT-PROD PIC 9(5). 
 
 
 COBOL 
 
 
13 
 
Representando a letra do formato (A, X, ou 9) pela letra F, e o 
número de caracteres da variável no campo por n, a sintaxe do 
formato será a seguinte: 
 
 
 
Quando um item numérico tiver casas decimais, não se carrega na 
memória do computador o separador decimal (vírgula), porque os 
circuitos de cálculo do computador não foram projetados para operar 
com a vírgula. Se o item VALOR-PROD tiver por exemplo o valor de 
2,35, seu valor fica na memória como 235. Mas o programa Cobol 
precisa saber em que posição estava a vírgula que desapareceu 
(vírgula implícita). A vírgula implícita é definida no formato pela letra 
V, como abaixo: 
 
 77 VALOR-PROD PIC 99999V99. 
Ou 
 77 VALOR-PROD PIC 9(5)V99. 
 
Em um grupo de itens contidos em uma hierarquia (com níveis de 01 
a 49) só podem ter a cláusula PIC os itens no nível mais baixo da 
hierarquia (itens elementares). Ex.: 
 
01 FUNC. 
03 NASCIMENTO. 
 05 MÊS PIC 99. 
 05 ANO PIC 99. 
03 ENDERECO. 
 05 RUA PIC X(20). 
 05 NÚMERO PIC 9999. 
 
A linguagem Cobol suporta itens numéricos com até 18 algarismos, e 
itens alfanuméricos até 32.768 caracteres (dependendo do sistema 
operacional). 
Existem ainda formatos especiais da PIC para itens a serem 
impressos, que serão vistos mais adiante. 
 
VALOR-INICIAL 
Esta cláusula é opcional em Cobol. Seu objetivo é definir um valor 
para o item quando o programa se inicia. Se ela for omitida, o item 
correspondente terá valores imprevisíveis. No caso de um item que 
irá conter uma totalização, por exemplo, é conveniente que ele 
comece com o valor zero. O valor-inicial é definido em Cobol pelo 
formato: 
 
 
 
 
Em Cobol existem 2 tipos de literal: numérico e alfa-numérico. 
Os literais numéricos são escritos colocando-se diretamente o valor 
na instrução. Ex.: 
 
 77 IDADE-MINIMA PIC 99 VALUE 18. 
 
VALUE literal.PIC F(n). 
 
 COBOL 
 
 
14 
 
Os literais alfas-numéricos devem ser colocados entre aspas simples 
 
 
 77 NOME- 
 
Não se pode misturar em um programa Cobol o uso de aspas simples 
com aspas duplas, ou seja, se um programa começou a ser escrito 
com aspas simples, deve-se usar aspas simples em todo o programa. 
Os literais alfas-numéricos em Cobol podem ter no máximo 120 
caracteres. 
 
Pode-se usar ainda como valor-inicial as CONSTANTES 
FIGURATIVAS, como por exemplo ZEROS, SPACES, LOW-VALUES 
ou HIGH-VALUES. 
ZEROS O item (deve ser numérico) será preenchido com 
algarismos 0 (zero). 
SPACES O item (deve ser alfabético ou alfa-numérico) será 
preenchido com espaços. 
LOW-VALUES (menor valor) Indica que este item na memória 
deve ter todos os seus bytes com todos os bits desligados. 
HIGH-VALUES - (maior valor) Indica que este item na memória 
deve ter todos os seus bytes com todos os bits ligados. 
 
MÁSCARAS DE EDIÇÃO 
A cláusula PICTURE (ou PIC) tem alguns formatos próprios para fazer 
edição de variáveis numéricas no momento de uma impressão que 
são mostrados na tabela abaixo: 
 
PICTURE VALUE IMPRESSÃO 
$ZZZZ9,99 2 $ 2,00 
$$$$$9,99 2 $2,00 
R$****9,99 2 $*****2,00 
+ZZZZ9,99 -2 - 2,00 
--------9,99 -2 -2,00 
++++9,99 -2 -2,00 
++++9,99 +2 +2,00 
ZZ.ZZ9,99+ -2002 2.002,00- 
99/99/99 020304 02/03/04 
99B99B99 020304 02 03 04 
 
 
BLANK WHEN ZERO 
Esta cláusula, usada após a máscara de edição da PICTURE, envia 
espaços em branco para a impressora quando a variável numérica a 
ser impressa tem valor zero, independente do formato da máscara. 
 
Exemplo: 
03 VALOR PIC ZZ.ZZ9,99 BLANK WHEN ZERO. 
 
 
 
 
 
 
 COBOL 
 
 
15 
 
IMPORTANTE : 
1. Para campos numéricos (PIC 9) pode-se opcionalmente colocar a 
indicação de sinal: PIC 9(03) ou PIC S9(03). 
 
2. Se não for especificado sinal, o campo será SEMPRE tratado como se 
tivesse número positivo. Exemplo: se a variável WCALC for definida 
com PIC 9(03) e contiver zero, se subtrairmos 1, ela passará a ter o 
número 1 positivo (é sempre forçado sinal positivo após uma 
operação aritmética) 
 
3. Se for especificado sinal, o campo será SEMPRE tratado conforme os 
números relativos. Exemplo: se a variável WCALC for definida com 
PIC S9(03) e contiver zero, se subtrairmos 1, ela passará a ter o 
número 1 negativo 
 
4. Máximo de 18 algarismos num campo numérico, incluindo parte 
inteira e decimal 
 
 
 COBOL 
 
 
16 
 
 
PROCEDURE DIVISION 
Esta divisão controla a execução do programa, e é onde colocamos os 
comandos oriundos do algoritmo planejado pelo programador 
(lógica). Os comandos (instruções) do Cobol são formados por um 
único verbo da língua inglesa, seguido dos parâmetros necessários, e 
que serão discutidos um a um nos parágrafos seguintes. As 
instruções de um programa Cobol podem ser reunidas em parágrafos, 
e estes em seções, definidas pelo programador com o fim de tornar o 
programa mais fácil de ser entendido. 
Exemplo: 
 ******* INICIO PROCEDIMENTOS DO PROGRAMA ********** 
PROCEDURE DIVISION. 
ROTINA-PRINCIPAL SECTION. 
INICIO. 
 PERFORM INICIALIZAR. 
 PERFORM PROCESSAR. 
 PERFORM FINALIZAR. 
FIM-ROTINA-INICIAL. 
 EXIT PROGRAM. 
 STOP RUN. 
 
 ***************** SEÇÃO INICIALIZAR *************** 
INICIALIZAR SECTION. 
 ... 
 ... 
INICIALIZAR-FIM. 
 EXIT. 
 
 ***************** SEÇÃO PROCESSAR *************** 
PROCESSAR SECTION. 
 ... 
 ... 
PROCESSAR-FIM. 
 EXIT. 
 
 ***************** SEÇÃO FINALIZAR *************** 
FINALIZAR SECTION. 
 ... 
 ... 
FINALIZAR-FIM. 
 EXIT. 
 
 
 COBOL 
 
 
17 
 
4. COMANDOS DE REPETIÇÃO PROGRAMAÇÃO ESTRUTURADA 
Como vimos em Lógica de programação, os programas devem ser 
Estruturados. Programas bem projetados e estruturados são aqueles que 
possuem uma série de construções lógicas, em que a ordem na qual as 
instruções são executadas é padronizada. Em programas estruturados, cada 
conjunto de instruções que realiza uma função específica é definido em uma 
rotina ou, em COBOL, um parágrafo. Ele consiste em uma série de 
instruções relacionadas entre si, em programação estruturada, os parágrafos 
são executados por meio da instrução PERFORM. 
 
PERFORM 
A instrução PERFORM permite que o controle passe temporariamente para 
um parágrafo diferente e depois retorne para o parágrafo original do qual a 
instrução PERFORM foi executada. 
 
Há dois tipos de instrução PERFORM. 
1. PERFORM OUT LINE: PROCEDURE-NAME é especificado, ou seja, é 
dado um PERFORM em um PARÁGRAFO ou SECTION. 
2. PERFORM IN LINE: As instruções estão logo abaixo do comando 
PERFORM. Deve ser delimitado pela frase END- PERFORM. 
 
 Há 4 Formatos de PERFORM. 
1. PERFORM básico 
2. PERFORM com opção TIMES 
3. PERFORM com opção UNTIL 
4. PERFORM com opção VARYING UNTIL 
 
Formato 1: 
PERFORM parágrafo [THRU] parágrafo-fim 
A opção THRU é opcional e pode também ser utilizado nos demais 
formatos. 
 
Exemplo 1.1: 
 PERFORM INICIALIZAR. 
 PERFORM PROCESSAR THRU PROCESSAR-FIM. 
 
Formato 2: 
PERFORM parágrafo N TIMES 
O parágrafo referido é executado N TIMES, onde N pode ser uma 
constante ou variável numérica. 
 
Exemplo 2.1: PERFORM com opção TIMES (OUT-LINE) 
20-00-CALCULA-TOTAL. 
 MOVE ZEROS TO WS-TOTAL 
 PERFORM 25-00-CÁLCULO 3 TIMES. 
20-99-EXIT. EXIT. 
 
Formato 3: 
PERFORM parágrafo [WITH TEST {BEFORE | AFTER}] UNTIL 
 condição 
O parágrafo referido é executado até que a condição especificada pela 
opção UNTIL seja verdadeira. 
 
 
 COBOL 
 
 
18 
 
 Tipo de teste que é efetuado no comando PERFORM UNTIL: 
o WITH TESTE BEFORE (omitido assume como padrão). 
Caracteriza um DO WHILE. É realizado inicialmente o teste da 
condição UNTIL declarada, antes mesmo da seqüência de 
instruções ser executada. 
 
o WITH TEST AFTER (somente assume se declarado). 
Caracterizando um REPEAT UNTIL. Isso assegura que a seqüência 
de instruções declaradas é executada pelo menos uma vez. 
 
Exemplo 3.1. PERFORM com opção UNTIL (OUT-LINE) 
00-00-MAIN-LINE. 
 PERFORM INICIALIZAR 
PERFORM 10-00-PROCESSAR UNTIL WS- 
 PERFORM FINALIZAR. 
00-00-EXIT. EXIT. 
 
Exemplo 3.2. PERFORM com opção UNTIL (IN-LINE) 
 00-00-MAIN-LINE. 
 PERFORM INICIALIZAR 
PERFORM LER-ARQUIVO 
PERFORM UNTIL WS- 
 IF WS-LIN > 50 
 PERFORM ROT-CABECALHO. 
 PERFORM ROT-DETALHE 
 PERFORM LER-ARQUIVO 
 END-PERFORM. 
 PERFORM FINALIZAR. 
00-00-EXIT. EXIT. 
 
Formato 4: 
PERFORM parágrafo [WITH TEST {BEFORE|AFTER}] VARYING 
 campo FROM n BY m 
 UNTIL condição 
Executa o parágrafo especificado, até que a condição especificada 
seja satisfeita. Antes de executar o bloco de instruções pela primeira 
vez, atribui o valor N a variável CAMPO. Após cada execução do 
bloco, antes de voltar a executá-lo, incrementa M à variável CAMPO. 
 
Opção WITH TESTE {BEFORE | AFTER} segue a mesma regra do 
formato 3. 
 
Exemplo 4.1. PERFORM com opção VARYING (OUT-LINE) 
 10-00-PROCESSAR. 
 PERFORM ROT-CABECALHO. 
PERFORM ROT-DETALHE VARYING WS-LIN 
FROM 1 BY 1 UNTIL WS-LIN = 60 
 ... 
ROT-DETALHE. 
 PERFORM IMPRIMIR-DETALHE. 
 PERFORM LER-ARQUIVO. 
 
 
 COBOL 
 
 
19 
 
Exemplo 4.2. PERFORM com opção VARYING (IN-LINE) 
 00-00-MAIN-LINE. 
 PERFORM INICIALIZAR 
PERFORM LER-ARQUIVO 
PERFORM UNTIL WS- 
 PERFORM ROT-CABECALHO 
PERFORM VARYING WS-LIN 
FROM 1 BY 1 UNTIL WS-LIN = 60 
PERFORM IMPRIMIR-DETALHE 
PERFORM LER-ARQUIVO 
 END-PERFORM 
 END-PERFORM. 
 PERFORM FINALIZAR. 
 
 
COMANDOS BASICOS 
 
ACCEPT 
O Cobol foi desenvolvido originalmente para processar arquivos de dados e 
ainda é usado, com esta finalidade. Entretanto,em muitas vezes existe a 
necessidade de interação com o operador. Usamos o comando (verbo) 
ACCEPT para fornecer os dados de entrada por meio de um cartão DD do 
JCL (tratado no programa Cobol como SYSIN). 
O comando ACCEPT recebe do dispositivo de entrada padrão SYSIN (cartão 
//DDSYSIN DD *) ou informações do sistema contidas em um registrador 
especial (DATE, DAY, DAY-OF-WEEK ou TIME). 
 
Formato: 
 [SYSIN ] 
 [DATE ] 
ACCEPT identificador-1 [FROM [DAY ]] 
 [DAY-OF-WEEK ] 
 [TIME ] 
Obs: Quando a opção FROM é omitida o padrão FROM SYSIN é 
assumido. 
 
Regras: 
 SYSIN 
Cada vez que o programa Cobol passa pela instrução ACCEPT, uma 
linha da SYSIN do JCL é carregada na variável CAMPO. É necessário 
prever com cuidado quantas linhas terá a SYSIN do JCL, porque se o 
comando ACCEPT não encontrar uma linha para carregar na sua 
variável, o sistema operacional emitirá uma mensagem de erro para 
o operador e o programa ficará suspenso até a intervenção do 
operador. 
 
 DATE Tem implícito PIC 9(06) 
 Formato YYMMDD- data gregoriana 
 20/12/2005 será expresso como 051220 
 
 DAY Tem implícito PIC 9(05) 
 Formato YYDDD- data Juliana 
 04/07/1981 será expresso como 81185 
 
 
 COBOL 
 
 
20 
 
 DAY-OF-WEEK 
Tem implícito PIC 9(1), onde: 
 1 = Segunda-feira, 2 = terça-feira, 
3 = quarta feira,4 = quinta-feira, 
5 = sexta-feira, 6 = sábado, 7 = domingo. 
 
 TIME Tem implícito PIC 9(08) 
 Formato HHMMSSCC Hora, minuto, segundo, centésimos. 
 2:41 da tarde será expresso como 14410000 
 
Exemplos: 
 ACCEPT RESPOSTA FROM SYSIN 
 Lê um registro lógico em SYSIN e coloca-o na variável 
denominada RESPOSTA 
 
WORKING-STORAGE SECTION. 
 05 WS-DATE PIC 9(06). 
05 WS-TIME PIC 9(08). 
... 
ACCEPT WS-DATE FROM DATE. 
ACCEPT WS-TIME FROM TIME. 
 
DISPLAY 
Exibe conteúdo de campo(s) num dispositivo de saída. Normalmente é o 
dispositivo cujo DDNAME é SYSOUT. 
 
Formato: 
DISPLAY [identificador-1 | literal-1] ... 
 
Exemplos: 
DISPLAY "PROGRAMA INICIANDO............. " 
DISPLAY "TOTAL REGISTROS LIDOS.........: " WS-REGLIDOS 
DISPLAY "TOTAL REGISTROS GRAVADOS..: " WS-REGGRAV 
DISPLAY WS-SQLCODE 
DISPLAY WS- - -ANO 
 
MOVE 
A instrução MOVE transfere dados de uma área de memória para uma ou 
mais áreas. 
 Alinhamento alfabético/alfa-numérico 
Os dados são acomodados no campo receptor alinhando-se da esquerda 
para a direita. Se o campo emissor for maior que o receptor, os BYTES 
mais a direita, em excesso, serão truncados no campo receptor. Se o 
emissor for menor que o receptor os BYTES faltantes para preencher o 
campo receptor serão preenchidos com SPACES. 
 Alinhamento Numérico 
Os dados são acomodados no campo receptor alinhando-se da direita 
para a esquerda. Se o campo emissor for maior que o receptor os BYTES 
mais a direita do campo emissor serão truncados. 
 Os campos: EMISSOR e RECEPTOR podem ser itens de grupo ou 
elementares. 
 
Formato: 
MOVE ALL {identificador-1 | literal-1} TO {identificador-2 ...} 
 
 COBOL 
 
 
21 
 
 
Exemplos: 
MOVE WS-NUM-PAG TO NUM-PAG-REL. 
MOVE WS-CODCLI-ARQ TO WS-CODCLI-AUX, COD-CLI-REL. 
MOVE ZEROS TO WS-ACUM-VALOR, 
WS-TOT-PAG, 
WS-ACUM-COMISSAO. 
MOVE TO WS-FIM-ARQ. 
M TO WS-FIM-ARQ. 
 
Exemplos de MO 
 
Comando Campo 
emissor 
(constante 
figurativa) 
Campo 
receptor 
formato 
 
Conteúdo do campo receptor 
após o MOVE 
MOVE ZERO TO TOTSAL ZERO PIC 9(5) 00000 
MOVE ZEROS TO TOTSAL ZEROS PIC 9(5) 00000 
MOVE ZEROES TO TOTSAL ZEROES PIC 9(5) 00000 
MOVE SPACE TO SIGLA SPACE PIC X(02) 4040 (em Hexa decimal) 
MOVE SPACES TO SIGLA SPACES PIC X(02) 4040 (em Hexa decimal) 
MOVE HIGH-VALUE TO 
CHAVE-ARQUIVO 
HIGH-VALUE PIC X(03) FFFFFF (em Hexa decimal) 
MOVE LOW-VALUE TO 
CHAVE-ARQUIVO 
LOW-VALUE PIC X(03) 000000 (em Hexa decimal) 
-MSG PIC X(05) ***** 
WS_MSG 
 PIC X(05) *A*A* 
 
 ZEROS O item (deve ser numérico) será preenchido com 
algarismos 0 (zero). 
 SPACES O item (deve ser alfabético ou alfa-numérico) será 
preenchido com espaços. 
 LOW-VALUES - indica que este item na memória deve ter todos 
os seus bytes com todos os bits desligados. Um item nestas 
condições terá o menor valor possível em todas as comparações. 
 HIGH-VALUES - indica que este item na memória deve ter todos 
os seus bytes com todos os bits ligados. Um item nestas 
condições terá o maior valor possível em todas as comparações. 
 
INITIALIZE 
Efetua a inicialização (atribuição de valores) de uma variável (ou um 
conjunto de variáveis). 
 Como default variáveis numéricas são inicializadas com zeros e 
variáveis alfas-numéricas são inicializadas com espaços. 
 Se a variável especificada for um item de grupo, todos os seus sub-itens 
serão inicializados de acordo com seu formato: os que forem numéricos, 
serão inicializados com zero (respeitando-se seu formato : zonado, 
compactado ou binário) ; se a variável for alfa-numérica ou alfabética, 
ela será inicializada com espaços. 
 Da mesma forma, se a variável tiver a cláusula OCCURS, todas as suas 
ocorrências serão inicializadas. 
 Pode-se especificar um conteúdo alternativo para a inicialização, 
através da cláusula REPLACING. 
 
Formato: 
 
 COBOL 
 
 
22 
 
INITIALIZE variável 
[ REPLACING [NUMERIC | ALPHABETIC] 
 DATA BY literal/variável] 
 
Exemplos: 
INITIALIZE AREA-DE-VALORES, WS-ACUM-VALOR 
 
EXIT 
A instrução EXIT provê um ponto de encerramento comum para uma serie 
de parágrafos. A instrução EXIT não tem efeito na compilação nem na 
execução do programa, é portanto, usado com a finalidade de documentar o 
programa. 
 
Formato: 
EXIT 
 
Exemplo: 
 PROCEDURE DIVISION 
00-00-MAIN-LINE. 
 PERFORM INICIALIZAR. 
 PERFORM PROCESSAR. 
 PERFORM FINALIZAR. 
 00-99-FIM. EXIT. 
 
STOP RUN 
A instrução STOP RUN encerra a execução do programa. 
 
Formato: 
STOP RUN 
 
Exemplo: 
 PROCEDURE DIVISION 
00-00-MAIN-LINE. 
 PERFORM INICIALIZAR. 
 PERFORM PROCESSAR. 
 PERFORM FINALIZAR. 
 
00-99-FIM. EXIT. 
 STOP RUN. 
 
 
 COBOL 
 
 
23 
 
5. COMANDOS ARITMÉTICOS 
As instruções para efetuar cálculos aritméticos em Cobol são: ADD(somar), 
SUBTRACT(subtrair), MULTIPLY(multiplicar), DIVIDE(dividir) e 
COMPUTE(calcular). 
 
Formato básico para instruções aritméticas: 
Instrução aritmética 
 [ ROUNDED ] 
 
[END-...] 
 
 
 Opção ROUNDED 
Para obter resultados arredondados, a opção ROUNDED pode ser 
especificada em qualquer instrução aritmética. Em todos os casos, ela 
vem imediatamente após o nome de dados resultante. O Cobol faz um 
arredondamento clássico para o resultado da instrução aritmética 
(valores menores que 5 são truncados, e os maiores são arredondados 
para cima). Exemplo: ADD WS-VALOR1 TO WS-VALOR2 ROUNDED 
 
 Opção ON SIZE ERROR 
Quando a variável que recebe o resultado da operação aritmética não 
tem tamanho suficiente para conter o resultado, o Cobol trunca o valor 
resultante (o valor perde algarismos à esquerda), e o Cobol não emite 
avisos ou código de erro. Para que se possa detectar esta situação é 
necessário codificar na instrução aritmética a clausula ON SIZE ERROR, 
onde podemos colocar uma mensagem de erro, parar o programa ou 
desviar para um parágrafo especial de tratamento de erro. 
Exemplo: 
 ADD VALOR-1 TO VALOR-2 
 ON SIZE ERROR 
 
 -FLAG-ESTOURO. 
 
 Opção END- 
Visando permitir uma programação estrutura, todas as instruções 
aritméticas do Cobol permitem terminador de escopo. 
 
ADD 
Acumula dois ou mais operandos numéricos e armazena resultados. 
 
Formato: 
ADD { identificador-1 ... literal-1 ...} TO | GIVING 
 { identificador-de-resultado... } 
Regras: 
1. Todos os literais e campos que são parte da adição devem ser 
numéricos. Após a palavra GIVING, contudo, o campo pode ser um 
item de relatório. 
2. O campo identificador-de-resultado, após TO ou GIVING, deve ser um 
nome de dados, e não um literal. 
3. Pelo menos dois operandos deverão anteceder a palavra GIVING. 
4. Ao usar TO, o conteúdo inicial do identificador-de-resultado, que deve 
ser numérico, é somado junto ao dos outros campos (identificador-1 
... literal-1...). 
 
 COBOL 
 
 
24 
 
5. Ao usar o formato GIVING, o campo identificador-de-resultado 
receberá a soma, mas seu conteúdo inicial não será parte da 
instrução ADD. Ele pode ser tanto um campo numérico como um item 
de relatório. 
 
Exemplos: 
ADD WS-VALOR TO WS-AC-TOTAL. 
 Efetua: WS-AC-TOTAL = WS-AC-TOTAL + WS-VALOR. 
 
 ADD WS-VALOR TO WS-AC-TOTAL1 
 WS-AC-TOTAL2. 
 Efetua: WS-AC-TOTAL1 = WS-AC-TOTAL1 + WS-VALOR. 
 Efetua: WS-AC-TOTAL2 = WS-AC-TOTAL2 + WS-VALOR. 
 
ADD WS-AC-TOTAL1, 
WS-AC-TOTAL2, 
 WS-AC-TOTAL3 TO WS-AC-TOTGERAL. 
 Efetua: WS-AC-TOTGERAL = WS-AC-TOTGERAL + 
 WS-AC-TOTAL1 + WS-AC-TOTAL2 + WS-AC-TOTAL3. 
 
ADD WS-VALOR1 WS-VALOR2 GIVING WS-AC-VALOR. 
 Efetua: WS-AC-VALOR = WS-VALOR1 + WS-VALOR2. 
 
SUBTRACT 
Subtrai um ou mais operandos numéricos e armazena resultados. 
 
Formato 1: 
SUBTRACT { identificador-1 ... literal-1 ...} 
FROM identificador-de- 
 
Formato 2: 
SUBTRACT { identificador-1 ... literal-1 ...} 
FROM identificador-2 literal-2 
GIVING identificador-de-resultado ... 
 
Regras: 
1. Observe a colocação das reticências (...) no Formato 1. O primeiro 
conjunto depois do identificador-1 significa que dois ou mais 
operandos podem ser subtraídos do identificador-2. Além disso, os 
operandos podem ser subtraídos do identificador-de-resultado-1, do 
identificador-resultado-2, e assim por diante. 
2. Com o Formato 2, pode vir qualquer número ou identificadores 
imediatamente após a palavra SUBTRACT ou a palavra GIVING, mas 
depois da palavra FROM é permitido um único identificador ou literal. 
3. Todos os literais e campos que são parte da instrução SUBTRACT 
devem ser numéricos. Depois da palavra GIVING, contudo, o campo 
pode ser um item de relatório. 
4. O campo identificador-de-resultado, após FROM ou GIVING, deve ser 
um nome de dados, e não um literal. 
5. Ao usar o formato GIVING, o campo identificador-de-resultado 
receberá o resultado da subtração, mas seu conteúdo inicial não será 
parte da instrução SUBTRACT. Ele pode ser tanto um campo 
numérico como um item de relatório. 
 
 
 COBOL 
 
 
25 
 
Exemplos: 
SUBTRACT VL-CHEQUE FROM SALDO.
 Efetua: SALDO = SALDO VL-CHEQUE. 
 
SUBTRACT VL-CHEQUE FROM SALDO GIVING SALDO-ATUAL 
 Efetua: SALDO-ATUAL = SALDO VL-CHEQUE. 
 
DIVIDE 
Efetua uma divisão, disponibilizando o quociente e, se indicado, o resto. 
 
Formato 1: 
DIVIDE {(divisor)identificador-1 literal-1} INTO 
 {(dividendo)identificador-2 literal-2} 
 GIVING identificador-de- 
[ REMAINDER identificador-de-resto ] 
 
Formato 2: 
DIVIDE {(dividendo)identificador-1 literal-1} BY 
 {(divisor)identificador-2 literal-2} 
 GIVING identificador-de-resultado ... 
[ REMAINDER identificador-de-resto ] 
 
Regras: 
1. Observar que GIVING é opcional com INTO, mas obrigatório com 
BY. 
2. No formato 1, quando a opção GIVING não é utilizada o resultado 
da divisão é colocado dentro do indentificador logo após a palavra 
INTO. 
3. A opção REMAINDER é utilizada quando se faz necessário guardar 
o resto da divisão em outro identificador. 
 
Exemplos: 
DIVIDE 2 INTO WS-NÚMERO 
 Efetua WS-NÚMERO = WS-NÚMERO / 2 
 
DIVIDE WS-VL-DOLAR INTO WS-VL-REAIS 
GIVING WS-RESULT 
 Efetua WS-RESULT = WS-VL-REAIS / WS-VL-DOLAR 
 
DIVIDE WS-NUM BY 2 
 GIVING WS-RESULT 
 REMAINDER WS-RESTO 
 Efetua WS-RESULT = WS-NUM / 2 (resto em WS-RESTO) 
 
 COBOL 
 
 
26 
 
 
MULTIPLY 
Efetua a multiplicação entre variáveis 
 
Formato: 
MULTIPLY {identificador-1 literal-1} BY 
 {identificador-2 literal-2} 
 GIVING identificador-de-resultado ... 
[END-MULTIPLY] ] 
 
Regras: 
1. Observe a colocação das reticências (...). O resultado será 
armazenado em todos os identificadores-de-resultado após 
GIVING. 
 
Exemplos: 
MULTIPLY 2 BY VALOR ROUNDED 
 Efetua VALOR = 2 * VALOR (com arredondamento) 
 
MULTIPLY VALOR BY 2 GIVING DOBRO 
 Efetua DOBRO = VALOR * 2 
 
MULTIPLY 2 BY VALOR GIVING DOBRO 
 Efetua DOBRO = 2 * VALOR 
 
COMPUTE 
Com a instrução COMPUTE, as operações aritméticas podem ser combinadas 
sem as restrições impostas para o campo receptor quando é usado ADD, 
SUBTRACT, MULTIPLY e DIVIDE. Quando as operações aritméticas são 
combinadas, a instrução compute é mais eficiente que as instruções 
aritméticas escritas em serie. 
 
Formato: 
COMPUTE identificador-de-resultado [ROUNDED] = 
Intrução-aritmética 
 [ [NOT] ON SIZE ERROR instrução-imperativa] 
 
Regras: 
1. A opção ROUNDED e ON SIZE ERROR segue a mesma regra 
utilizada para expressões aritméticas. 
2. Os símbolos que podem ser utilizados em uma instrução 
COMPUTE, conforme sua ordem de prioridade de execução, 
são: 
( ) Parênteses 
** Exponenciação 
 * Multiplicação 
 / Divisão 
 + Adição 
 - Subtração 
3. O sinal de igual, assim como os símbolos aritméticos, devem ser 
precedidos e seguidos de um espaço. Assim, para calcular 
B+C+D**2 e colocar o resultado em A, use a seguinte instrução: 
COMPUTE A = B + C + D ** 2. O parêntese não é obrigatório ser 
seguido de espaço. 
 
 COBOL 
 
 
27 
 
4. A ordem em que são executadas as operações em uma expressão 
aritmética que contenha mais de um operador segue a seguinte 
prioridade de hierarquia. 
 1 º ( ) Expressões dentro de parênteses 
 2 º Exponenciação 
 3 º Multiplicação, divisão 
 4 º Adições e Subtrações 
 Quando houver operadores de mesma hierarquia, 
eles serão executados da esquerda para a direita. 
 
Exemplos: 
COMPUTE WS-RESULT ROUDEND = (AA + BB) / CC 
COMPUTE WS-RESULT = (((AA + BB) / CC) / DD) * (EE ** 2) 
 
 
A fórmula A = B² + C² 
ficará em Cobol da seguinte forma: 
COMPUTE A = (B ** 2 + C ** 2) ** (0,5). 
 
 
 
 COBOL 
 
 
28 
 
6. COMANDOS DE DECISÃO 
 
IF 
Efetua teste de condições especificadas, e efetua os desvios necessários de 
acordo com o resultado. 
 A base para identificar os pontos de desvio é o PONTO, o ELSE ou o END-
IF. 
 PONTO e END-IF indicam o fim da especificação da instrução; as 
instruções que estão após o PONTO e o END-IF, portanto, são 
executadas tanto para os casos de condição satisfeita quanto para os 
casos de condição não satisfeita. 
 
Formato: 
IF CONDIÇÃO 
instruções (para condição verdadeira) 
[ELSE 
instruções (para condição não verdadeira) 
END IF] 
 
 CONDIÇÃO 
Pode ser uma condição simples ou complexa. A Tabela de 
operadores lógicos e relacionais abaixo, pode ser utilizada para 
combinar a condição a ser testada. 
Descrição Símbolo Em COBOL 
Igual = EQUAL 
Diferente NOT = NOT EQUAL 
Maior que > GREATER 
Menor que < LESS 
Maior ou 
igual a 
NOT < NOT LESS 
Menor ou 
igual a 
NOT > NOT GREATER 
 
OPERADOR DESCRIÇÃO 
Not 
"NÃO": Inverte o valor de um 
operando. Se o operando é verdadeiro o 
resultado será falso. Se o operando é 
falso o resultado será verdadeiro. 
And 
"E": Se os dois operandos são 
verdadeiros, o resultado será 
verdadeiro. Se um dos dois operandos é 
falso, o resultado será falso. 
Or 
"OU": Se os dois operandos são falsos, 
o resultado será falso. Se um dos dois 
operandos é verdadeiro, o resultado 
será verdadeiro. 
 
 COBOL 
 
 
29 
 
 
CategoriasSímbolo Notação alternativa 
Teste de sinal IS POSITIVE 
 IS NEGATIVE 
 IS ZERO 
Teste de classe IS NUMERIC 
 IS ALPHABETIC 
 
 INSTRUÇÕES 
Podem ser uma das seguintes condições: 
- Uma instrução imperativa 
- Uma instrução condicional 
- Uma instrução imperativa seguida pôr uma instrução condicional. 
 
 ELSE 
Se a avaliação da condição for verdadeira, será executado a instrução 
antes do ELSE. Se a avaliação testada for falsa, será executada a 
instrução entre o ELSE e o END-IF. 
 
 IF sem ELSE 
Se a avaliação da condição for verdadeira, será executada a instrução 
entre o IF e o END-IF. 
 
 
Exemplo 1: (IF SEM ELSE) 
IF WS-CAMPO1 EQUAL WS-CAMPO-2 
 PERFORM 10-00-PESQUISA 
END-IF 
 
 
Exemplo 2: (IF COM ELSE) 
 IF WS-CAMPO1 < WS-CAMPO-2 
 ADD 1 TO WAC-CAMPO3 
ELSE 
 COMPUTE WS-TOTAL = WS-VALOR1+ WS-VALOR2 
END-IF 
 
 
Exemplo 3: (IF COM NEXT SENTENCE) 
IF WS-CAMPO1 > WS-CAMPO-2 
 NEXT SENTENCE 
ELSE 
 ADD WS-CAMPO4 TO WS-TOTAL 
END-IF 
 
 
Exemplo 4: (NINHOS DE IF) 
IF WS-CAMPO1 = WS-CAMPO-2 
 -CAMPO3 
IF WS-CAMPO < WRK-CAMPO4 
 ADD 1 TO WS-CAMPO 
 PERFORM 15-00-SITUAÇÃO1 
END-IF 
IF WS-CAMPO5 > WS-CAMPO6 
 
 COBOL 
 
 
30 
 
 PERFORM 15-00-SITUAÇÃO2 
ELSE 
 IF WS-CAMPO7 EQUAL 
 NEXT SENTENCE 
 ELSE 
 PERFORM 20-00-SITUAÇÃO3 
 END-IF 
END-IF 
END-IF 
 
EVALUATE 
Faz a comparação de uma variável contra os valores indicados, efetuando as 
instruções correspondentes. A instrução EVALUATE é uma notação abreviada 
para ninho 
programação estruturada. 
 
Formato: 
EVALUATE variável 
 WHEN identificador-1 THRU identificador- 
 Instrução-imperativa- 
 [WHEN OTHER 
 instrução-imperativa-2] 
END-EVALUATE 
 
Exemplo: 
EVALUATE SIGLA-UF 
 WHEN 'SP' DISPLAY 'SÃO PAULO' 
 WHEN 'PR' DISPLAY 'PARANA' 
 WHEN 'SC' DISPLAY 'SANTA CATARINA' 
 WHEN 'RS' DISPLAY 'RIO GRANDE DO SUL' 
 WHEN OTHER DISPLAY 
 'OUTRO ESTADO' 
END-EVALUATE. 
 
EVALUATE WS-SALDO 
 WHEN ZEROS THRU 10000 
 
 WHEN 10001 THRU 20000 
 D 
 WHEN > 20000 
 - 
END-EVALUATE. 
 
 
 COBOL 
 
 
31 
 
CONTINUE 
A instrução CONTINUE permite que seja especificado um desvio de um bloco 
nulo. Esta instrução indica que nenhuma instrução executável condicional ou 
imperativa pode ser usada. 
 
Formato: 
CONTINUE 
 
Exemplo: 
IF A > B 
 CONTINUE 
ELSE 
 
 END-IF. 
 
 
NEXT SENTENCE 
Efetua um desvio para a próxima sentença (o início dela é identificado pelo 
próximo ponto ou END-comando ) 
 
Formato: 
NEXT SENTENCE 
 
Exemplos: 
IF A > B 
 NEXT SENTENCE 
ELSE 
 DI 
 END-IF. 
 
 
 COBOL 
 
 
32 
 
7. COMANDOS PARA PROCESSAMENTO DE ARQUIVOS SEQUENCIAIS 
Quando o programa precisa gravar ou ler dados em ARQUIVOS precisamos 
incluir em nossos programas a estrutura para tratamento desses arquivos. 
 
 Os arquivos devem ser declarados na INPUT-OUTPUT SECTION 
(ENVIRONMENT DIVISION), com a instrução SELECT. 
 
 Os conteúdos do arquivo devem ser descritos na FILE SECTION (DATA 
DIVISION) com a instrução FD. 
 
 Na PROCEDURE DIVISION é necessário programar as instruções para 
gravar ou ler estes arquivos. 
 
ENVIRONMENT DIVISION - INPUT-OUTPUT SECTION 
Esta seção destina-se a configuração dos arquivos que o programa 
usa. 
 FILE-CONTROL Cláusula SELECT 
Neste parágrafo devemos especificar cada um dos arquivos que o 
programa irá acessar. 
 
No parágrafo FILE-CONTROL, usado para definir arquivos, usamos 
uma instrução SELECT para cadastrar no programa cada um dos 
arquivos usados pelo programa. O formato da instrução SELECT é o 
seguinte: 
 
Formato: 
SELECT nome-arquivo-lógico ASSIGN TO nome-arquivo-fisico 
 [FILE STATUS IS identificador-1] 
 
Regras: 
 Nome-arquivo-lógico: Nome que será tratado internamente 
pelo programa. 
 Nome-arquivo-fisico: Deve especificar o nome do arquivo que 
será grafado fisicamente no sistema operacional. No caso de 
programação Mainframe, deve-se usar a mesma palavra que será 
empregada no JCL (comandos de execução do programa), para 
especificar o arquivo quando o programa for executado. 
 Idenficiador-1, representa o nome da variável, no 
programa cobol, que vai receber o resultado de acesso ao 
arquivo. 
 
A variável do FILE STATUS do arquivo deve estar definido no 
programa Cobol, conforme exemplo abaixo: 
 
01 FS-FILE-STATUS. 
 05 FS-CADAGE PIC X(002) VALUE SPACES. 
 05 FS-CADMEDIA PIC X(002) VALUE SPACES. 
 
 
 
 COBOL 
 
 
33 
 
FILE STATUS PARA ARQUIVO SEQUENCIAL 
A boa prática de programação sugere que todos os comandos para 
processamento de arquivos na PROCEDURE DIVISION devem ser 
seguidos de um teste na variável FILE STATUS para verificar 
possíveis erros. A variável FILE STATUS pode retornar um dos valores 
abaixo: 
 
STATUS SIGNIFICADO 
 '00' 'SUCCESSFUL COMPLETION' 
 '10' 'END OF FILE' 
 '35' '35' 'OPEN, FILE NOT PRESENT' 
 '39' 'OPEN, FILE ATTRIB CONFLICTING' 
 '41' 'OPEN, FILE IS OPEN' 
 '42' 'CLOSE, FILE IS CLOSED' 
 '46' 'SEQUENTIAL READ WITHOUT POSITIONING' 
 '47' 'READING FILE NOT OPEN AS INPUT/IO/EXTEND' 
 '48' 'WRITE WITHOUT OPEN IO' 
 '9x' 'PERMISSION NOT OK' 
 
Exemplo: 
No exemplo abaixo mostramos uma ENVIRONMENT DIVISION 
de um programa que irá acessar um arquivo CLIENTES. 
* 
 ENVIRONMENT DIVISION. 
 CONFIGURATION SECTION. 
 SPECIAL-NAMES. 
 DECIMAL-POINT IS COMMA. 
* 
 INPUT-OUTPUT SECTION. 
 FILE-CONTROL. 
 SELECT CLIENTES ASSIGN TO CLIENTES 
FILE STATUS IS FS-CLIENTES. 
 * 
Neste exemplo escolhemos como nome-arquivo-lógico 
dentro da instrução SELECT a palavra CLIENTES. O 
programador pode usar qualquer palavra com até 30 
caracteres para definir este nome, mas uma vez definido um 
nome-arquivo-lógico na instrução SELECT, deverá usar 
sempre este nome no programa quando se referir a este 
arquivo. 
 
 
 COBOL 
 
 
34 
 
 
DATA DIVISION - FILE SECTION. 
A FILE SECTION é a Section usada para detalhar o conteúdo dos 
registros dos arquivos que o programa irá ler/gravar. Vimos 
anteriormente, na INPUT-OUTPUT SECTION (ENVIRONMENT 
DIVISION), que para cada arquivo a ser tratado no programa havia 
uma instrução SELECT especificando e definindo um nome para o 
arquivo. Na FILE SECTION precisamos agora detalhar cada um destes 
arquivos. Isto é feito usando o parágrafo padrão FD FILE 
DESCRIPTION. 
 
FD (FILE DESCRIPTION) 
 
 FD nome-do-arquivo 
 RECORDING MODE IS F 
 LABEL RECORD [STANDARD | OMITTED] 
 BLOCK CONTAIS O RECORDS 
 01 nome-do-registro. ... 
 [03 nome-de-campo ...] 
 
Regras: 
1. A clausula RECORDING MODE é opcional e serve só como 
documentação. 
 
2. A clausla LABEL RECORD com a opção STANDARD é utilizada 
para a definição de arquivo SEQUENCIAL. A opção OMITTED 
deve ser utilizada em arquivo para RELATÓRIOS. 
 
Obs: É necessário observar com atenção o uso correto do ponto 
final na FILE SECTION, como está demonstrado no exemplo abaixo. 
 
Exemplo: 
O arquivo CLIENTES definido na INPUT-OUTPUT SECTION seria 
detalhado aqui como: 
 
 DATA DIVISION. 
 FILE SECTION. 
 FD CLIENTES 
 RECORDING MODE IS F 
 RECORD CONTAINS 80 CHARACTERS. 
 01 REG-CLIENTES. 
03 COD-CLIENTE PIC 9(8). 
03 NOME-CLIENTE PIC X(20). 
03 ENDER-CLIENTE PIC X(40). 
03 VALOR-CLIENTE PIC 9(10)V99. 
 
 COBOL 
 
 
35 
 
 
PROCEDURE DIVISION 
 
OPEN 
Todo arquivo antes de ser manipulado deve ter seu acesso aberto pelo 
comando OPEN. Este comando abre o contato com o dispositivo físico do 
arquivo e reserva, na memória (WORKING-STORAGE SECTION), áreas 
necessárias para a troca de dados entre o computador e o dispositivoexterno. Indica quais arquivos serão de entrada e quais serão de saída. 
 
Formato: 
OPEN [INPUT | OUTPUT | EXTEND] Nome-arquivo1 ... 
 
Regras: 
1. INPUT: Permite abrir o arquivo apenas para operações de leitura. 
2. OUTPUT: Permite abrir o arquivo para operações de gravação / 
impressão. Esta operação pode ser especificada quando o arquivo 
estiver sendo criado. Esta opção não permite comandos de leitura no 
arquivo. 
3. NOME-Arquivo1 ... : Nome lógico do(s) arquivo(s) definido(s) na 
clausula SELECT e na FD-File Description. 
 
Exemplos: 
 OPEN INPUT CADAGENCIA. 
 OPEN I-O CADBANCOS, CADFILIAIS. 
 
READ 
Para acesso sequencial, a instrução READ obtém o próximo registro lógico de 
um arquivo disponível ao programa objeto. 
Para acesso RANDOMICO, a instrução READ obtém um registro especificado 
de um arquivo de acesso direto disponível ao programa objeto. Quando a 
instrução READ for executada, o arquivo associado deve estar aberto no 
modo INPUT ou I-O 
 
Formato: Leitura Sequencial 
READ nome-arquivo 
[INTO nome-area-working] 
[AT END instrução-imperativa] 
[END-READ] 
 
Regras: 
1. INTO: O registro corrente é movido de uma área de INPUT para 
nome-area-working, de acordo com as regras da instrução MOVE. 
2. AT END: Se a condição AT END for especificada, a instrução-
imperativa do após o AT END será executada. 
 
 
 
 
 
 
 
 
 COBOL 
 
 
36 
 
Exemplo: Leitura em arquivo ORGANIZATION SEQUENTIAL 
ENVIRONMENT DIVISON. 
INPUT-OUTPUT SECTION. 
FILE CONTROL. 
SELECT SEQENT01 ASSIGN TO SYS-SEQENT01 
 FILE STATUS IS WS-STATUS. 
 
 ... 
 PROCEDURE DIVISION. 
 ... 
 LER-ARQ-SEQENT. 
READ SEQENT01 INTO WS-REGISTRO-SEQENT01 
 -FIM 
END-READ. 
 
WRITE 
A instrução WRITE regrava logicamente um dado registro num arquivo de 
acesso direto. 
 
Formato: 
WRITE nome-de-registro-1 [FROM identificador-1]. 
 
Regras: 
1. O arquivo de acesso direto associado à instrução WRITE deve ser 
aberto no modo OUTPUT ou EXTEND. 
 
2. NOME-DE-REGISTRO-1: Deve ser o nome de um registro lógico 
na entrada da FD na DATA DIVISION. 
 
3. FROM identificador-1: O conteúdo do identificador-1 é copiado 
para o nome-de-registro-1 antes de ocorrer a gravação. Depois da 
execução com sucesso da instrução WRITE, o registro continua 
disponível no identificador-1. 
 
Exemplo: 
 WRITE REGISTRO-ARQUIVO FROM REGISTRO-AUXILIAR. 
 
CLOSE 
Efetua o fechamento de arquivos. A boa prática de programação é fechar 
todos os arquivos abertos através do comando OPEN 
 
Formato: 
CLOSE nome-de-arquivo ... 
 
Exemplos: 
CLOSE ARQBANCO. 
CLOSE ARQAGENCIA. 
CLOSE ARQBANCO, ARQAGENCIA. 
CLOSE ARQBANCO 
 ARQAGENCIA. 
 
 
 COBOL 
 
 
37 
 
 
INSTRUÇÕES FREQUENTEMENTE UTILIZADAS, TABELAS INTERNAS E 
FORMATOS DE DADOS 
 
COPY 
O comando COPY é usado para copiar trechos de programa fonte que estão 
armazenados em bibliotecas (BOOKS) para dentro dos programas Cobol. 
Esses trechos de programa podem conter descrições de registros de 
arquivos, rotinas padronizadas que devem ser repetidas em muitos 
programas etc. No local conveniente do programa onde deverá ser copiado o 
BOOK basta codificar: 
 
Formato: 
COPY nome-do-book. 
 
Importante: 
O comando COPY pode ser utilizado em qualquer divisão do 
COBOL. 
 
CALL E LINKAGE SECTION 
 
A instrução CALL transfere o controle de um programa objeto a outro, 
retornando a próxima instrução do programa chamador. 
 Com a instrução CALL, podemos passar parâmetros de um programa 
para outro. O programa chamado deve definir as variáveis na LINKAGE 
SECTION e especificar na PROCEDURE DIVISION as variáveis através da 
cláusula USING. 
 
Formato: 
CALL nome-programa [USING parametro-1 
 [parametro-2 ... parametro-n] ] 
 
Exemplos: 
 *PROGRAMA CHAMADOR ****************************** 
ID DIVISION. 
 PROGRAM-ID. 
 DATA DIVISION. 
 WORKING-STORAGE SECTION. 
 01 WRK-PROGNAME PIC X(07). 
 01 WRK-AREA1. 
 05 WRK-PGTO PIC S9(05)V99 
05 WRK-VLR-HORA PIC S9(01)V99 
05 WRK-HORAS PIC S9(02)V99 
 01 WRK-AREA-2 PIC X(01). 
PROCEDURE DIVISION. 
 MOVE TO WRK-PROGNAME 
 CALL 'WRK-PROGNAME USING WRK-AREA-1 WRK-AREA-2. 
 CANCEL WRK-PROGNAME. 
 
 ... 
 
 COBOL 
 
 
38 
 
 
 *PROGRAMA CHAMADO ****************************** 
ID DIVISION. 
 PROGRAM-ID. 
 DATA DIVISION. 
 LINKAGE SECTION. 
 01 WRK-AREA1. 
 05 WRK-PGTO PIC S9(05)V99 
05 WRK-VLR-HORA PIC S9(01)V99 
05 WRK-HORAS PIC S9(02)V99 
 01 WRK-AREA-2 PIC X(01). 
PROCEDURE DIVISION USING WRK-AREA1 WRK-AREA2. 
ROTINA-PRINCIPAL. 
 IF WRK-PGTO > 1000,00 
 PERFORM PROCESSAR. 
... 
GOBACK. 
 
 
CANCEL 
A instrução CANCEL libera a área de memória ocupada por um sub-
programa chamado. 
 
Formato: 
CANCEL nome-programa 
 
Exemplo: 
 CALL USING WRK-AREA-1 WRK-AREA-2. 
 CANCEL 
 
EXIT PROGRAM 
A instrução EXIT PROGRAM especifica o final de um programa chamado e 
retorna o controle ao programa chamador. 
 Se o fluxo de execução do programa chamado atingir a instrução EXIT 
PROGRAM enquanto estiver operando sob o controle de uma instrução 
CALL o controle retornara ao programa chamador na próxima instrução 
após o comando CALL. 
 Se o fluxo de execução atingir a instrução EXIT PROGRAM e não estiver 
sob o controle de uma instrução CALL, a instrução EXIT PROGRAM será 
ignorada, sendo executada a próxima instrução após a instrução EXIT 
PROGRAM. 
 
Formato: 
EXIT PROGRAM. 
 
Exemplo: 
 ... 
 99-99-EXIT. 
EXIT PROGRAM. 
 
GOBACK 
Finaliza o programa e volta para o programa chamador. Tem a mesma 
funcionalidade do EXIT PROGRAM. 
 
 
 COBOL 
 
 
39 
 
Formato: 
GOBACK 
 
Exemplo: 
 ... 
 PERFORM PROCESSAR THRU PROCESSAR-FIM. 
 GOBACK 
 ... 
 
STRING 
A instrução STRING concatena o conteúdo de vários campos em um campo 
receptor. Seu formato é: 
 
 Formato: 
STRING identificador-1 ... literal-1 ... DELIMITED BY SIZE 
 INTO identificador-2 
 
 Exemplo: 
-LIDOS 
 DELIMITED BY SIZE INTO WS-MENSAGEM. 
 
TABELAS INTERNAS 
Alguns algoritmos mais avançados exigem a definição de uma mesma 
variável várias vezes, aumentando o trabalho de codificação do programa 
correspondente tanto na DATA DIVISION, como também as instruções 
resultantes na PROCEDURE DIVISION. Por exemplo, em um algoritmo para 
acumular as vendas do ano separadas por mês, precisamos definir 12 
campos de total na DATA DIVISION, e a PROCEDURE DIVISION deverá ter 
12 testes do mês da venda para decidir em que total deve ser feito a soma. 
Ex.: 
 DATA DIVISION. 
 ... 
 03 TOTAL-01 PIC 9(8)V99. 
 03 TOTAL-02 PIC 9(8)V99. 
 ... 
 03 TOTAL-12 PIC 9(8)V99. 
PROCEDURE DIVISION. 
 
 IF MÊS = 01 
 ADD VENDAS TO TOTAL-01 
 ELSE 
IF MÊS = 02 
 ADD VENDAS TO TOTAL-02 
 ELSE 
... 
 IF MÊS = 12 
 ADD VENDAS TO TOTAL-12. 
 
Clausula OCCURS 
A linguagem Cobol possui um recurso para resolver este problema. 
Na DATA DIVISION a variável será definida somente uma vez, 
acompanhada da cláusula OCCURS que definirá quantas vezes a 
variável deve ser repetida. A sintaxe da definição do item com 
OCCURS é: 
 
 COBOL 
 
 
40 
 
 
Formato: 
NÍVEL identificador-1 PIC ____ OCCURS n TIMES. 
 
Regras: 
1. A cláusula OCCURS só pode ser usada em variáveis de nível 02 a 49. 
2. Quando uma variável de uma tabela (definida com OCCURS) for usada 
na PROCEDURE DIVISION, ela precisa ser acompanhada de um 
indexador (subscrito) que definirá qual ocorrência da tabela está 
sendo referido. Este subscrito deve estar dentro de parênteses e pode 
ser um literal numérico ou uma variável numérica com valores 
inteiros. Por ex: ADDVENDAS TO TOTAL-MENSAL(5).Neste caso a 
soma esta sendo feita no quinto mês (Maio). 
 
Exemplo: 
A codificação do algoritmo do exemplo acima ficará reduzido agora a: 
 
 DATA DIVISION. 
01 TOTAIS-GERAIS. 
03 TOTAL-MENSAL PIC 9(8)V99 OCCURS 12 TIMES. 
 ... 
 PROCEDURE DIVISION. 
 ... 
 ADD VENDAS TO TOTAL-MENSAL (MES-VENDA). 
 
NÍVEIS DE TABELAS 
Em Cobol podemos definir um item de uma tabela como uma nova 
tabela, e assim sucessivamente até um nível de 3 tabelas. Por 
exemplo, para obter o total de vendas separado por estado, e em 
cada estado por tipo de produto, e para cada produto por mês de 
venda, montaremos a DATA DIVISION como abaixo: 
 
 DATA DIVISION. 
01 TOTAIS-VENDA. 
03 VENDAS-ESTADO OCCURS 27 TIMES. 
 05 VENDAS-PRODUTO OCCURS 5 TIMES. 
 07 VENDAS-MÊS PIC 9(8)V99 OCCURS 12 TIMES. 
 
Este código montará na memória uma tabela com 3 níveis de 1620 
totais (27 estados X 5 produtos X 12 meses). Para acessar um total 
desta tabela será necessário um conjunto de 3 indexadores: 
 
 PROCEDURE DIVISION. 
 .... 
 ADD VENDAS TO 
 VENDAS-MÊS (CD-ESTADO, CD-PRODUTO, MÊS-VENDA). 
 
Importante: 
Os indexadores dentro do parênteses devem estar na 
mesma seqüência da definição das tabelas (mesma 
hierarquia). 
 
 COBOL 
 
 
41 
 
FORMATO ESPECIAIS DE DADOS 
 
REDEFINES 
A cláusula REDEFINES é usada quando alguma informação da DATA 
DIVISION precisa ser definida em dois ou mais formatos diferentes. Por 
exemplo, em um campo de data podemos ter o formato dia/mês/ano ou 
ano/mês/dia: 
 
01 WS-DATA PIC 9(06). 
01 WS-DATA-R REDEFINES WS-DATA. 
03 ANO-D PIC 99. 
03 MÊS-D PIC 99. 
03 DIA-D PIC 99. 
 
 01 WS-DATA-INV PIC 9(08). 
 01 WS-DATA-INV-R REDEFINES WS-DATA-INV. 
 03 DIA-INV PIC 9(02). 
 03 Mês-INV PIC 9(02). 
 03 SEC-INV PIC 9(02). 
 03 ANO-INV PIC 9(02). 
 
 01 WS-DATA-MASC PIC 99/99/9999. 
 
 PROCEDURE DIVISION. 
 ACEITAR-DATA-SISTEMA. 
 ACCEPT WS-DATA FROM DATE. 
 MOVE ANO-D TO ANO-INV. 
 MOVE Mês-D TO MÊS-INV. 
 MOVE DIA-D TO DIA-INV. 
 IF ANO-D > 50 
 MOVE 19 TO SEC-INV 
 ELSE 
 MOVE 20 TO SEC-INV. 
 
 MOVE WS-DATA-INV TO WS-DATA-MASC. 
 
Os campos redefinidos ocupam o mesmo lugar na memória. No exemplo 
acima, o valor colocado no campo ANO-I aparece também em DIA-D. Os 
campos da área redefinida não guardam nenhuma relação com o formato e 
posição dos campos da primeira definição da área, e a única condição é que 
o total de bytes das duas áreas seja igual. Outro ex.: 
01 VALORES-PEQUENOS. 
03 VALOR-1 PIC 9(6). 
03 FILLER PIC X(4). 
 01 VALORES-GRANDES REDEFINES VALORES-PEQUENOS. 
 03 VALOR-2 PIC 9(8). 
 03 FILLER PIC XX. 
 
FORMATOS BINÁRIOS 
Quando usamos os formatos descritos nos parágrafos anteriores para 
descrever variáveis na DATA DIVISION, o Cobol armazena cada caracter das 
variáveis definidas em 1 byte da memória. Um byte é um conjunto de 8 bits. 
O computador associa cada combinação de bits ligado/desligado destes 8 
bits com uma letra (ou caracter) do nosso alfabeto. Assim, no caso do 
 
 COBOL 
 
 
42 
 
mainframe IBM, que usa o padrão EBCDIC, podemos representar estes 2 
exemplos: 
 
Caracter bits na memória valor decimal valor hexadecimal 
A 1 1 0 0 0 0 0 1 191 C1 
5 1 1 1 1 0 1 0 1 245 F5 
 
Acontece porem que o computador não foi projetado para fazer cálculos com 
este formato. Ele usa o valor binário puro dos bits para cálculos, onde cada 
bit da direita para a esquerda tem o valor da potencia de 2 correspondente, 
como no esquema: 
 
Bits 8 7 6 5 4 3 2 1 
Valor 128 64 32 16 8 4 2 1 
 
 
Assim o caracter 5 do formato EBCDIC acima seria interpretado pelo 
computador nas operações de cálculo como 245 (veja valor decimal da 
representação do caracter 5 no exemplo anterior). 
Os programadores Cobol não precisariam se preocupar com este detalhe, 
porque o compilador Cobol coloca no programa objeto gerado instruções 
adicionais para, na hora do cálculo, converter todas as variáveis do formato 
EBCDIC para binário, fazer o cálculo, e converter o resultado do formato 
binário para EBCDIC, e devolver o resultado convertido para a memória. Os 
inconvenientes de se trabalhar com variáveis numéricas em EBCDIC são: 
 - A ineficiência causada pelas conversões de formato. 
 - O formato EBCDIC ocupa espaço maior na memória. 
 
CLÁUSULA USAGE 
 
A linguagem Cobol usa a cláusula USAGE na especificação das variáveis para 
definir seu formato na memória. Existem os seguintes formatos: 
 
 [USAGE] DISPLAY = dados numéricos em zonado. Cada algarismo ocupa 
um byte. Máximo de 18 caracteres/algarismos. 
 
 [USAGE] COMP = dados numéricos no formato binário ponto fixo 
(valor expresso em decimal) ; os valores limite (menor e maior) 
são os que podem ser representados com a quantidade de 
algarismos (decimais) indicada. 
 
 [USAGE] COMP-1 = dados numéricos no formato binário ponto flutuante 
curto. Não colocar PIC (ele é estabelecido automaticamente pelo 
compilador). Valor expresso em notação científica (mantissa e 
expoente). 
 
 [USAGE] COMP-2 = dados numéricos no formato binário ponto flutuante 
longo. Não colocar PIC (ele é estabelecido automaticamente pelo 
compilador). Valor expresso em notação científica (mantissa e 
expoente). 
 
 
 [USAGE] COMP-3 = dados numéricos no formato decimal 
 
 COBOL 
 
 
43 
 
PIC indica a quantidade de algarismos do maior número que 
poderá estar contido nesta variável; cada algarismo ocupa meio 
byte. Para determinar o tamanho total do campo, acrescentar 
mais meio byte para o sinal (último meio byte à direita; 
independentemente de o campo ter sido definido com SINAL (PIC 
S) ou não). 
 
 [USAGE] COMP-4 = dados numéricos no formato binário ponto fixo. 
Valor expresso em decimal. 
 
 [USAGE] COMP-5 = dados numéricos no formato binário ponto fixo 
(valor expresso em decimal) ; os valores limite (menor e maior) são os 
que podem ser representados no campo no formato binário ponto fixo. 
 
USAGE COMP. 
Usado para especificar que a variável deve ter formato binário. Só é usado 
para variáveis numéricas. A sintaxe para definir VAR como variável binária 
é: 
 
 
Ou 
 
 
O Cobol formata números com USAGE COMP somente em 3 formatos 
binários que são os formatos disponíveis na CPU do mainframe para 
cálculos: Um formato com 2 bytes, ou 16 bits (1 bit de sinal e 15 bits de 
valores binários), um formato de 4 bytes, ou 32 bits (1 bit de sinal e 33 bits 
de valores binários), e um formato com 8 bytes, ou 64 bits (1 bit de sinal e 
63 bits de valores). A escolha destes formatos é feita de acordo com o 
tamanho do campo especificado pelo programador, segundo a tabela abaixo: 
 
DE ATE BYTES VALORES 
S9(1)COMP S9(4) COMP 2 -32768 a + 32768 
S9(5)COMP S9(9) COMP 4 -2.147.483.648 a + 2.147.483.648 
S9(10)COMP S9(18)COMP 8 valores com ate 18 algarismos 
 
USAGE COMP-3. 
Neste formato usa-se grupos de 4 bits para representar 1 número, e por isso 
1 byte consegue armazenar 2 números. 
Para calcular o tamanho fisico do campo deve-se utilizar a seguinte formula: 
 Dividir o tamanho do Campo por 2 
 Desprezar a casa decimal 
 Soma 1 no resultado 
 
Exemplo: 
01 WS-SALDO-CONTA PIC S9(15)V99 
17 / 2 = 8,5 
8 + 1 = 9 
O tamanho fisíco desse campo é 8 digitos 
 
77 VAR PIC 9(6) USAGE COMP. 
77 VAR PIC 9(6) COMP.

Continue navegando