Buscar

Aula 10 (4)

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 68 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 68 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 68 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

Livro Eletrônico
Aula 10
Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB
(Analista TI) - Pós-Edital
Judah Reis
 
 
 
 
 
 1 
67 
1 COBOL .............................................................................................................................2 
1.1 INTRODUÇÃO ..........................................................................................................2 
1.2 ESTRUTURA DA LINGUAGEM ................................................................................2 
1.3 DIVISÕES E SEÇÕES DE UM PROGRAMA COBOL ............................................4 
1.4 VARIÁVEIS, MATRIZES, TABELAS E COPY BOOKS ............................................ 7 
1.5 OPERAÇÕES BÁSICAS........................................................................................... 13 
1.6 CONTROLE DE FLUXO.......................................................................................... 19 
1.7 MANIPULAÇÃO E PESQUISA EM TABELAS ..................................................... 24 
1.8 MANIPULAÇÃO DE ARQUIVOS ..........................................................................27 
1.9 SUBROTINAS.......................................................................................................... 30 
1.10 QUESTÕES COMENTADAS: COBOL ................................................................. 33 
2 LISTAS DE QUESTÕES ................................................................................................ 55 
2.1 LISTA DE QUESTÕES: COBOL ............................................................................ 55 
3 GABARITOS ...................................................................................................................67 
3.1 GABARITO: COBOL ...............................................................................................67 
 
Inserir aqui o nome do Curso
www.estrategiaconcursos.com.br
Judah Reis
Aula 10
69360
 
r b m.o .cos s r ucn coiag e t a rst w.ew 
uagem de Programação p/ BRB (Analista TI) - Pós-Edital
w 
g n i L es a mest Sie d o tenm i lv o nve s e D 
 
 
 
 
 2 
67 
1 COBOL 
1.1 INTRODUÇÃO 
Mencionar JCL 
 
1.2 ESTRUTURA DA LINGUAGEM 
 
Pessoal, em 1960 os computadores eram computadores "raiz", e não esses 
computadores nutelas que temos hoje. Esquece esse esquema de teclado, tela, 
gabinete... estamos falando de salas cheias de cabos, armários com equipamentos 
eletrônicos, talvez máquina de escrever, e provavelmente uma máquina de perfurar 
cartões. Isso mesmo, COBOL nasceu no mundo dos cartões perfurados. 
 
Para quem precisa programar em uma máquina de perfurar cartão, é fundamental 
o respeito à forma (tinha algum técnico que existia só para ler o que era digitado na 
máquina de escrever e passar pro cartão perfurado...). Por isso, todo código COBOL 
deve ser escrito em um "coding sheet" (tabela de codificação, ou formulário de 
codifição). Cada linha do programa COBOL tem 80 colunas, e cada coluna (ou 
conjunto de colunas) tem um significado: 
 
Colunas Área Descrição 
01-06 Número da Linha É isso mesmo... você precisava numerar as 
linhas você mesmo (falar qual era a linha 1, a 
linha 2, e assim por diante... acredita?) 
07 Indicador Um caractere que indica se aquela linha é um 
comentário (*), uma continuação da linha 
anterior (-) ou uma quebra de linha (/). 
08-11 Área A Uma área onde você indica a DIVISION, 
SECTION ou PARAGRAPH. Vamos falar dessa 
estrutura a seguir. 
12-72 Área B A área onde estão todos os STATEMENTS 
(comandos do programa). 
73-80 Área de Identificação Para ser usada como quiser pelo programador. 
 
Um "Olá Mundo" em COBOL tem a seguinte aparência (as 3 linhas no início foram 
colocadas só para identificar as colunas, não fazem parte do programa): 
 
Inserir aqui o nome do Curso
www.estrategiaconcursos.com.br
Judah Reis
Aula 10
69360
 
r b m.o .cos s r ucn coiag e t a rst w.ew 
uagem de Programação p/ BRB (Analista TI) - Pós-Edital
w 
g n i L es a mest Sie d o tenm i lv o nve s e D 
 
 
 
 
 3 
67 
 
0--------1---------2---------3---------4---------5---------6---------7---------8 
|-----||---|------------------------------------------------------------|------- 
000100 IDENTIFICATION DIVISION. isso 
000200 PROGRAM-ID. OLA-MUNDO. aqui 
000210* Veja que isso é um comentário porque tem um * na coluna 7 nao 
000300 PROCEDURE DIVISION. faz 
000400 DISPLAY "TABELA DE CODIFICACAO" dif. 
000500 STOP RUN. Alguma 
 
 
 
 
Na época que cobol surgiu, os recursos eram escassos! Se você esquecesse uma 
linha no seu código e tivesse que reescrever tudo, teria que perfurar 5 mil cartões 
de novo, só pra trocar a ordem de 1 ou 2 comandos (não é eufemismo, programas 
tinham milhares de cartões...). Por isso, permitir que o desenvolvedor controlasse a 
numeração das linhas permitia substituir uma linha específica, ou injetar uma série 
de comandos entre 2 linhas. Isso salvava algumas horas do trabalho. Hoje, os 
ambientes de desenvolvimento COBOL já são capazes de fazer uma numeração 
automática de linhas, para que você não coloque a linha 300 antes da 200. Também 
perdeu um pouco o sentido da Área de Identif icação (colunas 73 a 80), que quase 
não é mais utilizada. Na verdade, se você procurar algum compilador on-line de 
COBOL, dificilmente vai conseguir controlar essas 2 áreas. Mas, por definição, o 
coding sheet de 80 colunas ainda vale. 
 
Nos próximos exemplos dessa aula vamos suprimir a numeração para facilitar a 
leitura. Mas na sua prova, saiba que o programa pode vir com ou sem a numeração, 
e isso não vai invalidar a questão. 
 
1.2.1 LITERAIS 
 
Literais são valores colocados diretamente no código, como é o caso de "TABELA 
DE CODIFICACAO" na linha 400 do exemplo anterior. Literais podem ser 
alfanuméricas ou numéricas. 
 
Inserir aqui o nome do Curso
www.estrategiaconcursos.com.br
Judah Reis
Aula 10
69360
 
r b m.o .cos s r ucn coiag e t a rst w.ew 
uagem de Programação p/ BRB (Analista TI) - Pós-Edital
w 
g n i L es a mest Sie d o tenm i lv o nve s e D 
 
 
 
 
 4 
67 
Literais alfanuméricas podem ter até 160 caracteres, e são delimitadas com aspas 
simples (') ou duplas ("). Elas devem obrigatoriamente terminar da mesma forma 
que foram abertas - se abriu com aspas símples, deve terminar com aspas símples, 
se abriu com duplas, termina com duplas. Por exemplo: 
 
 
"Minha Literal" (válido) 
'Minha outra literal' (válido) 
'Minha "nova" literal' (válido. As aspas duplas não terminam a literal aberta 
por aspas simples) 
'Minha 'nova' literal' (inválido! As aspas simples antes de ‘nova’ vão ser 
interpretadas como fim da literal, o que torna o resto da linha um erro). 
'Minha última literal" (inválido! Você precisa fechar do mesmo jeito que abriu) 
"Minha última literal' (inválido! Você precisa fechar do mesmo jeito que abriu) 
 
 
Literais numéricas são compostas por dígitos (0-9), um sinal (+ ou -) ou ponto (.), e 
podem ter até 18 dígitos. O sinal (+ ou -), quando presente, deve estar no início. O 
ponto, quando presente, não pode ser o último caractere. Por exemplo: 
 
 
10 (válido) 
+10 (válido) 
-10 (válido) 
10.1 (válido) 
-10.1 (válido) 
.1 (válido) 
+.1 (válido) 
10+ (inválido, o sinal deve ser no início) 
10,1 (inválido, o separador decimal é o '.', não ',') 
10. (inválido, não pode terminar com '.') 
 
 
1.3 DIVISÕES E SEÇÕES DE UM PROGRAMA COBOL 
Já deu pra perceber que COBOL é uma linguagem com organização muito rígida, 
digna de quartel militar. Para escrever seu programa você precisa conhecer a 
organização de “tópicos” do programa. Existem um lugar próprio para colocar o 
"cabeçalho" e para dar nome ao programa, um lugar em que você pode declararvariáveis, outro para colocar seu algoritmo, e assim por diante. As estruturas que 
controlam esses “tópicos” são, em ordem: PROGRAM (programa) > DIVISION 
(divisão) > SECTION (sessão)> PARAGRAPH (parágrafo)> SETENCE (sentença) > 
STATEMENT (comando). Sendo assim, quando você vai escrever um programa em 
COBOL, você começa com a estrutura PROGRAM. Dentro desse PROGRAM você 
Inserir aqui o nome do Curso
www.estrategiaconcursos.com.br
Judah Reis
Aula 10
69360
 
r b m.o .cos s r ucn coiag e t a rst w.ew 
uagem de Programação p/ BRB (Analista TI) - Pós-Edital
w 
g n i L es a mest Sie d o tenm i lv o nve s e D 
 
 
 
 
 5 
67 
vai criar algumas DIVISIONs. Dentro de cada DIVISION vai ter uma ou mais 
SECTIONs, e assim seguirá. A relação é sempre de 1-N. As estruturas terminam com 
um caractere de ‘.’ (um programa COBOL quase não tem o famoso ‘;’ de outras 
linguagens). 
 
 
 
PROGRAM é o agrupador maior que irá conter as DIVISIONs. Existem 4 DIVISIONs: 
IDENTIFICATION DIVISION, ENVIRONMENT DIVISION, DATA DIVISION, e 
PROCEDURE DIVISION. 
 
IDENTIFICATION DIVISION é o local onde se identifica o programa. Ela precisa ter 
um parágrafo obrigatório chamado PROGRAM-ID, que declara o nome do 
programa. As linhas abaixo criam um programa chamado OLA-MUNDO. 
 
IDENTIFICATION DIVISION. 
PROGRAM-ID. OLA-MUNDO. 
 
ENVIRONMENT DIVISION - é usado para declarar as relações com o ambiente de 
execução, arquivos e outras entradas e saídas de dados. Possui duas sessões: 
• CONFIGURATION SECTION - qual será o SOURCE-COMPUTER (sistema 
usado para compilar o programa) e o OBJECT-COMPUTER (sistema usado 
para executar o programa) 
• INPUT-OUTPUT SECTION - informa arquivos que serão lidos/manipulados 
pelo sistema. 
 
DATA DIVISION define os dados que serão utilizados no programa, bem como sua 
estrutura (tamanho, nome, tipo, etc.). Possui 4 sessões: 
• FILE SECTION - descreve a estrutura dos arquivos que serão lidos ou escritos 
pelo programa. 
Inserir aqui o nome do Curso
www.estrategiaconcursos.com.br
Judah Reis
Aula 10
69360
 
r b m.o .cos s r ucn coiag e t a rst w.ew 
uagem de Programação p/ BRB (Analista TI) - Pós-Edital
w 
g n i L es a mest Sie d o tenm i lv o nve s e D 
 
 
 
 
 6 
67 
• WORKING-STORAGE SECTION - Define as variáveis declaradas pelo 
desenvolvedor. As variáveis declaradas aqui são mantidas durante toda a vida 
do programa (veja ccomo variáveis globais). 
• LOCAL-STORAGE SECTION - Define as variáveis declaras pelo desenvolvedor 
mas, ao contrário do WORKING-STORAGE, as variáveis declaradas aqui são 
reiniciadas a cada chamada (veja como variáveis delcaradas dentro de 
funções). 
• LINKAGE SECTION - Define dados que foram disponibilizados por outros 
programas (veja como parâmetros recebidos pela função). 
 
Vamos falar bastante sobre declaração de variáveis daqui a pouco. 
 
PROCEDURE DIVISION é aonde você coloca o seu algoritmo em si, a lógica do seu 
programa. 
 
PARAGRAPHS são rótulos no código. Eles permitem que o programador possa 
desviar um código para um parágrafo específico, ou executar um parágrafo diversas 
vezes. O exemplo abaixo declara 2 parágrafos (TRECHO-A e TRECHO-B) faz um 
desvio GO TO para um parágrafo dependendo do valor de uma variável: 
 
PROCEDURE DIVISION. 
 IF VAR1 > 5 THEN 
 GO TO TRECHO-A 
 ELSE 
 GO TO TRECHO-B 
 END-IF. 
 
 TRECHO-A. (esta linha criou o parágrafo TRECHO-A) 
 DISPLAY 'COMEÇO'. 
 
 TRECHO-B. (esta linha criou o parágrafo TRECHO-B) 
 DISPLAY 'FIM'. 
STOP RUN. 
 
 
Você pode criar um parágrafo simplesmente colocando um rótulo em uma linha 
terminada por “.”, como foi feito acima. 
 
SENTECES e STATEMENTS são os comandos utilizados para realizar o seu algoritmo. 
O bloco IF do exemplo acima é uma sentença (SENTECE), e o GO TO TRECHO-A é 
um comando (STATEMENT). SENTENSES e STATEMENTS só são utilizadas na 
Inserir aqui o nome do Curso
www.estrategiaconcursos.com.br
Judah Reis
Aula 10
69360
 
r b m.o .cos s r ucn coiag e t a rst w.ew 
uagem de Programação p/ BRB (Analista TI) - Pós-Edital
w 
g n i L es a mest Sie d o tenm i lv o nve s e D 
 
 
 
 
 7 
67 
PROCEDURE DIVISION. Nessa divisão você vai provavelmente manipular as variáveis 
declaradas no DATA DIVISION. 
 
1.4 VARIÁVEIS, MATRIZES, TABELAS E COPY BOOKS 
 
Como vimos anteriormente, variáveis são declaradas na DATA DIVISION (divisão de 
dados). Na declaração da variável são utilizados: nível, nome, "picture" e valor. Vou 
deixar para falar do nível por último. 
 
O nome da variável é seu identificador. Vamos supor que você queira declarar uma 
variável para armazenar o login do usuário, alfanumérico, de 30 posições , e o estado 
(UF) com 2 posições, sendo exclusivamente letras. Isso ficaria mais ou menos assim: 
 
 
DATA DIVISION. 
WORKING-STORAGE SECTION. 
01 USUARIO PIC X(30) VALUE 'VALOR INICIAL'. 
01 UF-USER PIC A(2) VALUE 'DF'. 
 
 
O nome das variáveis são formados por letras, números ou hífen (-). Os 
identificadores devem conter, pelo menos, uma letra, não podem ser palavras 
reservadas, mas curiosamente, ao contrário da maior parte das linguagens, nomes 
de variáveis PODEM começar com números (mas não podem começar por hífen). 
Exemplos: 
 
• USUARIO 
• NOME-USUARIO 
• CONT1 
• 1CONT 
• CALL (Inválido, palavra reservada) 
• $CONT (Inválido, caractere $) 
• 100 (Inválido, não contém letra) 
• -USUARIO (Inválido, começa com hífen) 
 
Nas primeiras versões do COBOL, os nomes precisavam ser maiúsculos. Contudo, a 
maior parte dos compiladores atuais são case-insensitive, o que significa que não 
diferem o nome com maiúsculas ou minúsculas. Em outras palavras, USUARIO e 
usuario são a mesma variável. 
 
Inserir aqui o nome do Curso
www.estrategiaconcursos.com.br
Judah Reis
Aula 10
69360
 
r b m.o .cos s r ucn coiag e t a rst w.ew 
uagem de Programação p/ BRB (Analista TI) - Pós-Edital
w 
g n i L es a mest Sie d o tenm i lv o nve s e D 
 
 
 
 
 8 
67 
O "PIC" ou "PICTURE" (pode ser escrito das duas maneiras, sem problemas) é a 
forma com que o COBOL define o tipo e a máscara das suas variáveis. Como vimos 
anteriormente, o PICTURE X(30) - ou PIC X(30) - define a variável com 30 posições 
alfanuméricas. Para definir um tipo numérico de 4 posições, faríamos 9(4), ou 9999. 
Os símbolos possíveis são: 
 
Símbolo Significado 
9 Numérico 
A Alfabeto (exclusivamente letras) 
X Alfanumérico 
V Separador Decimal 
S Sinal (+ ou -) 
P Assumed Decimal - tem que estar no início ou fim. No início é 
um .0 a esquerda. No final é um 0 a direita (nunca vi ser 
cobrado...) 
 
A quantidade de dígitos do tipo pode ser determinada repetindo o símbolo, ou 
colocando a quantidade entre parêntesis. Ou seja, um tipo Alfabeto com 4 posições 
pode ser definido por A(4) ou AAAA. Veja alguns exemplos de declaração: 
 
 
 - 9999 - números de 0000 até 9999 
 - 9(4) - números de 0000 até 9999 (mesmo de cima) 
 - S9999 - números de -9999 até +9999 
 - 999V99 - números de 000.00 até 999.99. 
 - 9(3)V9(2) - números de 000.00 até 999.99 (mesmo de cima). 
 - 9(3).9(2) - números de 000.00 até 999.99 (mesmo de cima). 
 
 
Você pode usar o '.' ao invés do 'V' para marcar o separador decimal, desde que 
não use o sinal (marcador S). Se usar o S, obrigatoriamente o marcador de decimal 
precisa ser o V. 
 
A instrução VALUE durante a declaração da variável é opcional e, quando presente, 
define o valor inicial da variável. Deve ser uma literal que obedeça a máscara 
definida pelo PICTURE. 
 
Por último, voltamos ao "nível", aqueles números no início da declaração: 
 
Inserir aqui o nome do Curso
www.estrategiaconcursos.com.br
Judah Reis
Aula 10
69360
 
r b m.o .cos s r ucn coiag e t a rst w.ew 
uagem de Programação p/ BRB (Analista TI) - Pós-Edital
w 
g n i L es a mest Sie d o tenm i lv o nve s e D 
 
 
 
 
 9 
67 
vv 
01 UF-USER PIC A(2) VALUE 'DF'. 
^^ 
 
Nível é aforma com que COBOL consegue agrupar variáveis para criar estruturas. 
Digamos que o seu usuário tenha nome e login. Podemos fazer isso da seguinte 
forma: 
 
 
IDENTIFICATION DIVISION. 
PROGRAM-ID. MEU-PROGRAMA. 
DATA DIVISION. 
 WORKING-STORAGE SECTION. 
 01 USUARIO. 
 02 NOME PIC X(10) VALUE 'MEU NOME'. 
 02 LOGIN PIC X(10) VALUE 'MEU.LOGIN'. 
PROCEDURE DIVISION. 
 DISPLAY "USUARIO: "USUARIO. 
 DISPLAY "NOME : "NOME. 
 DISPLAY "LOGIN : "LOGIN. 
STOP RUN. 
 
 
Ao escrever que NOME e LOGIN estão no nível 2, isso significa que essas variáveis 
estão dentro de USUÁRIO que foi declarada no nível 1. O programa acima vai 
produzir a seguinte saída: 
 
USUARIO: MEU NOME MEU.LOGIN 
NOME : MEU NOME 
LOGIN : MEU.LOGIN 
 
 
Perceba que NOME e LOGIN ficam com o valor próprio, e USUÁRIO é o 
agrupamento das duas variáveis que o compõem. Isso é bem curioso, mas é uma 
característica muito marcante da linguagem: os tipos “pai” nada mais são do que o 
agrupamento dos tipos “filhos”. 
 
Os níveis vão de 01 a 49 de forma livre, e ainda temos os tipos “especiais” 66, 77 e 
88. O nível 01 cria um registro. Os níveis 02 até 49 são disponíveis para criar os sub-
itens, que podem ser dados elementares, ou outros grupos. Por exemplo, podemos 
ter ENDERECO para o USUARIO: 
 
Inserir aqui o nome do Curso
www.estrategiaconcursos.com.br
Judah Reis
Aula 10
69360
 
r b m.o .cos s r ucn coiag e t a rst w.ew 
uagem de Programação p/ BRB (Analista TI) - Pós-Edital
w 
g n i L es a mest Sie d o tenm i lv o nve s e D 
 
 
 
 
 10 
67 
 
 WORKING-STORAGE SECTION. 
 01 USUARIO. 
 02 NOME PIC X(10). 
 02 LOGIN PIC X(10). 
 02 ENDERECO. 
 03 RUA PIC X(10). 
 03 NUMERO PIC 9(5). 
 03 CIDADE PIC X(10). 
 03 ESTADO PIC X(2). 
 
 
Não necessariamente você precisa incrementar do nível 01 para 02, e de 02 para 03. 
Você poderia ter 01, 05 e 10 (algumas pessoas gostam de deixar um gap de 5 em 5 
ao invés de 1 em 1, não há problema nisso). Também é comum identar os grupos, 
mas isso não é obrigatório. O exemplo acima (com identação) é exatamente a 
mesma coisa que o código abaixo (sem identação): 
 
 
 WORKING-STORAGE SECTION. 
 01 USUARIO. 
 05 NOME PIC X(10). 
 05 LOGIN PIC X(10). 
 05 ENDERECO. 
 10 RUA PIC X(10). 
 10 NUMERO PIC 9(5). 
 10 CIDADE PIC X(10). 
 10 ESTADO PIC X(2). 
 
 
Os 3 números “especiais” são: 
• Nível 66 – RENAMES – Para renomear uma variável, no formato “66 nome- 
velho RENAMES nome-novo”. Ex.: 66 USUARIO RENAMES USER 
• Nível 77 – Usado para declarar variáveis completamente independentes de 
outras, que não podem ser pais ou filhas de outras estruturas. 
• Nível 88 – Nomes Condicionais – São sempre filhos de uma outra variável 
primitiva, e definem “regras” para essas variáveis. Por exemplo, para definir 
que SEXO seja sempre uma variável M ou F, você poderia fazer como no 
exemplo abaixo: 
 
Inserir aqui o nome do Curso
www.estrategiaconcursos.com.br
Judah Reis
Aula 10
69360
 
r b m.o .cos s r ucn coiag e t a rst w.ew 
uagem de Programação p/ BRB (Analista TI) - Pós-Edital
w 
g n i L es a mest Sie d o tenm i lv o nve s e D 
 
 
 
 
 11 
67 
DATA DIVISION. 
 WORKING-STORAGE SECTION. 
 01 SEXO PIC A(1) VALUE 'K'. 
 88 SEXO-VALIDO VALUE 'M' 'F'. 
PROCEDURE DIVISION. 
 IF SEXO-VALIDO 
 DISPLAY "SEXO : "SEXO 
 ELSE 
 DISPLAY "SEXO INVÁLIDO" 
 END-IF. 
STOP RUN. 
 
 
O exemplo acima vai produzir o resultado: SEXO INVÁLIDO. 
 
1.4.1 ARRAYS, TABELAS, MATRIZES N-DIMENSIONAIS 
 
Toda linguagem de programação precisa de uma estrutura de dados para 
armazenar coleções (ARRAYs). COBOL não é diferente, e a coleção é feita utilizando 
a palavra reservada OCCURS. A sintaxe para definição de um ARRAY contendo 5 
TELEFONES dentro da estrutura ALUNO seria: 
 WORKING-STORAGE SECTION. 
 01 ALUNO. 
 02 TELEFONE PIC 9(12) OCCURS 5 TIMES. 
 
Os valores individuais da coleção podem ser acessados usando subscripts com 
valores de 1 até o seu tamanho, no nosso caso TELEFONE(1) até TELEFONE(5). 
 
CUIDADO!!! A posição é acessada a partir do índice 1 (e não do 0, como a maior 
parte das linguagens)!!!. 
 
Também é possível criar uma variável de índice junto do ARRAY, para não precisar 
declará-la em uma linha separada. Suponha que você queira criar uma variavel 'I' 
para iterar sobre a lista de telefones. Você pode fazer isso com a seguinte sintaxe: 
 
 
 WORKING-STORAGE SECTION. 
 01 ALUNO. 
 02 TELEFONE PIC 9(12) OCCURS 5 TIMES INDEXED BY I. 
 
 
Pois bem, aprendemos a criar uma lista simples. Agora imagine que eu tenho um 
curso, e que cada curso tem um nome, e uma lista de 30 alunos (e cada aluno tem 
Inserir aqui o nome do Curso
www.estrategiaconcursos.com.br
Judah Reis
Aula 10
69360
 
r b m.o .cos s r ucn coiag e t a rst w.ew 
uagem de Programação p/ BRB (Analista TI) - Pós-Edital
w 
g n i L es a mest Sie d o tenm i lv o nve s e D 
 
 
 
 
 12 
67 
uma lista de 5 telefones). Estamos querendo criar agora um ARRAY bi-dimensional 
(ou uma tabela). Isso pode ser feito da seguinte forma: 
 
 
 01 CURSO. 
 02 NOME-CURSO PIC X(8). 
 02 ALUNO OCCURS 30 TIMES. 
 03 TELEFONE PIC 9(12) OCCURS 5 TIMES. 
 
 
Continuamos podendo usar subscripts pra acessar o 3o. aluno - ALUNO(3). Para 
acessar o 1o. telefone do 3o. aluno, usamos TELEFONE(3,1). A ordem do índice de 
acesso no subscript é da estrutura mais externa para a mais interna. 
 
Vamos mais pra frente? Como você imagina que ficaria o programa se eu precisasse 
de uma lista com 10 cursos agora? Como você mudaria o programa? Como você 
faria para mostrar o 1o. telefone, do 3o. aluno, do 5o. curso? Tente fazer sozinho, e 
verifique se o resultado bate com o abaixo: 
 
 
DATA DIVISION. 
 WORKING-STORAGE SECTION. 
 01 CURSO OCCURS 10 TIMES. 
 02 NOME-CURSO PIC X(8). 
 02 ALUNO OCCURS 3 TIMES. 
 03 TELEFONE PIC 9(12) OCCURS 5 TIMES. 
PROCEDURE DIVISION. 
 DISPLAY "TELEFONE: "TELEFONE(5,3,1). 
STOP RUN. 
 
 
Só para reforçar: na estrutura TELEFONE(5,3,1), o “5” é referente ao CURSO, “3” 
referente ao ALUNO e “1” ao TELEFONE. 
 
1.4.2 COPYBOOKS 
 
Pessoal, imagine uma estrutura de dados que é muito utilizada no seu sistema, 
digamos USUARIO. Um USUARIO tem uma série de dados como: LOGIN, NOME, 
DATA-NASCIMENTO, DATA-CADASTRO, LISTA-CURSOS, etc, etc, etc. Se essa 
estrutura é muito utilizada, não faz sentido declarar ela em todos os lugares... seria 
melhor declarar em um lugar só, e poder “copiar” (de onde será que veio o nome 
copybook?) a mesma estrutura em todos os lugares. É exatamente essa a função 
dos COPYBOOKS. 
Inserir aqui o nome do Curso
www.estrategiaconcursos.com.br
Judah Reis
Aula 10
69360
 
r b m.o .cos s r ucn coiag e t a rst w.ew 
uagem de Programação p/ BRB (Analista TI) - Pós-Edital
w 
g n i L es a mest Sie d o tenm i lv o nve s e D 
 
 
 
 
 13 
67 
 
Assim, para o nosso sistema, poderíamos criar um COPYBOOK com nome 
ESTRUTURAS-COMUNS definindo as estruturas USUARIO, CURSO, ALUNO, 
PROFESSOR, etc., e copiar todas para o nosso programa usando: 
 
 
DATA DIVISION. 
 WORKING-STORAGE SECTION. 
 COPY ESTRUTURAS-COMUNS. 
 
 
Pronto! Todas as estruturas declaradas no COPYBOOK foram parar no meu 
programa. O comando COPY deve ser utilizado dentro do WORKING-STORAGE 
SECTION. 
 
1.5 OPERAÇÕES BÁSICAS 
As operações em COBOL são associadas a verbos, que instruem o sistema a fazer 
alguma coisa. Abaixo estão alguns verbos básicos. 
 
1.5.1 DISPLAY (MOSTRE) 
Escreve algo na tela (é o printf do C, o System.out.println do Java, o console.log do 
Javascript). A concatenação dos textos é automática, você só lista as variáveis: 
 
 
DATA DIVISION. 
 WORKING-STORAGE SECTION. 
 01 VALOR PIC 9(4) VALUE 1234. 
 01 OUTRO PIC 9(4) VALUE 5678. 
PROCEDURE DIVISION. 
 DISPLAY VALOR OUTRO 'FINAL' 
STOP RUN. 
 
 
Vai produzir:12345678FINAL 
 
1.5.2 ACCEPT (ACEITE) 
Recebe algum dado. Pode receber informações diretamente do sistema que está 
rodando o programa, ou algum input escrito pelo usuário (nesse caso, será 
necessário que o JCL declare que esse input será feito). 
 
Inserir aqui o nome do Curso
www.estrategiaconcursos.com.br
Judah Reis
Aula 10
69360
 
r b m.o .cos s r ucn coiag e t a rst w.ew 
uagem de Programação p/ BRB (Analista TI) - Pós-Edital
w 
g n i L es a mest Sie d o tenm i lv o nve s e D 
 
 
 
 
 14 
67 
 
DATA DIVISION. 
 WORKING-STORAGE SECTION. 
 01 NOME PIC X(10). 
PROCEDURE DIVISION. 
 ACCEPT NOME. 
 DISPLAY 'NOME DIGITADO:' NOME. 
STOP RUN. 
 
 
1.5.3 MOVE (MOVA) 
Copia um valor para uma variável (atribuição). Se o valor for uma string, você ainda 
pode copiar só uma parte dela usando a notação VAR(INI:FIM): 
 
DATA DIVISION. 
 WORKING-STORAGE SECTION. 
 01 VALOR PIC 9(4). 
 01 TEXTO-A PIC X(10). 
 01 TEXTO-B PIC X(10). 
PROCEDURE DIVISION. 
 MOVE 1234 TO VALOR. 
 MOVE 'MOVENDO...' TO TEXTO-A. 
 MOVE TEXTO-A(1:3) TO TEXTO-B. 
 DISPLAY 'VALOR : ' VALOR. 
 DISPLAY 'TEXTO-A: ' TEXTO-A. 
 DISPLAY 'TEXTO-B: ' TEXTO-B. 
STOP RUN. 
 
 
Esse programa produz o resultado: 
VALOR : 1234 
TEXTO-A: MOVENDO... 
TEXTO-B: MOV 
 
1.5.4 INITIALIZE (INICIALIZE) 
 
Inicializa uma variável com o valor 0 (numéricas) ou espaço vazio (textuais). Exemplo: 
Inserir aqui o nome do Curso
www.estrategiaconcursos.com.br
Judah Reis
Aula 10
69360
 
r b m.o .cos s r ucn coiag e t a rst w.ew 
uagem de Programação p/ BRB (Analista TI) - Pós-Edital
w 
g n i L es a mest Sie d o tenm i lv o nve s e D 
 
 
 
 
 15 
67 
DATA DIVISION. 
 WORKING-STORAGE SECTION. 
 01 VALOR-INICIAL PIC X(5) VALUE 'ABCD'. 
 01 NUMERO PIC 9(2) VALUE 10. 
 01 NUMERO-VAZIO PIC 9(2). 
PROCEDURE DIVISION. 
 DISPLAY VALOR-INICIAL " " NUMERO " " NUMERO-VAZIO. 
 INITIALIZE VALOR-INICIAL, NUMERO, NUMERO-VAZIO. 
 DISPLAY VALOR-INICIAL " " NUMERO " " NUMERO-VAZIO. 
STOP RUN. 
 
Esse programa produz o resultado: 
ABCD 10 00 
 00 00 
 
1.5.5 ADD TO (ADICIONE A) 
 
Adiciona um valor a uma variável. Por exemplo: 
DATA DIVISION. 
 WORKING-STORAGE SECTION. 
 01 V1 PIC 9(4) VALUE 1. 
PROCEDURE DIVISION. 
 ADD 10 TO V1. 
 ADD 10 TO 20 GIVING V1. 
 
Usamos duas formas: 
• ADD 10 TO V1 é o mesmo que fazer V1 = V1 + 10. 
• ADD 10 TO 20 GIVING V1 é o mesmo que fazer V1 = 10 + 20. 
 
É possível adicionar diversas variáveis ao mesmo tempo: 
DATA DIVISION. 
 WORKING-STORAGE SECTION. 
 01 V1 PIC 9(2) VALUE 1. 
 01 V2 PIC 9(2) VALUE 2. 
 01 V3 PIC 9(2) VALUE 4. 
 01 V4 PIC 9(2) VALUE 8. 
 01 V6 PIC 9(2). 
PROCEDURE DIVISION. 
 ADD v1 v2 TO V3. (faz V3=V3+V1+V2=4+1+2=7) 
 ADD V1 V2 TO V4 V5. (faz V4=V4+V1+V2=8+1+2=11 e V5=V5+V1+V2=16+1+2=19) 
 ADD V1 V2 TO V4 V5. (faz V4=V4+V1+V2=8+1+2=11 e V5=V5+V1+V2=16+1+2=19) 
 DISPLAY V1 " " V2 " " V3 " " V4 " " V5. 
STOP RUN. 
 
O programa acima vai produzir o resultado: 01 02 07 11 19. 
Inserir aqui o nome do Curso
www.estrategiaconcursos.com.br
Judah Reis
Aula 10
69360
 
r b m.o .cos s r ucn coiag e t a rst w.ew 
uagem de Programação p/ BRB (Analista TI) - Pós-Edital
w 
g n i L es a mest Sie d o tenm i lv o nve s e D 
 
 
 
 
 16 
67 
 
1.5.6 SUBTRACT FROM (SUBTRAIA DE) 
 
Análogo ao ADD, mas ao invés de ADD TO, você faz um SUBTRACT FROM. 
 
DATA DIVISION. 
 WORKING-STORAGE SECTION. 
 01 V1 PIC 9(2) VALUE 3. 
 01 V2 PIC 9(2) VALUE 10. 
 01 V3 PIC 9(2). 
PROCEDURE DIVISION. 
 SUBTRACT V1 FROM V2. 
 SUBTRACT 2 FROM 10 GIVING V3. 
 DISPLAY V1 " " V2 " " V3. 
STOP RUN. 
 
O programa acima vai produzir o resultado: 03 07 08. 
 
1.5.7 MULTIPLY BY (MULTIPLIQUE POR) 
 
Multiplica valores. Muito semelhante ao ADD e ao SUBTRACT. 
DATA DIVISION. 
 WORKING-STORAGE SECTION. 
 01 V1 PIC 9(2) VALUE 2. 
 01 V2 PIC 9(2) VALUE 4. 
 01 V3 PIC 9(2). 
PROCEDURE DIVISION. 
 MULTIPLY V1 BY V2. 
 MULTIPLY V1 BY V2 GIVING V3. 
 DISPLAY V1 " " V2 " " V3. 
STOP RUN. 
 
1.5.8 DIVIDE INTO (DIVIDA EM) 
 
Divide valores. Nenhuma novidade: 
 
Inserir aqui o nome do Curso
www.estrategiaconcursos.com.br
Judah Reis
Aula 10
69360
 
r b m.o .cos s r ucn coiag e t a rst w.ew 
uagem de Programação p/ BRB (Analista TI) - Pós-Edital
w 
g n i L es a mest Sie d o tenm i lv o nve s e D 
 
 
 
 
 17 
67 
DATA DIVISION. 
 WORKING-STORAGE SECTION. 
 01 V1 PIC 9(2) VALUE 2. 
 01 V2 PIC 9(2) VALUE 8. 
 01 V3 PIC 9(2) VALUE 16. 
 01 V4 PIC 9(2). 
PROCEDURE DIVISION. 
 DIVIDE V1 INTO V2. 
 DIVIDE V1 INTO V3 GIVING V4. 
 DISPLAY V1 " " V2 " " V3 " " V4. 
STOP RUN. 
 
O programa acima vai produzir o resultado: 02 04 16 08. 
 
1.5.9 COMPUTE (CALCULE) 
 
COMPUTE é uma alternativa boa para escrever operações aritméticas de forma mais 
direta. Veja um exemplo abaixo: 
 
DATA DIVISION. 
 WORKING-STORAGE SECTION. 
 01 N1 PIC 9(2) VALUE 10 . 
 01 N2 PIC 9(2) VALUE 20. 
 01 N3 PIC 9(2) VALUE 30. 
 01 N4 PIC 9(2) VALUE 40. 
 
PROCEDURE DIVISION. 
 COMPUTE N4 = (N2/N1) + N3 * 2. 
 DISPLAY "N4:" N4. 
STOP RUN. 
 
No COMPUTE você consegue realizar diversas operações em uma mesma linha, 
sem a burocracia do ADD, SUBTRACT, MULTIPLY e DIVIDE. 
 
1.5.10 REDEFINES (REDEFINE) 
 
O verbo REDEFINES serve para criar uma variável a partir do conteúdo de outra 
variável. Por exemplo, se você tem uma variável que já está com o número de 
telefone completo da pessoa, uma outra variável pode ser definida para pegar 
somente o DDD da seguinte forma: 
 
Inserir aqui o nome do Curso
www.estrategiaconcursos.com.br
Judah Reis
Aula 10
69360
 
r b m.o .cos s r ucn coiag e t a rst w.ew 
uagem de Programação p/ BRB (Analista TI) - Pós-Edital
w 
g n i L es a mest Sie d o tenm i lv o nve s e D 
 
 
 
 
 18 
67 
DATA DIVISION. 
 WORKING-STORAGE SECTION. 
 01 TELEFONE PIC X(11). 
 01 DDD REDEFINES TELEFONE PIC 9(2). 
PROCEDURE DIVISION. 
 MOVE '61999998888' TO TELEFONE. 
 DISPLAY "TELEFONE : "TELEFONE. 
 DISPLAY "DDD : "DDD. 
 MOVE '11' TO DDD. 
 DISPLAY "TELEFONE : "TELEFONE. 
 DISPLAY "DDD : "DDD. 
STOP RUN. 
 
TELEFONE : 61999998888 
DDD : 61 
TELEFONE : 11999998888 
DDD : 11 
 
Perceba que o DDD foi redefinido da variável TELEFONE. Quando atribuímos 
61999998888 para telefone, a variável DDD assume o valor 61. Da mesma forma, 
quando atribuímos 11 para o DDD, TELEFONE muda para 11999998888. As duas 
variáveis apontam para a mesma estrutura de memória, mas tem definições 
diferentes. Para usar o verbo REDEFINES, tanto a variável original quanto a 
redefinida precisam estar no mesmo nível. 
 
1.5.11 RENAMES (RENOMEIA) 
Cria uma nova variável a partir do agrupamento de outras variáveis (1 ou mais). No 
exemplo abaixo, criamos TELEFONE a partir de PARTES-TELEFONE. 
 
DATA DIVISION. 
 WORKING-STORAGE SECTION. 
 01 PARTES-TELEFONE. 
 05 DDD PIC 9(2) VALUE 61. 
 05 PREFIXO PIC 9(5) VALUE 99999. 
 05 SUFIXO PIC 9(4) VALUE 8888. 
 66 TELEFONE RENAMES DDD THRU SUFIXO. 
PROCEDURE DIVISION. 
 DISPLAY "TELEFONE : "TELEFONE. 
STOP RUN. 
 
O programa acima produz o resultado: 61999998888. 
 
Inserir aqui o nome do Curso
www.estrategiaconcursos.com.br
Judah Reis
Aula 10
69360
 
r b m.o .cos s r ucn coiag e t a rst w.ew 
uagem de Programação p/ BRB (Analista TI) - Pós-Edital
w 
g n i L es a mest Sie d o tenm i lv o nve s e D 
 
 
 
 
 19 
67 
1.6 CONTROLE DE FLUXO 
1.6.1 IF (SE) 
É a instrução condicional SE, e tem a seguinte estrutura: 
 
IF condição THEN 
 código_se 
ELSE 
 código_else 
END-IF. 
 
 
Exemplo: 
DATA DIVISION. 
 WORKING-STORAGE SECTION. 
 01 NUM1 PIC 9(2) VALUE 10. 
 01 NUM2 PIC 9(2) VALUE 20. 
PROCEDURE DIVISION. 
 IF NUM1 > NUM2 THEN 
 DISPLAY "NUM1 É MAIOR" 
 ELSE 
 IF NUM1 = NUM2 THEN 
 DISPLAY "OS NÚMEROS SÃO IGUAIS" 
 ELSE 
 DISPLAY "NUM2 É MAIOR" 
 END-IF 
 END-IF. 
STOP RUN.O programa acima produz o seguinte output: NUM2 É MAIOR. Existem 2 coisas para 
se perceber no exemplo acima: 
1. Uma vez no bloco IF só usamos o “.” no END-IF. 
2. Não existe ELSE IF. Se existir mais de uma condição, devemos aninhar os IFs 
dentro de IFs, como fizemos no exemplo anterior. 
 
Os comparadores para operandos numéricos podem ser: 
• Comparação por Símbolo: > (maior), < (menor), >= (maior ou igual), <= 
(menor ou igual) ou = (igual). 
• Comparação por Palavras: IS [NOT] GREATER THAN, LESS THAN, EQUAL TO, 
GREATER THAN OR EQUAL, LESS THEN OR EQUAL. 
• Comparação de Sinal: IS [NOT] POSITIVE, NEGATIVE, ZERO. 
• Comparação de Classe: IS [NOT] NUMERIC, ALPHABETIC, ALPHABETIC-
LOWER, ALPHABETIC-UPPER. 
Inserir aqui o nome do Curso
www.estrategiaconcursos.com.br
Judah Reis
Aula 10
69360
 
r b m.o .cos s r ucn coiag e t a rst w.ew 
uagem de Programação p/ BRB (Analista TI) - Pós-Edital
w 
g n i L es a mest Sie d o tenm i lv o nve s e D 
 
 
 
 
 20 
67 
• Negação: NOT (se uma condição qualquer é verdadeira, NOT condição é 
falsa e vice-versa). 
 
Os comparadores podem ser combinados com as palavra-chave AND (e) e OR (ou). 
 
Se os operandos forem texto, as comparações de maior, menor e igual ainda valem 
mas são feitas de forma alfabética, da esquerda para direita (se o tamanho das 
variáveis for diferente, a menor é ‘completada’ com espaços em branco). 
 
1.6.2 EVALUATE (CALCULE) 
 
É a instrução condicional ESCOLHA CASO. Tem a seguinte estrutura: 
 
EVALUATE valor_esperado 
WHEN expressão_1 
 código_1 
WHEN expressão_2 
 código_2 
WHEN OTHER 
 código_default 
END-EVALUATE. 
 
 
Pode ser utilizado para testar uma variável, contra vários tipos: 
 
PROCEDURE DIVISION. 
 EVALUATE TIPO-CARRO 
 WHEN 'SEDAN' 
 DISPLAY 'É SEDAN' 
 WHEN 'COMPACTO' 
 DISPLAY 'É COMPACTO' 
 WHEN OTHER 
 DISPLAY 'É OUTRO' 
 END-EVALUATE. 
 
ou para fazer diversas condições que seriam IFs aninhados: 
Inserir aqui o nome do Curso
www.estrategiaconcursos.com.br
Judah Reis
Aula 10
69360
 
r b m.o .cos s r ucn coiag e t a rst w.ew 
uagem de Programação p/ BRB (Analista TI) - Pós-Edital
w 
g n i L es a mest Sie d o tenm i lv o nve s e D 
 
 
 
 
 21 
67 
PROCEDURE DIVISION. 
 EVALUATE TRUE 
 WHEN VAR1 > 0 
 DISPLAY 'É POSITIVO' 
 WHEN VAR1 < 0 
 DISPLAY 'É NEGATIVO' 
 WHEN OTHER 
 DISPLAY 'É ZERO' 
 END-EVALUATE. 
 
1.6.3 PERFORM 
 
Galera, ATENÇÃO: Esse é um dos tópicos que mais cai em prova! 
 
Existem 4 formas de usar o verbo PERFORM para realizar loops: 
• PERFORM TIMES. 
• PERFORM UNTIL. 
• PERFORM VARYING. 
• PERFORM THRU – Executa o código entre um parágrafo inicial e um final. 
 
PERFORM TIMES repete um comando ou parágrafo ‘N’ vezes. Por exemplo: 
 
PROCEDURE DIVISION. 
 PERFORM 3 TIMES 
 DISPLAY 'VAI APARECER 3 VEZES' 
 END-PERFORM. 
 
 PERFORM PARAGRAFO-A 5 TIMES. 
 STOP RUN. 
 
 PARAGRAFO-A. 
 DISPLAY 'Parágrafo A VAI APARECER 5 VEZES'. 
 
 
O código acima vai produzir o seguinte resultado: 
VAI APARECER 3 VEZES 
VAI APARECER 3 VEZES 
VAI APARECER 3 VEZES 
Parágrafo A VAI APARECER 5 VEZES 
Parágrafo A VAI APARECER 5 VEZES 
Parágrafo A VAI APARECER 5 VEZES 
Parágrafo A VAI APARECER 5 VEZES 
Parágrafo A VAI APARECER 5 VEZES 
 
Inserir aqui o nome do Curso
www.estrategiaconcursos.com.br
Judah Reis
Aula 10
69360
 
r b m.o .cos s r ucn coiag e t a rst w.ew 
uagem de Programação p/ BRB (Analista TI) - Pós-Edital
w 
g n i L es a mest Sie d o tenm i lv o nve s e D 
 
 
 
 
 22 
67 
PERFORM UNTIL repete um comando ou parágrafo até que uma condição seja 
atendida (verdadeira). 
DATA DIVISION. 
 WORKING-STORAGE SECTION. 
 01 QDE PIC 9(2) VALUE 1. 
PROCEDURE DIVISION. 
 PERFORM PARA-A UNTIL QDE > 3. 
 STOP RUN. 
 
 PARA-A. 
 DISPLAY 'ITERACAO: 'QDE. 
 ADD 1 TO QDE. 
 
 
Vai produzir o seguinte resultado: 
ITERACAO: 01 
ITERACAO: 02 
ITERACAO: 03 
 
PERFORM VARYING repete um comando ou parágrafo com uma variável de 
controle. O código anterior poderia ser reescrito para usar PERFORM VARYING da 
seguinte maneira: 
 
PROCEDURE DIVISION. 
 PERFORM PARA-A VARYING QDE FROM 1 BY 1 UNTIL QDE > 3. 
 STOP RUN. 
 
 PARA-A. 
 DISPLAY 'ITERACAO: 'QDE. 
 
A vantagem de usar o PERFORM VARYING é que ele já prevê uma variável de 
controle no loop, o que deixa o código mais limpo que o PERFORM UNTIL (nos 
casos em que uma variável de controle é necessária, é claro). 
 
Tanto o UNTIL quanto o VARYING podem definir se o teste será feito ANTES da 
execução quanto depois. Isso é definido da seguinte forma: 
 
PERFORM PARA-A WITH TEST BEFORE UNTIL QDE>3. (teste antes) 
PERFORM PARA-A WITH TEST AFTER UNTIL QDE>3. (teste depois) 
 
Também é possível fazer LOOPs de 2 ou mais níveis aninhando os loops através da 
palavra-chave AFTER. 
Inserir aqui o nome do Curso
www.estrategiaconcursos.com.br
Judah Reis
Aula 10
69360
 
r b m.o .cos s r ucn coiag e t a rst w.ew 
uagem de Programação p/ BRB (Analista TI) - Pós-Edital
w 
g n i L es a mest Sie d o tenm i lv o nve s e D 
 
 
 
 
 23 
67 
 PERFORM PARA-A VARYING A FROM 1 BY 1 UNTIL A GREATER THAN 3 
 AFTER B FROM 1 BY 1 UNTIL B GREATER THAN 2 
 
O código acima vai iterar com A indo de 1 até 3 (sai com 4) e, para cada valor de A, 
vai iterar B de 1 até 2 (sai com 3). Ou seja, vai iterar para: 
A=1, B=1 
A=1, B=2 
A=2, B=1 
A=2, B=2 
A=3, B=1 
A=3, B=2 
 
Quando o programa sair, o valor de A vai valer 4 (condição de saída), mas vai sair 
com B valendo 1 (condição de inicialização de B, que não vai executar por A está 
valendo 4). 
 
PERFORM THRU é a quarta e última forma de iterar, e recebe como parâmetro um 
parágrafo de início, e um parágrafo de fim. Por exemplo: 
 
 PERFORM B THRU D. 
 STOP RUN. 
 
 A. 
 DISPLAY "A". 
 B. 
 DISPLAY "B". 
 C. 
 DISPLAY "C". 
 D. 
 DISPLAY "D". 
 E. 
 DISPLAY "E". 
 
Vai produzir o resultado: 
B 
C 
D 
 
Apenas como observação, se o comando STOP RUN não fosse colocado logo após 
o PERFORM, todos os parágrafos seriam executados após o PERFORM. Veja como 
ficaria: 
Inserir aqui o nome do Curso
www.estrategiaconcursos.com.br
Judah Reis
Aula 10
69360
 
r b m.o .cos s r ucn coiag e t a rst w.ew 
uagem de Programação p/ BRB (Analista TI) - Pós-Edital
w 
g n i L es a mest Sie d o tenm i lv o nve s e D 
 
 
 
 
 24 
67 
 PERFORM B THRU D. 
 
 A. 
 DISPLAY "A". 
 B. 
 DISPLAY "B". 
 C. 
 DISPLAY "C". 
 D. 
 DISPLAY "D". 
 E. 
 DISPLAY "E". 
 
E o resultado: 
B 
C 
D 
A 
B 
C 
D 
E 
 
1.7 MANIPULAÇÃO E PESQUISA EM TABELAS 
Já falamos que COBOL permite a criação de estruturas de repetição durante a 
declaração de variáveis usando a palavra OCCURS. Essas estruturas também são 
conhecidas como tabelas. 
 
Veja no exemplo abaixo a definição de uma tabela com 1 dimensão e 2 dimensões: 
 
DATA DIVISION. 
 WORKING-STORAGE SECTION. 
 
 01 TAB-1DIMENSAO. 
 05 REGISTRO PIC A(5) VALUE 'TESTE' OCCURS 5 TIMES. 
 
 01 TAB-2DIMENSOES. 
 05 DIM1 OCCURS 2 TIMES. 
 10 DIM2 PIC A(6) VALUE 'TESTE2' OCCURS 3 TIMES. 
 
PROCEDURE DIVISION. 
 DISPLAY "1 DIMENSÃO : "TAB-1DIMENSAO. 
 DISPLAY "2 DIMENSÕES: "TAB-2DIMENSOES. 
STOP RUN. 
 
Inserir aqui o nome do Curso
www.estrategiaconcursos.com.br
Judah Reis
Aula 10
69360
 
r b m.o .cos s r ucn coiag e t a rst w.ew 
uagem de Programação p/ BRB (Analista TI) - Pós-Edital
w 
g n i L es a mest Sie d o tenm i lv o nve s e D 
 
 
 
 
 25 
67 
 O resultado da execução desse programa é: 
1 DIMENSÃO : TESTETESTETESTETESTETESTE 
2 DIMENSÕES: TESTE2TESTE2TESTE2TESTE2TESTE2TESTE2 
 
Você acessa os dados de uma tabela a partir de um subscript colocando o índice 
da posição entre parêntesis, sendo que o índice começa em 1. Para acessar o 1º 
elemento da TAB-1DIMENSAO, temos TAB-1DIMENSAO(1). Para acessar o último 
elementode TAB-2DIMENSOES temos TAB-2DIMENSOES(2,3). 
 
Uma tabela em COBOL nada mais é do que uma forma de acessar dados 
sequenciais através de subscript. Por isso você consegue mandar mostrar todos os 
dados de uma vez através da variável, bem como atribuir todos os valores da tabela 
com uma única atribuição. Veja o exemplo: 
DATA DIVISION. 
 WORKING-STORAGE SECTION. 
 01 TAB. 
 05 REG1 OCCURS 2 TIMES. 
 10 REG2 PIC A(2) OCCURS 3 TIMES. 
PROCEDURE DIVISION. 
 MOVE '112233445566' TO TAB. 
 DISPLAY 'TAB : 'TAB. 
 DISPLAY 'REG1(1) : 'REG1(1). 
 DISPLAY 'REG2(1, 1): 'REG2(1, 1). 
 DISPLAY 'REG2(1, 2): 'REG2(1, 2). 
 DISPLAY 'REG2(1, 3): 'REG2(1, 3). 
 DISPLAY 'REG1(2) : 'REG1(2). 
 DISPLAY 'REG2(2, 1): 'REG2(2, 1). 
 DISPLAY 'REG2(2, 2): 'REG2(2, 2). 
 DISPLAY 'REG2(2, 3): 'REG2(2, 3). 
STOP RUN. 
 
O programa acima produz o resultado: 
TAB : 112233445566 
REG1(1) : 112233 
REG2(1, 1): 11 
REG2(1, 2): 22 
REG2(1, 3): 33 
REG1(2) : 445566 
REG2(2, 1): 44 
REG2(2, 2): 55 
REG2(2, 3): 66 
 
Veja que ao mover a string ‘112233445566’ para a variável TAB preenchemos todas 
as suas posições. 
 
Inserir aqui o nome do Curso
www.estrategiaconcursos.com.br
Judah Reis
Aula 10
69360
 
r b m.o .cos s r ucn coiag e t a rst w.ew 
uagem de Programação p/ BRB (Analista TI) - Pós-Edital
w 
g n i L es a mest Sie d o tenm i lv o nve s e D 
 
 
 
 
 26 
67 
Podemos criar índices para uma tabela usando o termo INDEXED BY. Também já 
falamos nisso anteriormente (aqui). 
 
Existem 2 métodos de pesquisas em tabelas – SEARCH e SEARCHALL. SEARCH faz 
a busca linear sobre qualquer tabela. Veja o exemplo abaixo: 
 
DATA DIVISION. 
 WORKING-STORAGE SECTION. 
 01 TAB. 
 05 REC OCCURS 3 TIMES INDEXED BY I. 
 10 COD PIC 9. 
 10 NOME PIC AAAAA. 
PROCEDURE DIVISION. 
 MOVE '1 ANA2 BIA3 CAIO' TO TAB. 
 SET I TO 1. 
 SEARCH REC 
 AT END DISPLAY 'NÃO ENCONTREI!!!' 
 WHEN NOME(I) = ' CAIO' 
 DISPLAY 'ACHEI O CAIO NA POSICAO 'I 
 END-SEARCH. 
STOP RUN. 
 
O exemplo acima produz o resultado ACHEI O CAIO NA POSICAO +000000003 
 
SEARCH possui uma cláusula AT END para ser executada caso nenhum registro seja 
encontrado - DISPLAY 'NÃO ENCONTREI!!!' no exemplo. Também uma cláusula que 
será executada caso . O teste é feito através do WHEN, e o as linhas que seguem 
são o código executado caso a condição de satisfação seja realizada. 
 
A grande diferença do SEARCH para o SEARCHALL é que os registros da tabela em 
SEARCHALL precisam estar ordenados de forma crescente (ASCENDING) ou 
decrescente (DESCENDING). Veja o exemplo abaixo: 
Inserir aqui o nome do Curso
www.estrategiaconcursos.com.br
Judah Reis
Aula 10
69360
 
r b m.o .cos s r ucn coiag e t a rst w.ew 
uagem de Programação p/ BRB (Analista TI) - Pós-Edital
w 
g n i L es a mest Sie d o tenm i lv o nve s e D 
 
 
 
 
 27 
67 
DATA DIVISION. 
 WORKING-STORAGE SECTION. 
 01 TAB. 
 05 REC OCCURS 3 TIMES ASCENDING KEY IS COD INDEXED BY I. 
 10 COD PIC 9. 
 10 NOME PIC AAAAA. 
PROCEDURE DIVISION. 
 MOVE '1 ANA2 BIA3 CAIO' TO TAB. 
 SEARCH ALL REC 
 AT END DISPLAY 'NÃO ENCONTREI!!!' 
 WHEN COD(I) = ' CAIO' 
 DISPLAY 'ACHEI O CAIO NA POSICAO 'I 
 END-SEARCH. 
STOP RUN. 
 
A busca binária é, em média, muito mais rápida que a busca sequencial, mas tem 
duas limitações: a coleção deve estar ordenada por uma chave (KEY), e a 
comparação sempre deve ser através da chave (veja que a chave do nosso exemplo 
é COD, e o teste é feito exatamente quando COD(I) = “ CAIO”). Uma observação 
muito importante: a declaração de ASCENDING/DESCENDING KEY não faz a 
ordenação da estrutura!!! Ela simplesmente “declara” que está ordenado! Se a 
estrutura de fato não estiver ordenada, a busca simplesmente não vai funcionar. 
 
1.8 MANIPULAÇÃO DE ARQUIVOS 
Pessoal, muito antes dos bancos SQL existirem, já existia a necessidades de sistemas 
trabalharem com armazenamento. Se você precisa armazenar um dado, e não tem 
um banco, provavelmente deve fazer isso em um arquivo estruturado – um arquivo 
em que informações são salvas em um layout. O layout é definido pelo próprio 
programador, que diz que cada registro vai ter N caracteres, sendo que nos 
primeiros 3 caracteres eu vou guardar um identificador, os próximos 10 são o nome 
da pessoa, os 8 seguintes são a data de nascimento, e assim por diante. A partir 
dessa regra, é possível gravar e buscar registros dentro do arquivo. 
 
COBOL se dá muito bem com a manipulação de arquivos de dados. 
 
Inserir aqui o nome do Curso
www.estrategiaconcursos.com.br
Judah Reis
Aula 10
69360
 
r b m.o .cos s r ucn coiag e t a rst w.ew 
uagem de Programação p/ BRB (Analista TI) - Pós-Edital
w 
g n i L es a mest Sie d o tenm i lv o nve s e D 
 
 
 
 
 28 
67 
 
Figura 1 - de https://www.tutorialspoint.com/pg/cobol/cobol_file_handling.htm 
Imagine que os registros da figura acima são gravados sequencialmente em um 
arquivo. Para utilizá-lo, você precisa declarar essa dependência no ENVIRONMENT 
DIVISION, dentro do FILE-CONTROL SECTION. Veja o exemplo abaixo: 
 
1: ENVIRONMENT DIVISION. 
2: INPUT-OUTPUT SECTION. 
3: FILE-CONTROL. 
4: SELECT ESTUDANTE ASSIGN TO 'estudantes.txt' 
5: ORGANIZATION IS LINE SEQUENTIAL. 
6: 
7: DATA DIVISION. 
8: FILE SECTION. 
9: FD ESTUDANTE. 
10: 01 ESTUDANTE-ARQUIVO 
11: 05 MATRICULA PIC 9(5). 
12: 05 NOME PIC A(50). 
13: 05 CURSO PIC X(25). 
 
As linhas 4-6 declaram que existe um arquivo com o layout ESTUDANTE (declarada 
nas linhas 9-13), armazenados no arquivo “estudantes.txt”. Veja que a declaração do 
arquivo acontece no ENVIRONMENT DIVISION, INPUT-OUTPUT SECTION, mas só 
é feita a referência ao layout. A declaração de fato do layout acontece no DATA 
DIVISION, FILE SECTION. O exemplo também declara o tipo de arquivo como 
sequencial, o que quer dizer que não existe nenhuma chave ordenada. Os registros 
estão linearmente um após o outro, sem nenhum índice. 
 
Além do tipo sequencial, existem outros 2 tipos randômicos (RANDOM) de arquivos: 
indexados (INDEXED) e relativos (RELATIVE). No indexado, os registros são 
Inserir aqui o nome do Curso
www.estrategiaconcursos.com.br
Judah Reis
Aula 10
69360
 
r b m.o .cos s r ucn coiag e t a rst w.ew 
uagem de Programação p/ BRB (Analista TI) - Pós-Edital
w 
g n i L es a mest Sie d o tenm i lv o nve s e D 
 
 
 
 
 29 
67 
organizados por um campo denominado chave (KEY). No relativo, os arquivos são 
organizados por uma chave relativa. No exemplo acima, se o arquivo fosse indexado 
pela chave MATRICULA, teríamos: 
 
3: FILE-CONTROL. 
4: SELECT ESTUDANTE ASSIGN TO 'estudantes.txt' 
5: ORGANIZATION IS INDEXED 
6: ACCESS MODE IS RANDOM 
7: RECORD KEY IS MATRICULA 
 
 
 
 
 
 
Depois da declaração do arquivo e do layout, é preciso, de fato, abrir o arquivo 
(OPEN) para ler (READ) ou escrever (WRITE) algum registro. 
 
Para abrir um arquivo em COBOL utilizamos o verbo OPEN na PROCEDURE 
DIVISION, com a seguinte sintaxe: 
 
OPEN <modo> <nome_do_arquivo>. 
 
Os modos são: 
• INPUT - Abre um arquivo preexistente para somente para leitura. 
• OUTPUT - Abre um arquivo para escrita a partir do início. 
• EXTEND - Abre um arquivo para escrita, colocando novos registros no final. 
• I-O - Abre um arquivo para leitura e escrita. 
 
O verbo READ vai ser usado para registro dos arquivos. Veja o exemplo abaixo: 
 
READ <nome_do_arquivo> NEXT RECORD INTO estrutra-arquivo 
 AT END DISPLAY 'alguma coisa' 
 NOT AT END DISPLAY 'li a estrutra:' estrutura-arquivo 
END-READ. 
 
No exemplo, estrutura-arquivo é um layout definido em FILE SECTION. Para cada 
registro lido, será executado o trecho “NOT AT END”. Ao final do arquivo, será 
executado o trecho “AT END”. 
 
Inserir aqui o nome do Curso
www.estrategiaconcursos.com.brJudah Reis
Aula 10
69360
 
r b m.o .cos s r ucn coiag e t a rst w.ew 
uagem de Programação p/ BRB (Analista TI) - Pós-Edital
w 
g n i L es a mest Sie d o tenm i lv o nve s e D 
 
 
 
 
 30 
67 
O verbo WRITE é usado para escrever registros dentro de um arquivo. A estrutura 
segue o exemplo a seguir: 
 
WRITE estrutura-arquivo 
END-WRITE. 
 
Este exemplo escreve um registro em um arquivo sequencial (sem chaves). Se o 
arquivo for indexado por alguma chave, é possível executar trechos de código para 
o caso de chave válida ou inválida: 
WRITE estrutura-arquivo 
 INVALID KEY <a chave era inválida... execute algo> 
 NOT INVALID KEY <a chave era válida. Execute algo> 
END-WRITE. 
 
Se você abrir um arquivo no modo I-O (leitura e escrita), você pode usar o verbo 
REWRITE logo depois de um READ para sobrescrever o registro lido. Isso só serve 
para reescrever um registro lido, e tem a mesma sintaxe de um WRITE. O mesmo 
vale para o verbo DELETE, que apaga o último registro lido. 
 
O verbo START vai posicionar o ponteiro de leitura/escrita do arquivo a partir de 
uma condição. Veja um exemplo: 
 
START <nome_do_arquivo> KEY IS <= 100 
 INVALID KEY DISPLAY 'A chave fornecida não é válida' 
 NOT INVALID KEY DISPLAY 'Ponteiro de acesso atualizado' 
END-START. 
 
O código acima posiciona o ponteiro no local onde a chave do registro encontrada 
for menor ou igual a 100. 
 
Se o verbo para abrir é OPEN, é apenas lógico que o verbo para fechar o arquivo 
se chame CLOSE. A sintaxe, como é de se esperar é: 
 
CLOSE <nome_do_arquivo>. 
 
1.9 SUBROTINAS 
Pessoal, uma das primeira necessidades que temos que resolver em uma linguagem 
de programação é como “modularizar”. Se um algoritmo é executado em diversos 
momentos do meu sistema, é fundamental que esse trecho de código possa ser 
mantido como uma parte isolada, e invocado sempre que preciso (não faria lógica 
Inserir aqui o nome do Curso
www.estrategiaconcursos.com.br
Judah Reis
Aula 10
69360
 
r b m.o .cos s r ucn coiag e t a rst w.ew 
uagem de Programação p/ BRB (Analista TI) - Pós-Edital
w 
g n i L es a mest Sie d o tenm i lv o nve s e D 
 
 
 
 
 31 
67 
reescrever sempre o mesmo algoritmo, especialmente no mundo de recursos 
escassos em que surgiu o COBOL). Assim, para que um programa chame outro, 
existe o verbo CALL. 
 
Veja o exemplo abaixo. 
 
Programa que vai chamar (invocador): 
1: IDENTIFICATION DIVISION. 
2: PROGRAM-ID. TESTA-CALL. 
3: 
4: DATA DIVISION. 
5: WORKING-STORAGE SECTION. 
6: 01 MINHA-VAR PIC X(30) VALUE 'VALOR INICIAL'. 
7: 
8: PROCEDURE DIVISION. 
9: DISPLAY 'VALOR MINHA-VAR ANTES : ' MINHA-VAR. 
10: CALL 'MUDA-PAR-ENTRADA' USING MINHA-VAR. 
11: DISPLAY 'VALOR MINHA-VAR DEPOIS: ' MINHA-VAR. 
12: STOP RUN. 
 
Programa que será chamado (invocado): 
1: IDENTIFICATION DIVISION. 
2: PROGRAM-ID. MUDA-PAR-ENTRADA. 
3: 
4: DATA DIVISION. 
5: LINKAGE SECTION. 
6: 01 PAR-ENTRADA PIC X(30). 
7: 
8: PROCEDURE DIVISION USING PAR-ENTRADA. 
9: DISPLAY 'RECEBI 'PAR-ENTRADA. 
10: MOVE 'MUDEI PARA SAIDA' TO PAR-ENTRADA. 
11: EXIT PROGRAM. 
 
Resultado do programa: 
VALOR MINHA-VAR ANTES : VALOR INICIAL 
RECEBI VALOR-INICIAL 
VALOR MINHA-VAR DEPOIS: MUDEI PARA SAIDA 
 
Vejamos alguns detalhes desses programas, e como eles estão relacionados. 
Primeiramente veja que o comando CALL na linha 10 do arquivo “invocador” passa 
como parâmetro da chamada o nome do arquivo na linha 2 do arquivo “invocado” 
(MUDA-PAR-ENTRADA). Veja também que, para receber um parâmetro como 
entrada, o programa invocado precisou definir a variável PAR-ENTRADA na 
LINKAGE-SECTION (sessão de linkagem) e depois listar declaração da PROCEDURE -
Inserir aqui o nome do Curso
www.estrategiaconcursos.com.br
Judah Reis
Aula 10
69360
 
r b m.o .cos s r ucn coiag e t a rst w.ew 
uagem de Programação p/ BRB (Analista TI) - Pós-Edital
w 
g n i L es a mest Sie d o tenm i lv o nve s e D 
 
 
 
 
 32 
67 
DIVISION (linha 8 do segundo arquivo). Por último, veja que o conteúdo da variável 
foi modificado dentro da subrotina, mas isso se refletiu na variável inicial. Em outras 
palavras, por padrão, o COBOL faz passagem de parâmetros por referência, o que 
significa que qualquer modificação nas variáveis dentro das sub-rotinas vai mudar 
o seu valor externo. 
 
Para evitar que a subrotina invocada modifique o valor inicial da variável, você pode 
mandar o programa passar uma cópia da variável, e não a variável em si, usando: 
 
10: CALL 'MUDA-PAR-ENTRADA' USING BY CONTENT MINHA-VAR. 
 
Pronto! Se agora você alterar o valor da variável passada dentro do programa 
MUDA-PAR-ENTRADA, o valor de MINHA-VAR no programa inicial não vai mudar. 
 
Por último, para fecharmos o conteúdo de sub-rotinas, vale citar que ao compilar o 
seu programa você pode indicar se vai querer fazer a chamada estática ou dinâmica. 
Se a chamada for dinâmica, significa que os dois programa serão independentes, e 
o link só será feito em tempo de execução. Se você compilar o seu programa com 
a opção estática, significa que o compilador vai “puxar” todo o código da sub-rotina 
e inserir no mesmo programa em tempo de compilação, ou seja, não haverá 
necessidade de fazer link na hora da execução, pois tudo será carregado junto no 
executável do programa principal. 
 
10 Linguagem JCL (Job Control Language) e Procedure. 
 10.1 Interpretação de trechos de código. 
 10.2 Cartões JOB e PROC. 
 10.3 Parâmetros para cartões EXEC. 
 10.4 Cartão DD: parâmetros, cartões especiais, definição e utilização de 
arquivos sequenciais. 
 10.5 Cartões especiais IF, ELSE e ENDIF. 
 
 
Inserir aqui o nome do Curso
www.estrategiaconcursos.com.br
Judah Reis
Aula 10
69360
 
r b m.o .cos s r ucn coiag e t a rst w.ew 
uagem de Programação p/ BRB (Analista TI) - Pós-Edital
w 
g n i L es a mest Sie d o tenm i lv o nve s e D 
 
 
 
 
 33 
67 
1.10 QUESTÕES COMENTADAS: COBOL 
1. CESPE / Auditor Municipal de Controle Interno (CGM João Pessoa) / 2018 / 
Desenvolvimento de Sistemas / Tecnologia da Informação / 
 
Julgue o seguinte item, relativo aos servidores de aplicação e às linguagens de 
implementação de regras de negócio. 
 
Na codificação de um programa em COBOL, a ser compilado por um compilador 
rígido com as regras de codificação da linguagem, todos os nomes de divisão, de 
seção e de parágrafos precisam começar na Area B, e todas as demais sentenças, 
na Area A. 
 
Gabarito: ERRADO. 
 
É exatamente ao contrário. 
 
Os nomes de divisão, seção e parágrafos precisam começar na Area A, entre as 
colunas 8 e 11. Para ser um sentença, precisa começar na área B, a partir do 
caractere 12, (ou seja, manter as posições 8 a 11 vazias). 
 
Cada linha de um comando em COBOL contém 80 caracteres, com a seguinte 
divisão: 
 
Colunas 1-6 - Numeração da Linha 
Coluna 7 - Indicador (comentário, continuação, etc) 
Colunas 8-11 - Area A 
Coluna 12-72 - Area B 
Colunas 73-80 - Área de identificação (uso livre) 
 
 
 
2. CESPE / Perito Criminal Federal / 1997 / / Área 3 
Considerando os comandos COBOL apresentados, julgue os valores fornecidos para 
a variável ITEM em cada execução do parágrafo ROTINA. 
 
No comando 
 
PERFORM ROTINA VARYING ITEM FROM 10 BY -3 
 UNTIL ITEM LESS THAN -4 
Inserir aqui o nome do Curso
www.estrategiaconcursos.com.br
Judah Reis
Aula 10
69360
 
r b m.o .cos s r ucn coiag e t a rst w.ew 
uagem de Programação p/ BRB (Analista TI) - Pós-Edital
w 
g n i L es a mest Sie d o tenm i lv o nve s e D 
 
 
 
 
 34 
67 
 
a variável ITEM assume os valores 1 0, 7, 4. 1, -2 e a execução para com ITEM = -5. 
 
 
Gabarito: CERTO. 
 
PERFORM VARYING repete um comando ou parágrafo com uma variável de controle 
até que uma condição seja atendida. Assim, o comando acima vai iterarsobre a 
variável ITEM com valor inicial 10, de -3 em -3, até que esse valor seja menor que -4. 
Ou seja: 10, 7, 4, 1, -2 e, quando ITEM decrescer para -5, o loop será interrompido. 
 
 
3. CESPE / Perito Criminal Federal / 1997 / / Área 3 
No comando 
 
PERFORM ROTINA VARYING A FROM 2 BY 3 UNTIL A GREATER THAN 7 
 AFTER B FROM 5 BY -1 UNTIL B LESS THAN 3 
 AFTER ITEM FROM 1 BY 1 UNTIL ITEM GREATER THAN 3 
 
a variável ITEM assume os valores 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3 e a 
execução para com ITEM = 1. 
 
Gabarito: CERTO. 
 
PERFORM VARYING repete um comando ou parágrafo com uma variável de controle 
até que uma condição seja atendida. Quando combinado com AFTER, os loops são 
aninhados. Ou seja: 
• A vai iniciar com valor 2, e crescer de 3 em 3 até que seja maior de 7. Ou seja: 
2, 5, 8 (não executa para 8). 
• Para cada valor de A, B vai iniciar com valor 5, e decrescer de -1 em -1 até que 
seja menor que 3. Ou seja: 5, 4, 3, 2 (não executa para 2). 
• Para cada valor de B, ITEM vai iniciar com valor 1, e crescer de 1 em 1, até que 
seja maior que 3. Ou seja: 1, 2, 3, 4 (não executa para 4). 
Em outras palavras, vamos executar: 
A=2 B=5 ITEM=1 
A=2 B=5 ITEM=2 
A=2 B=5 ITEM=3 
A=2 B=4 ITEM=1 
A=2 B=4 ITEM=2 
A=2 B=4 ITEM=3 
A=2 B=3 ITEM=1 
A=2 B=3 ITEM=2 
Inserir aqui o nome do Curso
www.estrategiaconcursos.com.br
Judah Reis
Aula 10
69360
 
r b m.o .cos s r ucn coiag e t a rst w.ew 
uagem de Programação p/ BRB (Analista TI) - Pós-Edital
w 
g n i L es a mest Sie d o tenm i lv o nve s e D 
==10ef0==
 
 
 
 
 35 
67 
A=2 B=3 ITEM=3 
A=5 B=5 ITEM=1 
A=5 B=5 ITEM=2 
A=5 B=5 ITEM=3 
A=5 B=4 ITEM=1 
A=5 B=4 ITEM=2 
A=5 B=4 ITEM=3 
A=5 B=3 ITEM=1 
A=5 B=3 ITEM=2 
A=5 B=3 ITEM=3 
 
Acompanhando a execução do programa, temos ITEM valendo 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 
2, 3, 1, 2, 3, 1, 2, 3. No final, A vale 8, e o loop termina, mas não antes de incializar as 
variáveis B com valor 5 e ITEM com 1. Portanto a execução para com A=8, B=5 e 
ITEM=1. Item CORRETO. 
 
 
 
4. CESPE / Perito Criminal Federal / 1997 / / Área 3 
No comando 
 
PERFORM ROTINA VARYING ITEM FROM 5 BY 5 
 UNTIL ITEM GREATER THAN 25 
 
a variável ITEM assume os valores 5 , 10, 15 , 20, 25 e a execução para com ITEM = 
30. 
 
 
Gabarito: CERTO. 
 
PERFORM VARYING repete um comando ou parágrafo com uma variável de controle 
até que uma condição seja atendida. No caso, ITEM vai do valor inicial 5, crescendo de 
5 em 5 (BY 5), até que ITEM seja maior que 25. Ou seja 5, 10, 15, 20, 25 e termina 
quando ITEM vale 30. Item correto. 
 
 
5. CESPE / Perito Criminal Federal / 1997 / / Área 3 
No comando 
 
PERFORM ROTINA VARYING ITEM FROM 2 BY 2 
 UNTIL ITEM GREATER THAN 8 
 AFTER A FROM 5 BY - 1 
 UNTIL A LESS THAN 4 
Inserir aqui o nome do Curso
www.estrategiaconcursos.com.br
Judah Reis
Aula 10
69360
 
r b m.o .cos s r ucn coiag e t a rst w.ew 
uagem de Programação p/ BRB (Analista TI) - Pós-Edital
w 
g n i L es a mest Sie d o tenm i lv o nve s e D 
 
 
 
 
 36 
67 
 
a variável ITEM assume os valores 2, 2, 4, 4, 6, 6, 8, 8 e a execução termina com 
ITEM = 8. 
 
 
Gabarito: ERRADO. 
 
PERFORM VARYING repete um comando ou parágrafo com uma variável de 
controle até que uma condição seja atendida. Quando combinado com AFTER, 
os loops são aninhados. No caso, ITEM vai do valor inicial 2, crescendo de 2 em 
2 (BY 2), até que ITEM seja maior que 8. Ou seja 2, 4, 6, 8 e termina quando 
ITEM vale 10. Para cada valor de ITEM, A vai variar do valor inicial 5, de -1 em -1 
até que seja menor que 4. Ou seja, A vai valer 5, 4, e termina quando A vale 3. 
ITEM=2, A=5 
ITEM=2, A=4 
ITEM=4, A=5 
ITEM=4, A=4 
ITEM=6, A=5 
ITEM=6, A=4 
ITEM=8, A=5 
ITEM=8, A=4 
 
Ou seja, a variável ITEM assume os valores, 2, 2, 4, 4, 6, 6, 8, 8. Mas termina com 
ITEM=10, justamente a condição de saída. Portanto, item errado. 
 
 
6. VUNESP / Profissional Básico (BNDES) / 2002 / / Análise de Sistemas – 
Desenvolvimento 
A divisão de um programa escrito na linguagem Cobol, que armazena todos os 
dados a serem processados ou manipulados pelo programa durante o 
processamento é a: 
 
a) Identification Division. 
b) Data Division. 
c) Environment Division. 
d) Procedure Division. 
e) Screen Division. 
 
Gabarito: LETRA B. 
 
Inserir aqui o nome do Curso
www.estrategiaconcursos.com.br
Judah Reis
Aula 10
69360
 
r b m.o .cos s r ucn coiag e t a rst w.ew 
uagem de Programação p/ BRB (Analista TI) - Pós-Edital
w 
g n i L es a mest Sie d o tenm i lv o nve s e D 
 
 
 
 
 37 
67 
a) Identification Division. - ERRADO. É o local onde se identifica o programa. 
b) Data Division. - CERTO. Define os dados que serão utilizados no programa, 
bem como sua estrutura (tamanho, nome, tipo, etc.) 
c) Environment Division. - ERRADO. É usado para declarar as relações com o 
ambiente de execução, entradas e saídas de dados 
d) Procedure Division. - ERRADO. É aonde você coloca o seu algoritmo em si, a 
lógica do seu programa. 
e) Screen Division.- ERRADO. Não existe! 
 
 
7. VUNESP / Profissional Básico (BNDES) / 2002 / / Análise de Sistemas – 
Desenvolvimento 
Um programa escrito na linguagem é composto de divisões. O 
define os arquivos a serem utilizados no programa, a sua organização, meio de 
acesso, chaves primárias e/ou secundárias. 
 
Assinale a alternativa que completa, correta e respectivamente, os espaços do texto 
a) Cobol; quatro; Environment Division 
b) Cobol; cinco; Identification Division 
c) Natural 3; cinco; Environment Division 
d) IBM s/360; quatro; Data Division 
e) IBM s/360; cinco; Data Division 
 
Gabarito: Letra A. 
 
O examinador aparentemente não conhece direito a linguagem COBOL. Aí 
entrou no GOOGLE, digitou "apostila de COBOL" e achou o 
link https://www.ebah.com.br/content/ABAAABgaYAC/apostila-cobol. Pegou 
uma frase no meio, e usou a mesma técnica que sua professora do ensino 
fundamental usava... ainda bem que ele não mandou ligar os pontos! 
 
De qualquer maneira, temos 4 divisões: 
• IDENTIFICATION DIVISION é o local onde se identifica o programa. 
• ENVIRONMENT DIVISION é usado para declarar as relações com o 
ambiente de execução, arquivos e outras entradas e saídas de dados . 
• DATA DIVISION define os dados que serão utilizados no programa, bem 
como sua estrutura (tamanho, nome, tipo, etc.). 
Inserir aqui o nome do Curso
www.estrategiaconcursos.com.br
Judah Reis
Aula 10
69360
 
r b m.o .cos s r ucn coiag e t a rst w.ew 
uagem de Programação p/ BRB (Analista TI) - Pós-Edital
w 
g n i L es a mest Sie d o tenm i lv o nve s e D 
 
 
 
 
 38 
67 
• PROCEDURE DIVISION é aonde você coloca o seu algoritmo em si, a 
lógica do seu programa. 
Portanto, letra A. 
 
8. CESGRANRIO / Técnico Bancário Novo (CEF) / 2012 / / Tecnologia da 
Informação 
Considere as três estruturas abaixo, selecionadas para representar a organização 
dos campos do registro de um arquivo em um programa de controle de 
empréstimos de livros de uma biblioteca, elaborado em COBOL. 
 
(vide figura abaixo) 
 
Sobre essas estruturas, pode-se concluir que: 
a) L1 e L2 representam a mesma organização física de campos do arquivo ARQ1. 
b) L1 e L3 representam a mesma organização física de campos do arquivo ARQ1. 
c) L2 e L3 representam a mesma organização física de campos do arquivo ARQ1. 
d) L1, L2 e L3 representam a mesma organização física de campos do arquivo ARQ1. 
e) o registro REG de ARQ1(layout L2) possui 192 caracteres. 
Inserir aqui o nome do Curso
www.estrategiaconcursos.com.br
Judah Reis
Aula 10
69360
 
r b m.o .cos s r ucn coiag e t a rst w.ew 
uagem de Programação p/ BRB (Analista TI) - Pós-Edital
w 
g n i L es a mest Sie d o tenm i lv o nve s e D 
 
 
 
 
 39 
67 
 
 
Gabarito: Letra A, mas eu achoque deveria ser anulada... 
 
Pessoal, eu não sou especialista em COBOL, mas para mim temos um erro nessa 
questão. O comando REDEFINES permite que uma mesma variável seja reutilizada com 
outra semântica. Por exemplo: 
 
01 TELEFONE PIC X(11) VALUE '11999998888'. 
01 PARTES REDEFINES TELEFONE. 
 03 DDD PIC X(2). 
 03 PREFIXO PIC X(5). 
 03 SUFIXO PIC X(4). 
 
Inserir aqui o nome do Curso
www.estrategiaconcursos.com.br
Judah Reis
Aula 10
69360
 
r b m.o .cos s r ucn coiag e t a rst w.ew 
uagem de Programação p/ BRB (Analista TI) - Pós-Edital
w 
g n i L es a mest Sie d o tenm i lv o nve s e D 
 
 
 
 
 40 
67 
Nesse exemplo, a variável TELEFONE de 11 alfanuméricos foi redefinida em PARTES, 
sendo os primeiros 2 dígitos são DDD, os próximos 5 são PREFIXO e os últimos 4 são 
SUFIXO. 
 
Pois bem, voltando à questão, o Layout L1 não usa REDEFINES, o que significa que 
REG-TIPO1 e REG-TIPO2 estão um seguido do outro em memória, e seus tamanhos 
devem, portanto, ser somados. Nesse caso, L1 tem tamanho 102 + 102 = 204 
caracteres. 
 
O Layout L2 tem uma parte comum de 12 caracteres, e duas versões de registro. REG-
TIPO1 no layout L2 possui 90 caracteres. REG-TIPO2 redefine o REG-TIPO1, então usa 
as mesmas 90 caracteres. Portanto, o arquivo tem 12 + 90 = 102 caracteres. 
 
Por último, o Layout L3 tem uma parte comum de 12 caracteres, e REG-TIPO1 tem 90 
caracteres. O REG-TIPO2 redefine REG-TIPO1, porém, tem 102 caracteres. Logo, o 
tamanho do registro será 12 + 102 (o maior entre 90 e 102) = 114 caracteres. 
 
Portanto, todos os arquivos têm estrutura física diferente (o que elimina os itens A, B, C 
e D). O Layout L2 tem 102 caracteres (o que elimina o item E). Assim, a questão deveria 
ser ANULADA. 
 
Eu ACHO que o examinador esqueceu de colocar um REDEFINES no REG-TIPO2 do 
Layout L1. Se tivesse feito isso, o Layout teria 102 caracteres, e ficaria com a mesma 
estrutura do Layout L2, o que tornaria a Letra A a alternativa correta (como foi o 
gabarito oficial). 
 
 
 
9. CESPE / Técnico Bancário Novo (CEF) / 2010 / / Tecnologia da Informação / 
Nacional 
Inserir aqui o nome do Curso
www.estrategiaconcursos.com.br
Judah Reis
Aula 10
69360
 
r b m.o .cos s r ucn coiag e t a rst w.ew 
uagem de Programação p/ BRB (Analista TI) - Pós-Edital
w 
g n i L es a mest Sie d o tenm i lv o nve s e D 
 
 
 
 
 41 
67 
 
A tabela acima apresenta quatro trechos de programas COBOL, numerados de 1 a 
4. Os posicionamentos dos códigos em linhas e colunas estão destacados na tabela. 
No que diz respeito às informações apresentadas e à linguagem COBOL, assinale a 
opção correta. 
a) O trecho de código 1 poderia ocorrer na IDENTIFICATION DIVISION de um 
programa COBOL. 
b) NOME-MES, no trecho de código 1, pode ser chamada de uma variável de 
ocorrência simples. 
c) O trecho de código 2 não constitui um programa COBOL válido, compilável ou 
passível de execução. 
d) Suponha que o trecho de código 3 esteja presente em um programa COBOL 
válido. Nesse caso, a sua execução não provocará a ocorrência de um ABEND. 
e) No trecho de código 4, a linha de código 5 está comentada e POST-STARTUP-
INFO é uma procedure. 
 
Gabarito: ANULADA. Todas as alternativas estão erradas. 
 
a) ERRADO. Declarações de variáveis sempre devem acontecer na DATA 
DIVISION. 
b) ERRADO. NOME-MES é vetor de 12 posições (OCCURS 12 TIMES). 
c) ERRADO. O procedimento está correto, sem erros. 
Inserir aqui o nome do Curso
www.estrategiaconcursos.com.br
Judah Reis
Aula 10
69360
 
r b m.o .cos s r ucn coiag e t a rst w.ew 
uagem de Programação p/ BRB (Analista TI) - Pós-Edital
w 
g n i L es a mest Sie d o tenm i lv o nve s e D 
 
 
 
 
 42 
67 
d) ERRADO. Haverá uma ABEND por causa de uma divisão por zero. 
e) ANULADA. POST-STARTUP-INFO é um parágrafo, não uma procedure, mas 
isso é preciosismo técnico... Inicialmente, esse era o item certo, mas a banca 
anulou a questão, pois é muito difícil garantir que o “*” na linha 5 está exatamente 
na coluna 7, local onde significa um comentário. Portanto, anulada. 
 
 
10. CESPE / Técnico Bancário Novo (CEF) / 2010 / / Tecnologia da Informação / RJ 
e SP 
 
1 $ SET SOURCEFORMAT”FREE” 
2 IDENTIFICATION DIVISION. 
3 PROGRAM-ID. Iteration-If. 
4 AUTHOR. Michael Coughlan. 
5 DATA DIVISION. 
6 WORKING-STORAGE SECTION. 
7 01 Num1 PIC 9 VALUE ZEROS. 
8 01 Num2 PIC 9 VALUE ZEROS. 
9 01 Result PIC 99 VALUE ZEROS. 
10 01 Operator PIC X VALUE SPACE. 
11 01 Num3 PIC 9 VALUE ZEROS. 
12 PROCEDURE DIVISION. 
13 Calculator. 
14 PERFORM 3 TIMES 
15 DISPLAY “Enter First Number : “ WITH NO ADVANCING 
16 ACCEPT Num1 
17 DISPLAY “Enter Second Number : “ WITH NO ADVANCING 
18 ACCEPT Num2 
19 DISPLAY “Enter operator (+ or *) : “ WITH NO ADVANCING 
20 ACCEPT Operator 
21 IF Operator = “*” THEN 
22 ADD Num1, Num2 GIVING Result 
23 END-IF 
24 IF Operator = “+” THEN 
25 MULTIPLY Num1 BY Num2 GIVING Num3 
26 END-IF 
27 DISPLAY “Result is = “, Result 
28 END-PERFORM. 
29 STOP RUN. 
 
Considerando o código acima, em Cobol, plenamente compilável e funcional, 
adaptado de www.csis.ul.ie, assinale a opção correta. 
a) Todas as divisões e seções características de um programa Cobol que manipula 
arquivos estão presentes nesse código. 
b) O programa declara cinco variáveis de tipo numérico e um parágrafo de código 
executável. 
c) Se a entrada de dados do usuário for iniciada com os valores 8, 8 e +, a saída 
de dados será Result is = 64. 
Inserir aqui o nome do Curso
www.estrategiaconcursos.com.br
Judah Reis
Aula 10
69360
 
r b m.o .cos s r ucn coiag e t a rst w.ew 
uagem de Programação p/ BRB (Analista TI) - Pós-Edital
w 
g n i L es a mest Sie d o tenm i lv o nve s e D 
 
 
 
 
 43 
67 
d) Se a entrada de dados do usuário forem os valores 4, 4 e *, a saída de dados 
será Result is = 8. 
e) Se a entrada de dados do usuário for iniciada com 8, 8 e +, então, 
imediatamente antes da execução da linha de código 29, o valor da 
variável Operator será +. 
 
Gabarito: ANULADA. 
 
a) Todas as divisões e seções características de um programa Cobol que 
manipula arquivos estão presentes nesse código. 
ERRADO. Existem 4 divisões em COBOL. Somente 3 estão presentes, falta a 
ENVIRONMENT DIVISION que é usada para declarar as relações com o 
ambiente de execução, arquivos e outras entradas e saídas de dados 
 
b) O programa declara cinco variáveis de tipo numérico e um parágrafo de 
código executável. 
ERRADO. São 4 variáveis numéricas (PIC 9 e PIC 99) e uma variável alfanumérica 
(PIC X). 
 
c) Se a entrada de dados do usuário for iniciada com os valores 8, 8 e +, a saída 
de dados será Result is = 64. 
ERRADO. Quando o operador é "+", é executado MULTIPLY Num1 BY Num2 
GIVING Num3, ou seja Result não é alterada. 
 
d) Se a entrada de dados do usuário forem os valores 4, 4 e *, a saída de dados 
será Result is = 8. 
CERTO. Quando o operador é "*", é executado ADD Num1, Num2 GIVING 
Result, ou seja, Result sera 4 + 4 = 8. 
 
e) Se a entrada de dados do usuário for iniciada com 8, 8 e +, então, 
imediatamente antes da execução da linha de código 29, o valor da 
variável Operator será +. 
CERTO. O valor "+" será atribuído para Operator na linha 20, e não é mais 
modificado até o fim do programa. 
 
Portanto, 2 itens corretos, questão ANULADA. 
 
 
11. CESGRANRIO / Escriturário (BB) / 2013 / / Tecnologia da Informação / 2 
Inserir aqui o nome do Curso
www.estrategiaconcursos.com.br
Judah Reis
Aula 10
69360
 
r b m.o .cos s r ucn coiag e t a rst w.ew 
uagem de Programação p/ BRB (Analista TI) - Pós-Edital
w 
g n i L es a mest Sie d o tenm i lv o nve s e D 
 
 
 
 
 44 
67 
Um programa COBOL possui a seguinte linha de comando em sua PROCEDUREDIVISION. 
 
COMPUTE A = B + C * D + E. 
 
Essa linha pode ser substituída por qual sequência de comandos de forma a sempre 
calcular corretamente o valor de A? 
a) ADD C TO B. 
 MULTIPLY C BY D. 
 ADD D TO E. 
 ADD B TO E GIVING A. 
b) ADD B TO C. 
 MULTIPLY C BY D. 
 ADD E TO D. 
 ADD B TO E GIVING A. 
c) MULTIPLY C BY D. 
 ADD B TO C. 
 ADD D TO E. 
 ADD C TO E GIVING A. 
d) MULTIPLY C BY D. 
 ADD C TO B. 
 ADD B TO E GIVING A. 
e) ADD B TO E. 
 MULTIPLY C BY D. 
 ADD E TO D GIVING A. 
 
Gabarito: Letra E. 
 
ADD X TO Y é o mesmo que X=X+Y. ADD X TO Y GIVING Z é o mesmo que 
Z=X+Y. Lembramos que multiplicação tem prioridade sobre a soma. 
 
a) B=B+C 
 D=D*C 
 E=E+D*C 
 A=B+C+E+D*C (ERRADO) 
b) C=C+B 
 D=D*(C+B) 
 D=D*(C+B)+E 
 A=B+E (ERRADO) 
c) D=D*C 
 C=C+B 
 E=E+D*C 
Inserir aqui o nome do Curso
www.estrategiaconcursos.com.br
Judah Reis
Aula 10
69360
 
r b m.o .cos s r ucn coiag e t a rst w.ew 
uagem de Programação p/ BRB (Analista TI) - Pós-Edital
w 
g n i L es a mest Sie d o tenm i lv o nve s e D 
 
 
 
 
 45 
67 
 A=C+B+E+D*C (ERRADO) 
d) D=D*C 
 B=B+C 
 A=B+C+E (ERRADO) 
e) E=E+B 
 D=D*C 
 A=E+B+D*C = B+C*D+E (CERTO) 
 
12. CESGRANRIO / Escriturário (BB) / 2013 / / Tecnologia da Informação / 2 
 
Um dado programa COBOL possui os trechos abaixo em sua estrutura: 
 
• na working-storage section 
 
77 VAR PIC 9(2). 
 
• na procedure division 
 
INICIO. 
 MOVE ZEROS TO VAR. 
 PERFORM A THRU C. 
 PERFORM B. 
 PERFORM C. 
A. 
 ADD 1 TO VAR. 
B. 
 ADD 2 TO VAR. 
C. 
 ADD 3 TO VAR. 
D. 
 DISPLAY VAR. 
 STOP RUN. 
 
O valor de VAR apresentado pelo comando DISPLAY, na execução do programa, é 
a) 11 
b) 09 
c) 17 
d) 08 
e) 10 
 
Gabarito: Letra C. 
 
Inserir aqui o nome do Curso
www.estrategiaconcursos.com.br
Judah Reis
Aula 10
69360
 
r b m.o .cos s r ucn coiag e t a rst w.ew 
uagem de Programação p/ BRB (Analista TI) - Pós-Edital
w 
g n i L es a mest Sie d o tenm i lv o nve s e D 
 
 
 
 
 46 
67 
Primeiramente, é preciso saber que ADD x TO VAR é o mesmo que fazer 
VAR=VAR+X. 
 
Assim, o programa inicializa com MOVE ZEROS TO VAR (faz VAR=0). Depois, 
temos PERFORM A THRU C, que vai executar os parágrafos A até C. Logo, VAR 
vai acumular os valore 1 + 2 + 3 = 6. Depois, temos PERFORM B, e VAR acumula 
+2 e vale 8. Depois temos PERFORM C, e VAR acumula +3, e vale 11. Como não 
existe nenhuma cláusula de término, o programa segue linearmente e executa 
ADD 1 TO VAR depois ADD 2 TO VAR, e por último ADD 3 TO VAR, fazendo 11 
+ 1 + 2 +3 = 17. Logo, a alternativa correta é Letra C, 17. 
 
 
13. CESGRANRIO / Escriturário (BB) / 2013 / / Tecnologia da Informação / 2 
 
Um dado programa COBOL possui os trechos abaixo em sua estrutura: 
 
• na working-storage section 
 
01 TAB. 
 03 VALOR PIC X(26) VALUE 
‘COBOL3BRASIL2BRASIL4COBOL1’. 
 03 TABELA REDEFINES VALOR. 
 05 ELEMENTO OCCURS 2. 
 07 ELEM PIC X(3). 
 07 TAB2 OCCURS 5. 
 09 ELEM2 PIC X(2). 
 
• na procedure division 
INICIO. 
 DISPLAY ELEM2(2,2). 
 STOP RUN. 
 
O valor apresentado pelo comando DISPLAY, na execução do programa, é 
a) BR 
b) 3B 
c) L1 
d) SI 
e) L4 
 
Gabarito: LETRA E. 
 
Inserir aqui o nome do Curso
www.estrategiaconcursos.com.br
Judah Reis
Aula 10
69360
 
r b m.o .cos s r ucn coiag e t a rst w.ew 
uagem de Programação p/ BRB (Analista TI) - Pós-Edital
w 
g n i L es a mest Sie d o tenm i lv o nve s e D 
 
 
 
 
 47 
67 
O valor de TABELA possui ELEMENTO 2 vezes (OCCURS 2). Cada ELEMENTO 
contém ELEM com 3 posições, e uma TAB2 com 5 itens ELEM2 de 2 posições, 
totalizando 10 posições (5 x 2). Logo, ELEMENTO possui, to total 10 + 3 = 13 
posições. Como temos 2 ocorrências, fechamos as 26 posições - bateu certinho. 
 
ELEMENTO(1) = "COBOL3BRASIL2" 
 ELEM(1) = "COB" 
 TAB2(1) = "OL3BRASIL2" 
 ELEM2(1,1) = "OL" 
 ELEM2(1,2) = "3B" 
 ELEM2(1,3) = "RA" 
 ELEM2(1,4) = "SI" 
 ELEM2(1,5) = "L2" 
ELEMENTO(2) = "BRASIL4COBOL1" 
 ELEM(2) = "BRA" 
 TAB2(2) = "SIL4COBOL1" 
 ELEM2(2,1) = "SI" 
 ELEM2(2,2) = "L4" (Letra E) 
 ELEM2(2,3) = "CO" 
 ELEM2(2,4) = "BO" 
 ELEM2(2,5) = "L1" 
 
 
14. CESGRANRIO / Escriturário (BB) / 2013 / / Tecnologia da Informação / 2 
 
Um dado programa COBOL possui os trechos abaixo em sua estrutura: 
 
• na working-storage section 
 01 TABELA. 
 05 ELEMENTO OCCURS 70 TIMES 
 ASCENDING CURSO, MATRICULA 
 INDEXED BY IND. 
 10 CURSO PIC X(10). 
 10 MATRICULA PIC X(05). 
 10 NOME PIC X(30). 
 
• na procedure division 
 SEARCH ALL ELEMENTO 
 AT END DISPLAY "NAO ACHOU" 
 WHEN CURSO (IND) = "COBOL" AND 
 MATRICULA (IND) = "99887" 
Inserir aqui o nome do Curso
www.estrategiaconcursos.com.br
Judah Reis
Aula 10
69360
 
r b m.o .cos s r ucn coiag e t a rst w.ew 
uagem de Programação p/ BRB (Analista TI) - Pós-Edital
w 
g n i L es a mest Sie d o tenm i lv o nve s e D 
 
 
 
 
 48 
67 
 DISPLAY "ACHOU" 
 END-SEARCH. 
 
Ao analisar os trechos acima, verifica-se que 
a) a cláusula ASCENDING garante que a tabela está ordenada crescentemente 
pelos campos CURSO e MATRICULA, e o comando SEARCH ALL executa uma 
pesquisa binária na tabela. 
b) o comando SEARCH ALL executa uma pesquisa binária corretamente na tabela 
desde que a mesma esteja previamente ordenada, pois a cláusula ASCENDING 
não garante que a tabela está ordenada crescentemente pelos campos CURSO e 
MATRICULA. 
c) a cláusula ASCENDING garante que a tabela está ordenada crescentemente 
pelos campos CURSO e MATRICULA, e o comando SEARCH ALL executa uma 
pesquisa sequencial abrangendo todos os elementos da tabela. 
d) o comando SEARCH ALL executa uma pesquisa sequencial abrangendo todos 
os elementos da tabela, porém a cláusula ASCENDING não garante que a tabela 
está ordenada crescentemente pelos campos CURSO e MATRICULA 
e) a definição da cláusula ASCENDING é desnecessária para executar o comando 
SEARCH ALL, se a tabela se encontra ordenada. 
 
Gabarito: Letra B. 
 
Existem 2 formas de se realizar pesquisas em tabelas: SEARCH (pesquisa 
sequencial) e SEARCH ALL (pesquisa binária). No SEARCH ALL é preciso informar 
quais são os elementos ordenados, e se estão em ordem crescente 
(ASCENDING) ou decrescente (DESCENDING). Existem 3 limitações da pesquisa 
binária sobre a sequencial: 
Os elementos precisam estar ordenados previamente. 
A declaração de ordem (ASCENDING/DESCENDING) apenas indica qual o tipo 
de ordenação, mas não faz a organização dos elementos caso a estrutura não 
esteja ordenada. 
A comparação "WHEN" pode usar somente os elementos ordenados. 
Assim: 
a) ERRADO. A cláusula ASCENDING não garante que a tabela está ordenada. 
b) CERTO. Está de acordo com as características do SEARCH ALL. 
c) ERRADO. A cláusula ASCENDING não garante que a tabela está ordenada. 
d) ERRADO. O comando SEARCH ALL executa uma pesquisa binária, e não 
sequencial. 
e) ERRADO. É necessário indicar os campos que estão ordenados, bem com se 
estão em ordem crescente ou decrescente. 
Inserir aqui o nome do Curso
www.estrategiaconcursos.com.br
Judah Reis
Aula 10
69360
 
r b m.o .cos s r ucn coiag e t a rst w.ew 
uagem de Programação p/ BRB (Analista TI) - Pós-Edital
w 
g n i L es a mest Sie d o tenm i lv o nve s e D 
 
 
 
 
 49 
67 
 
 
15. CESGRANRIO / Escriturário (BB) / 2013 / / Tecnologia da Informação / 2 
 
Considere o seguinte programa escrito na linguagem COBOL: 
 
IDENTIFICATION DIVISION. 
PROGRAM-ID. COB14. 
ENVIRONMENT DIVISION. 
DATA DIVISION. 
WORKING-STORAGE SECTION.

Continue navegando