Você está na página 1de 253

Introduo Linguagem COBOL

Introduo ao COBOL - Apostilado para Treinamento

Microsoft, MS, MS-DOS, Windows, Windows 95 Windows NT, Word, Project, Access, Excel, PowerPoint e logo do Windows so de propriedade da Microsoft Corporation nos Estados Unidos e/ou outros pases. COBOL de propriedade da IBM Corporation nos Estados Unidos e/ou outros pases.

Captulo 1 - Prefcio

Este Material...
Este material foi desenvolvido para os participantes do curso de Introduo Linguagem COBOL. Neste voc ir encontrar os principais e mais abrangentes recursos sobre este produto, e estar baseado na configurao padro de instalao do Software indicado pelo fabricante. Buscou-se na criao deste manual, o uso de uma linguagem simples e clara, sendo escrito em funo da execuo de Tarefas e a descrio das mesmas atravs de passos que sero identificados com uma numerao seqencial. O objetivo desse treinamento habilitar os participantes : Conhecimento do ambiente de Programao de Linguagens de Computao Conhecimento do ambiente de Lgica de Programao

Pr-Requisito
Esse treinamento requer que os participantes possuam os seguintes prrequisitos : Conhecimentos bsicos de programao TSO e JCL

Captulo 2 Elementos bsicos do COBOL II

Caracteres
Numricos - 0 a 9 Espao (branco) Sinal negativo ou Hfen Barra ou Diviso / Cifro $ Ponto. Abre parnteses ( Maior que > Alfabticos - A a Z Sinal positivo ou Soma + Asterisco ou Multiplicao * Sinal de Igual Vrgula, Apstrofo ' Fecha parnteses ) Menor que < =

Palavras em Cobol
Dividimos em dois grupos: Palavras Reservadas Palavras definidas pelo programador

Palavras em Cobol
Palavras Reservadas So aquelas que tem um significado especfico para o compilador COBOL, e no pode ser utilizada fora de sua finalidade dentro de um programa COBOL. IDENTIFICATION RECORD WRITE LABEL READ DATA

Palavras em Cobol
Tipos de Palavras Reservadas: Palavras Chaves So essenciais s especificaes de um programa. A omisso dessas palavras acarretar resultados errneos na compilao. Palavras Opcionais So palavras no obrigatrias, servindo apenas para um melhor entendimento do programa. Dependendo do programador querer usa-las ou no.

Palavras Definidas Pelo Programador


Tambm chamadas de "NOME". So palavras formadas pelo programador e servem para referenciar elementos do programa. Nome de arquivo Campos registro etc.

Palavras Definidas Pelo Programador (Cont.)


Regras Para Formao de Nomes: O tamanho mximo de 30 caracteres; No pode conter espaos ou brancos; Pode conter letras, nmeros ou hfens. (Sendo que o hfen no pode iniciar ou terminar) No pode ser uma palavra reservada COBOL; No pode conter outros caracteres seno A-Z, 0-9 e o hfen (-); Deve conter no mnimo 1 caractere alfabtico. Vlidos CADCOR PLUG-COD NOME-BRADESCO BRASIL Reservada No Vlidos SAO PAULO X*Y VALUE CLASSE Motivo Espao Asterisco Reservada

Constantes
Constantes tambm chamadas de literais, isto , Constante e Literal so sinnimos, neste curso usaremos os dois termos para acostumar com ambos. Existem trs tipos de Literais ou Constantes: Literal Numrico uma constante definida pelo programador, constituda pelos caracteres numricos de 0 a 9, sinais positivos (+), negativo (-) e vrgula decimal (, ). Regras de formao: No mximo 18 caracteres numricos Uso de apenas um sinal (+ ou -), e quando usado deve ser posicionado na extremidade esquerda do literal. A omisso do sinal significar que o nmero positivo Uso de uma vrgula decimal, podendo aparecer em qualquer posio do nmero, exceto na extremidade direita. Constantes sem vrgula decimal so considerados nmeros inteiros. Exemplos: 3824 +30,273 -14,5 55,7

Literais No Numricos ou Alfanumricos


So seqncias de caracteres escritos entre apstrofos() ou aspas (). No podem ser utilizadas em expresses aritmticas. Regras de formao: No Pode conter mais de 120 caracteres; Espaos em branco tambm so considerados partes da constante; Constantes no numricas fazem parte da classe dos alfanumricos; Aspas ou apstrofos no fazem parte da constante; A constante pode conter qualquer caractere exceto apstrofo. NOME DO CLIENTE '$ 127,5' 'ENDEREO' ' ' (Espaos em branco)

Constantes Figurativas
Possuem significado especfico para o compilador. No deve ser escrita entre apstrofos, para no ser considerada uma constante no numrica. ZERO ZEROS ZEROES

Representa uma ou mais ocorrncias do caracter numrico 0, dependendo do contexto pode tambm ser numrico ou no numrico. MOVE ZERO TO DATA-NAME1 ou MOVE ZEROS TO DATA-NAME1 SPACE SPACES

Representa uma ou mais posies em branco (ou espaos), tratadas como um item alfanumrico. MOVE SPACE TO DATA-NAME1 ou MOVE SPACES TO DATA-NAME1

Constantes Figurativas (Cont.)


QUOTE QUOTES

Representa uma ou mais ocorrncias do caractere apstrofo (') movidas para um item no numrico. MOVE QUOTE TO DATA-NAME1 ou MOVE QUOTES TO DATA-NAME1 HIGH-VALUE HIGH-VALUES

Representa uma ou mais ocorrncias do caractere X'FF' (representao em hexadecimal do maior valor na seqncia de caracteres na representao EBCDIC). A constante figurativa HIGH-VALUE tratado como um literal no numrico. MOVE HIGH-VALUE TO DATA-NAME1

Constantes Figurativas (Cont.)


LOW-VALUE LOW-VALUES

Representa uma ou mais ocorrncias do caractere X'00' (representao em hexadecimal do menor valor na seqncia de caracteres na representao EBCDIC). A constante figurativa LOW-VALUE tratado como um literal no numrico. MOVE LOW-VALUE TO DATA-NAME1 MOVE LOW-VALUES TO DATA-NAME1 ALL (literal) Representa uma ou mais ocorrncias da cadeia de caracteres que compe o literal que no deve ser numrico. Quando uma constante figurativa usada, a palavra ALL redundante. MOVE ALL ' ' TO DATA-NAME1 ou MOVE SPACES TO DATA-NAME1 MOVE ALL '*' TO DATA-NAME1

Constantes Figurativas (Cont.)


NULL, NULLS (extenso IBM) Representa um valor usado para indicar que itens de dados definidos com USAGE IS POINTER ou com ADDRESS OF (registradores especiais) no contm um endereo vlido. SET DATA-NAME1 TO NULL ou SET ADDRESS OF DATA-NAME1 TO NULLS

Captulo 3 Divises do COBOL II

As quatro divises do COBOL


Um programa fonte escrito em COBOL constitudo sempre por 4 divises e que devero vir nessa mesma ordem: IDENTIFICATION DIVISION ENVIRONMENT DIVISION DATA DIVISION PROCEDURE DIVISION Cada "DIVISION" do COBOL pode estar dividida em uma ou mais "SECTION", que por sua vez, cada "SECTION" pode estar dividida em um ou mais "PARGRAFOS" e cada "PARGRAFO" pode ter um ou uma srie de "STATEMENT" (comandos).

IDENTIFICATION DIVISION
Documenta o programa, identifica o nome do programa fonte, datas de codificao e compilao, e outras informaes. Esta diviso no formada por nenhuma seo, apenas, por pargrafos que veremos mais adiante.

ENVIRONMENT DIVISION
Esta a segunda diviso de um programa COBOL com o objetivo de especificar o ambiente de compilao e execuo, associar cada arquivo no programa com um arquivo externo, especificar sua organizao, modo de acesso e outras informaes. A ENVIRONMENT DIVISION est subdividida em duas sees opcionais, isto , que devero ser escritas ou no, dependendo da necessidade do programa, a saber: CONFIGURATION SECTION. INPUT-OUTPUT SECTION.

DATA DIVISION
Descrever os dados que o programa manipular quer para entrada ou sada, assim como os dados constantes e intermedirios do programa. A DATA DIVISION constituda na maioria dos casos por trs sees: FILE SECTION. WORKING-STORAGE SECTION. LINKAGE SECTION

PROCEDURE DIVISION
a quarta e ltima diviso de um programa COBOL, descreve todos os procedimentos a serem executados pelo programa, tais como operaes e manipulaes de dados, controles, etc. formada geralmente por diversas sees e pargrafos dependendo da necessidade do problema.

Captulo 4 Folha de Codificao COBOL

Colunas
O compilador COBOL possui caractersticas posicionais, isto , se de um lado necessitamos ordenao de palavras, divises e sees, por outro lado necessrio usar uma estrutura definida da maneira de escrever. Essa estrutura ou formato permitem ao processador identificar determinadas informaes. A maneira grfica de representar o formato por intermdio da folha de programao. Nesta folha encontramos todas as especificaes de formatos j prefixados. Colunas de 1 a 6 Usadas para numerar as linhas de um programa. A numerao em ordem crescente. Opcionalmente podem deixar de serem preenchidas.

Colunas (Cont.)
Coluna 7 usada para um "hfen", que significa continuao de literais no numricos, e o smbolo * (asterisco) usado para comentrios. Coluna 8 a 72 Usadas para as entradas (palavras ou literais) do programa. Estas colunas esto agrupadas em duas margens: margem A (colunas 8 a 11) e margem B (colunas 12 a 72). Colunas 73 a 80 So destinadas opcionalmente identificao do programa, ou das alteraes efetuadas

MARGENS
Estas colunas so agrupadas em duas margens: A - (colunas 8 a 11) Nomes de divises Nomes de sees Nomes de pargrafos Descrio de arquivos (encontrados na DATA DIVISION que comeam com palavras reservadas de duas letras chamadas indicadores de nvel", tais como FD; o indicador de nvel escrito na margem A; o restante da descrio deve ser escrito na margem B). Ttulos especiais, na Procedure Division. Os nmeros de nvel podem ser escritos na margem A, como por exemplo o nvel 77. B - (colunas 12 a 72). Comear-se- a escrever qualquer outra entrada que no est relacionada acima.

EXEMPLO
Para uma melhor visualizao, deve-se comear as entradas de um programa em linhas separadas. Entretanto, caso no seja possvel, a nova entrada dever ser separada da primeira por pelo menos um espao. Se uma entrada for grande demais para caber em uma linha, ela deve continuar na segunda linha na margem B, no importando se a primeira comeou na margem A ou B.

EXEMPLO (Cont.)
Exemplo de um Programa escrito em COBOL IDENTIFICATION DIVISION. PROGRAM-ID. EXEMPLO. AUTHOR. BARTO. REMARKS. ESTE PROGRAMA E UM EXEMPLO. ENVIRONMENT DIVISION. CONFIGURATION SECTION. SPECIAL-NAMES. DECIMAL-POINT IS COMMA. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT CADCONTA ASSIGN TO CADCONTA. SELECT LISTAREL ASSIGN TO LISTAREL.

EXEMPLO (Cont.)
DATA DIVISION. FILE SECTION. FD CADCONTA LABEL RECORD IS STANDARD. 01 REG-CADCONTA. 05 CO-CHAVE. 10 CO-REGIAO 10 CO-SUBCENTRO 10 CO-AGENCIA 10 CO-NUMERO 05 CO-SALDO 05 CO-DATA-ABERT 05 CO-DATA-ULT-MOV 05 CO-LIMITE-CRED 05 CO-RESTRICAO 05 FILLER FD LISTAREL LABEL RECORD IS OMITTED. 01 REG-LISTAREL. 05 CONTROLE 05 LINHA PIC X(001). PIC X(132).

PIC X(03). PIC X(03). PIC 9(04). PIC 9(07). PIC S9(11)V99 PIC 9(08). PIC 9(08). PIC S9(05)V99 PIC X(01). PIC X(25).

COMP-3. COMP-3.

EXEMPLO (Cont.)
WORKING-STORAGE SECTION. 01 FLAG-EOF PIC X(001) 88 CONDICAO-EOF 01 CB10-CABECALHOS.. 05 CB11-CABEC01. 10 FILLER 10 FILLER 10 FILLER 10 CB11-PAG 05 CB12-CABEC02. 10 FILLER REGIAO SUBCENTRO 10 FILLER 01 LD50-LINHAS-DETALHE. 05 LD51-LINHA01. 10 FILLER 10 LD51-REGIAO 10 FILLER ........ ......... 05 LD52-LINHA02. 10 FILLER ........ ........ 01 AC100-ACUMULADORES. 05 AC100-LIN 05 AC100-PAG ........ VALUE SPACES. VALUE HIGH-VALUES. PIC PIC PIC PIC X(30) X(90). X(05) ZZ9. VALUE BRADESCO *****. VALUE RELACAO DE....... VALUE PAG..

PIC X(80) VALUE AGENCIA C.CORRENTE ..... PIC X(42). VALUE S A L D O. PIC X(05) PIC X(03). PIC X(04) PIC X(10) PIC 9(02) PIC 9(03) VALUE SPACES. VALUE SPACES. VALUE SPACES. VALUE 99. VALUE ZEROS.

EXEMPLO (Cont.)
PROCEDURE DIVISION. A000-00-PRINCIPAL. PERFORM B000-00-ABERTURA THRU B999-99-FIM. PERFORM C000-00-PROCESSAMENTO UNTIL CONDICAO-EOF. PERFORM X000-00-FINAL THRU X999-99-FIM. A999-99-FIM. GOBACK. B000-00-ABERTURA. OPEN INPUT CADCONTA OUTPUT LISTAREL. PERFORM D000-00-LE-CONTA. B999-99-FIM. EXIT. C000-00-PROCESSAMENTO. IF CO-REGIAO = ABC MOVE S TO LD51-RESTRICAO ELSE MOVE N TO LD51-RESTRICAO END-IF. PERFORM I000-00-IMPRIME PERFORM D000-00-LE-CONTA. C999-99-FIM. EXIT.

EXEMPLO (Cont.)
D000-00-LE-CONTA. READ CAD-CONTA AT END MOVE HIGH-VALUES TO FLAG-EOF. D999-99-FIM. EXIT I000-00-IMPRIME. IF AC100-LIN IS GREATER 55 PERFORM I500-00-CABEC. MOVE CO-REGIAO TO LD51-REGIAO .. MOVE LD51-LINHA01 TO LINHA WRITE REG-LISTAREL AFTER 1 LINE. ADD 1 TO AC100-LIN. GO TO I999-99-FIM. I500-00-CABEC. ADD 1 TO AC100-PAG MOVE AC100-PAG TO CB11-PAG WRITE REG-LISTAREL FROM CB11-CABEC01 AFTER PAGE ..... MOVE 0 TO AC100-LIN. I999-99-FIM. EXIT X000-00-FINAL. CLOSE X999-99-FIM. CAD-CONTA LISTAREL. EXIT.

Captulo 5 Notaes de Formatos

Notaes de Formatos
A seguir so descritas as notaes utilizadas para descrever os formatos de um programa COBOL, nesta apostila. As palavras reservadas so escritas em letras maisculas, no devendo ser abreviadas e nem ter a ortografia errnea. As palavras reservadas no sublinhadas so opcionais (uso no obrigatrio), porm quando utilizadas no devem conter erros de ortografia. As palavras reservadas sublinhadas so as palavras chaves. As informaes a serem escritas pelos programadores esto em letras minsculas. As partes entre [ ] (colchetes) so opcionais, utilizando-as conforme a necessidade. As partes entre { } (chaves) indicam que obrigatoriamente devemos escolher a alternativa mais adequada. Partes do formato que podem ser repetidas qualquer nmero de vezes, so seguidas por trs pontos (...) sucessivos. Se esses pontos seguem uma palavra, eles se aplicam somente aquela palavra. Caso esses pontos sigam colchetes ou chaves, eles se referem parte toda entre colchetes ou chaves do formato. Exemplo: OPEN { INPUT / OUTPUT } arquivo1 [arquivo2]...

Captulo 6 Clusulas Especiais

Clusulas Especiais
No COBOL existem clusulas especiais dirigidas ao compilador, indicando que execute certos procedimentos durante a compilao.

EJECT

Especifica que a prxima instruo no programa fonte dever ser impressa no incio da prxima pgina da listagem do programa fonte. EJECT. Formato:

A clusula SKIP1/2/3 especifica que a prxima instruo no programa fonte dever ser impressa precedida de linhas em branco, de acordo SKIP1/2/3 com a clusula codificada. Formato: SKIP1. Ou SKIP 3. Especifica um ttulo a ser impresso no incio de cada pgina da listagem do programa fonte durante a compilao. Caso a clusula TITLE no seja encontrada, um ttulo contento a identificao do compilador e o nvel do release atual ser gerada. A clusula TITLE no permite continuao em outra linha. Formato: TITLE literal [.] Ocorrncias so produzidas pela clusula TITLE:Fora uma nova pgina imediatamente; No impressa na listagem do programa fonte; No tem outro efeito na compilao; No tem efeito sobre a execuo do programa.

TITLE

As clusulas: EJECT, SKIP1, SKIP2, SKIP3 e TITLE, podem ser codificadas em quaisquer das divises do programa, e nenhuma outra clusula pode aparecer na mesma linha. Estas clusulas podem comear tanto na margem A como B, terminando ou no por um ponto.

Captulo 7 Identification Division

Informaes
A IDENTIFICATION DIVISION deve ser a primeira diviso no programa Cobol. Nesta diviso identifica-se o programa, Nome, Autor, data em que foi feito, comentrios sobre o que faz o programa, etc. As informaes escritas na IDENTIFICATION DIVISION so tratadas pelo compilador COBOL como comentrios para documentao, no afetando portanto o significado do programa e no sendo traduzidos em linguagem de mquina.

Informaes (Cont.)
IDENTIFICATION DIVISION. O nome da diviso IDENTIFICATION DIVISION deve ser escrito a partir da margem A, seguido por ponto. A ou abreviao ID DIVISION pode substituir a forma por extenso, e os pargrafos opcionais podem estar ID DIVISION. codificados a seguir em qualquer ordem. Os comentrios em qualquer pargrafo opcional podem ser quaisquer combinao de caracteres EBCDIC, escritos na margem B em uma ou mais linhas sendo invlido o uso do hfen na coluna 7 para indicar continuao. PROGRAM-ID. Nome do programa. nico pargrafo obrigatrio na IDENTIFICATION DIVISION, cujo objetivo dar nome ao programa. O sistema usar as oito primeiras posies para identificar o nome do programa. O nome do programa deve comear com letra, caso contrrio haver converso de caractere da seguinte forma: o dgito 0 ser convertido para J e dgitos de 1 9 para A I. Se houver um hfen das posies de 2 a 8, ser convertido para o dgito 0.

Informaes (Cont.)
AUTHOR . Nome do autor. [...] Opcional. Este pargrafo bem como os demais restantes serve para documentao. Este pargrafo tem como finalidade identificar o autor do programa (o nome do programador). Empresa. [...]- Opcional Identificamos aqui o nome da empresa ou localizao. DD/MM/AA. - Opcional Identifica a data da codificao do programa. No preencher. [...] Identifica a data de compilao do programa. Podemos aqui escrever apenas o nome do pargrafo seguido por um ponto, e quando o programa for compilado, o compilador COBOL se encarregar de escrever a data de compilao. Comentrio do programa - Opcional Documentar qualquer medida de segurana a ser tomada quanto ao programa e/ou dos arquivos utilizados pelo programa. Lembrese que isto no gerar nenhuma ao a ser tomada por parte do sistema, servindo apenas como parte da documentao do programa. Use tambm para documentar as alteraes efetuadas.

INSTALLATION. DATE-WRITTEN. DATECOMPILED.

SECURITY.

Informaes (Cont.)
Exemplo: ID DIVISION. PROGRAM-ID. AUTHOR. INSTALLATION. DATE-WRITTEN. DATE-COMPILED. XPTO999. BARTOLOMEU. ARO/DSAG/CSDS BRADESCO. AGOSTO-95.

* COM ASTERISCO VIRA COMENTARIO. * OUTROS COMENTRIOS PODERAO SER ACRESCENTADOS / ESTA LINHA SAIRA NA PROXIMA PAGINA DA COMPILACAO E COMENTARIO.

Captulo 8 Environment Division

Sees
ENVIRONMENT DIVISION. Vem logo aps a IDENTIFICATION, esta diviso indica qual o computador e os arquivos a serem utilizados pelo programa, associando cada arquivo com os seus respectivos perifricos de entrada e sada. utilizada para fornecer informaes sobre o computador, e est divida em trs pargrafos: Nome do computador [WITH DEBUGGING MODE]. Este pargrafo serve para identificar o computador que compilar o programa COBOL.: Nome do computador. [MEMORY SIZE integer{WORDS / CHARACTERS / MODULES}] [PROGRAM COLLATING SEQUENCE IS alphabet-name]. [SEGMENT-LIMIT IS priority-number]. Este pargrafo serve para identificar o computador no qual ser executado o programa COBOL. [function-name-1 is mnemonic-name ...] [CURRENCY SIGN IS literal-1] [DECIMAL-POINT IS COMMA]. O pargrafo SPECIAL-NAMES tem por objetivo relacionar funes existentes no compilador COBOL com nomes simblicos dados pelo programador. Deve ser usado sempre que precisar inverter o ponto decimal para a virgula.

CONFIGURATION SECTION. SOURCE-COMPUTER.

OBJECT-COMPUTER.

SPECIAL-NAMES.

Exemplo
ENVIRONMENT CONFIGURATION SOURCE-COMPUTER. OBJECT-COMPUTER. SPECIAL-NAMES. DECIMAL-POINT IS COMMA. DIVISION. SECTION. IBM3090. IBM3090.

Sees
INPUT-OUTPUT SECTION. Define os arquivos utilizados pelo programa. Assim como efetiva as ligaes entre o programa e os perifricos. FILE-CONTROL Estabelece o relacionamento entre os nomes e outros dados associados a arquivos com perifricos externos. A expresso FILE CONTROL aparece somente uma nica vez no incio do pargrafo, e deve ser codificado na margem A. O formato a seguir serve tanto para arquivos de mtodos de acesso QSAM como VSAM ESDS. usada para dar nomes aos arquivos utilizados no programa e associ-los com seus respectivos perifricos. Os nomes dos arquivos so definidos pelo programador, criando o nome que quiser, desde que obedea s regras de formao das palavras definidas pelo programador. Regras para formao de nomes de arquivos: De 1 at 30 caracteres; Nenhum caractere especial, exceto hfen; Nenhum caractere branco no meio; Pelo menos um caractere alfabtico. Nome: De 1 a 8 caracteres especificando o nome do arquivo externo requerido. Este precisa ser o nome especificado no comando DD de JCL para este arquivo. Este nome no pode ser uma palavra reservada (exemplo SYSIN, SYSOUT, SYSPUNCH). Especifica quando devem ser efetuados "checkpoints" e compartilhamento de reas de memria para os diferentes arquivos. Este pargrafo opcional num programa COBOL

SELECT [OPTIONAL]file-Name ASSIGN TO assignmentname-1 ... RESERVE Integer AREA ORGANIZATION IS SEQUENTIAL / INDEXED ACCESS MODE IS SEQUENTIAL / RANDOM FILE STATUS IS dataname-2 ...

I-O-CONTROL.

Captulo 9 Data Division

Seo FILE SECTION


DATA DIVISION Dividida em 3 Sees: FILE SECTION a seo que aloja a descrio dos arquivos definidos nas clusulas SELECT da ENVIRONMENT DIVISION. MODE IS F STANDARD 70 CHARACTERS IS REG-CADCONTA. Sua funo descrever os arquivos e seus registros, assim como qualquer rea de trabalho necessria ao programa.

FILE SECTION. FD CADCONTA RECORDING LABEL RECORD ARE RECORD CONTAINS DATA RECORD

01 REG-CADCONTA. 05 CO-CHAVE. 10 CO-REGIAO PIC X(03). 10 CO-SUBCENTRO PIC X(03). 10 CO-AGENCIA PIC 9(04). 10 CO-NUMERO PIC 9(07). 05 CO-SALDO PIC S9(11)V99 COMP-3. 05 CO-DATA-ABERT PIC 9(08). 05 CO-DATA-ULT-MOV PIC 9(08). 05 CO-LIMITE-CRED PIC S9(05)V99 COMP-3. 05 CO-RESTRICAO PIC X(01). 05 FILLER PIC X(25).

Seo FILE SECTION (Cont.)


File-Name Precisa seguir o indicador de nvel (FD ou SD), e precisa ser o mesmo nome especificado na entrada SELECT associada. O nome do arquivo precisa aderir s regras de formao de nomes definidos pelo programador, ao menos um caractere deve ser alfabtico. O nome do arquivo deve ser nico para este programa. Clusula BLOCK Determina o tamanho do bloco (registro fsico) do arquivo, em nmero de registros ou caracteres. O bloco pode ter tamanho varivel. Caso esta clusula for omitida o arquivo ser considerado desblocado. No entanto, rodando sob MVS a codificao: BLOCK CONTAINS 0, pode especificar que para arquivos QSAM; o tamanho do bloco ser determinado atravs de parmetros do comando DD de JCL, ou atravs do Label do arquivo. Clusula RECORD Determina o tamanho do registro (registro lgico) do arquivo, em nmero de caracteres

Seo FILE SECTION Recording Mode


Clusula RECORDING Determina o formato de registro que o arquivo possui. Em COBOL, basicamente, podemos declarar os seguintes formatos: MODE F: Todos os registros do arquivo so do mesmo tamanho e cada um est inteiramente contido em um bloco. Os blocos podem conter mais de um registro, mas usualmente existe um nmero fixo de registros por bloco; MODE U: Os registros podem ser fixos ou variveis. Contudo, existe apenas um registro por bloco. No existem campos de descries de comprimento de registro ou bloco; MODE V: Os registros podem ser fixos ou variveis, inteiramente contidos em um bloco. Os blocos podem conter mais de um registro. Cada registro inclui a descrio dos campos de comprimento do registro e cada bloco inclui a descrio do tamanho do bloco. Estes campos no so descritos na DATA DIVISION; sua previso feita automaticamente e no so disponveis para o programador. MODE S: Os registros podem ser fixos ou variveis; podendo at mesmo ser maiores que o bloco. Se um registro (SPANNED) for maior que o espao disponvel em um bloco, um segmento do registro ser escrito de modo a preencher o bloco. O resto do registro armazenado no prximo bloco (ou blocos, se necessrio).Cada segmento de um registro no bloco, mesmo que esteja inteiramente contido no bloco, inclui um campo de descrio do segmento, e cada bloco inclui um campo de descrio do bloco. Estes campos tambm no esto disponveis para o programador.

Seo FILE SECTION LABEL


Clusula LABEL Indica se o arquivo tem ou no registro com informaes de label. Essa clusula obrigatria para cada descrio de arquivo (FD). Utiliza-se do seguinte modo: OMITTED Significa que o label foi omitido, normalmente seu uso para arquivo em cartes, impressoras e arquivos sem informaes de label. STANDARD Quando o arquivo contiver um label que foi formatado pelo sistema, seu uso normal para arquivos em fitas, discos e qualquer outro meio magntico.

Entrada da descrio de registros


Como vimos na FILE SECTION alm da entrada de descrio de arquivos, temos a entrada da descrio de registros. Na entrada da descrio de registro indica-se as caractersticas dos registros tais como tamanho, valores e natureza. O nmero de nvel um recurso empregado em COBOL para que se possa determinar com simplicidade a estrutura de um registro, a hierarquia das informaes (dos dados) dentro de um registro. Exemplo: Pode-se dividir o registro em quantos nveis convier (01 a 49). O primeiro nvel (01) onde reconhecemos todo o registro; a seguir o segundo nvel com as subdivises do registro; depois o terceiro nvel com as subdivises do segundo nvel e assim sucessivamente, definindo uma seqncia de campos. Os itens (ou nveis) que no possuem subdivises so chamados de elementares. Os itens que possuem subdivises so denominados itens de grupo. No exemplo anterior os campos regio, sub-centro, agencia, so itens elementares j o campo Chave um item de Grupo.

Nveis Especiais
Os nmeros de nveis especiais identificam itens que no estruturam registros. Estes nveis especiais so:

77 Identifica um item independente da WORKING-STORAGE ou LINKAGE SECTION que no so subdivises de outros itens, e que tambm no so subdivididos. Sua definio deve comear na margem A. 88 Identifica qualquer entrada de nome de condio que est associada a um valor particular de uma varivel condicional. Veremos maiores detalhes na considerao da clusula VALUE.

FILLER
Um registro sempre iniciado pelo nmero de nvel 01 que indica ser o maior agrupamento e medida que se detalhem os dados, os nmeros de nveis crescem. Pode-se utilizar para um nmero de nvel o valor mximo que 49. O nmero de nvel no necessita crescer de uma forma contnua mas manter a ordem de grandeza. FILLER e Data-Name O Data-Name (nome de dado) aquele nome atribudo ao campo a ser utilizado no programa, isto , define os campos do registro. Um nome de dado pode ter no mximo 30 caracteres de especificao. FILLER um nome genrico atribudo a campos que no tem necessidade de serem especificados, pois no sero utilizados no processamento. No ambiente IBM, o FILLER pode ser tanto um item de grupo, como item elementar.

FILLER (Cont.)
Exemplo: FD CADCONTA LABEL RECORD IS STANDARD. 01 REG-CADCONTA. 05 CO-CHAVE. 10 CO-REGIAO PIC X(03). 10 CO-SUBCENTRO PIC X(03). 10 CO-AGENCIA PIC 9(04). 10 CO-NUMERO PIC 9(07). 05 CO-SALDO PIC S9(11)V99 COMP-3. 05 CO-DATA-ABERT PIC 9(08). 05 CO-DATA-ULT-MOV PIC 9(08). 05 CO-LIMITE-CRED PIC S9(05)V99 COMP-3. 05 CO-RESTRICAO PIC X(01). 05 FILLER PIC X(25).

Regras Sintticas
O nome de dado ou FILLER devem ser escritos logo aps o nmero de nvel. O nome de dado que criado pelo programador deve obedecer s regras de formao das palavras definidas pelo programador. A palavra reservada FILLER utilizada para denominar aqueles campos de informao que no tenham necessidade de serem referenciados no programa. Os nomes de dados definidos na WORKING-STORAGE SECTION e LINKAGE SECTION, devem ser nicos, porque no podem ser qualificados.

Clusula PICTURE (PIC)


Essa clusula define o tamanho, a classe e estrutura de um campo de dados. A funo da clusula PICTURE indicar: O tamanho de um campo, ou seja, quantas posies de memria o campo de informaes ocupa. A classe do campo, isto , indica se o campo numrico, alfanumrico ou alfabtico. Mscaras de edio, isto , detalhes que devem aparecer na impresso do campo. A clusula PICTURE nunca poder aparecer em um item de grupo. Resumindo, a clusula PICTURE sempre estar presente e s estar presente nos itens elementares. Cada caractere, na combinao permitida da PICTURE representar uma posio de memria. Como se ver mais adiante o caractere X, indica a presena de um caractere alfanumrico. Se desejarmos um campo capaz de receber 5 caracteres alfanumricos teramos de definir: PIC XXXXX PIC IS XXXXX PICTURE X(05) PICTURE IS X(05)

A palavra IS opcional. Para se evitar repetio prolongada do mesmo caractere (imagine representar 20 posies ou mais dessa forma), porem, pode-se valer do seguinte artifcio: PIC X(5) onde o nmero entre parnteses representa o nmero de ocorrncias do sinal X. No h espao entre o sinal de PIC e os parnteses e nem entre esses e o nmero.

Clusula PICTURE (PIC) (Cont.)


A sua codificao ficar assim: FD CADCONTA LABEL RECORD IS STANDARD. 01 REG-CADCONTA. 05 CO-CHAVE. 10 CO-REGIAO 10 CO-SUBCENTRO 10 CO-AGENCIA 10 CO-NUMERO 05 CO-SALDO 05 CO-DATA-ABERT 05 CO-DATA-ULT-MOV 05 CO-LIMITE-CRED 05 CO-RESTRICAO 05 FILLER A palavra FILLER pode ser omitida: 05 PIC X(25).

PIC X(03). PIC X(03). PIC 9(04). PIC 9(07). PIC S9(11)V99 COMP-3. PIC 9(08). PIC 9(08). PIC S9(05)V99 COMP-3. PIC X(01). PIC X(25).

Sinais de PICTURE
Os sinais de PICTURE, que sero abaixo descritos, podem ser divididos em dois grupos: PICTURE de leitura PICTURE de edio ou mscara PICTURE de leitura Os sinais que podemos usar so os seguintes: 9, X, V, S, A. Dentro desse tipo de PICTURE , podemos ainda classificar os tipos de itens (campos) que elas definem: So configurados pelos caracteres 9, S e V. O caractere de PICTURE 9, indica a presena de um caractere numrico (de 0 9) naquela posio do campo. O caractere de PICTURE S, indica a presena do sinal aritmtico (+ ou ) em um campo de informaes. Dever ser colocado no incio de uma configurao de caracteres de PIC. Exemplo: PIC S9(04) Indica campo numrico de quatro posies com sinal. O caractere de PICTURE V, indica o posicionamento de uma vrgula decimal implcita. Exemplo: PIC S9(03)V9(02) S e V no ocupam espao na memria.

Numricos

Sinais de PICTURE (Cont.)


Campos Alfabticos So configurados apenas pela letra A. Essa letra A na PIC indica a presena de um caractere alfabtico ou do caractere branco naquela posio. Exemplo : NOME PIC A(04). 4 posies alfabticas. So combinaes de X. Indica que aquela posio conter um caractere alfanumrico, o que vale dizer que o caractere de PICTURE X, permite a definio de um campo, capaz de aceitar qualquer caractere (numrico, alfabtico ou especial). Exemplo: 10 ENDERECO PIC X(30).

Campos Alfanumricos

Sinais de PICTURE
Resumindo temos:
X A indica campo alfanumrico indica campo alfabtico 9 V S indica campo numrico indica vrgula decimal implcita indica sinal algbrico

Exemplos: O smbolo "V" na coluna armazenamento na memria significa uma vrgula decimal implcita.

PICTURE de edio
A PICTURE de edio refere-se preparao de dados para impresso. Somente campos numricos so passveis de edio. O formato representado por qualquer combinao dos seguintes caracteres: 9 V , Z * B $ + . CR DB. Os caracteres 9 e V so usados do mesmo modo j visto. O caractere "," (vrgula decimal) quando usado, inserido na posio indicada. O valor do item ser automaticamente alinhado por esta vrgula. As posies direita da vrgula devem ser constitudas apenas por caracteres do tipo: 9 Z * . $ + CR DB Z: indica a supresso de zeros no significativos (zeros esquerda). No possvel colocar-se Z direita de um caractere 9. "*": usado como proteo do nmero impresso. Os zeros esquerda sero substitudos por asteriscos. _ esquerda dos asteriscos poderemos usar apenas os smbolos ". , $ + ".

PICTURE de edio (Cont.)


"$": este caractere, usado na extrema esquerda ou direita do nmero, impresso na posio onde estiver. "+": usado nas posies extremas dos campos, aparecem na posio onde estiver. Se o valor do campo for positivo aparece o sinal "+" se for negativo aparece o sinal "". "-": (usado como o +) se o valor do campo for negativo ser impresso o sinal "", entretanto se for positivo aparecer um espao em branco. B: (letra B maiscula) um smbolo de edio que insere branco exatamente no local onde estiver codificado. ".": (ponto) insere o ponto no local onde est. CR, DB: so siglas utilizadas com o significado de crdito (CR) e dbito (DB). Elas aparecem na posio extrema direita da PICTURE. Se o valor do item for negativo, esses caracteres sero impressos direita do nmero, caso contrrio sero substitudos por brancos.

Exemplo
Arquivo de Entrada: CADCONTA Arquivo de Sada: LISTAREL Nome do registro: REG-LISTAREL DATA DIVISION. FILE SECTION. FD CADCONTA LABEL RECORD IS STANDARD DATA RECORD IS REG-CADCONTA. 01 REG-CADCONTA. 05 CO-CHAVE. 10 CO-REGIAO PIC X(03). 10 CO-SUBCENTRO PIC X(03). 10 CO-AGENCIA PIC 9(04). 10 CO-NUMERO PIC 9(07). 05 CO-SALDO PIC S9(11)V99 05 CO-DATA-ABERT PIC 9(08). 05 CO-DATA-ULT-MOV PIC 9(08). 05 CO-LIMITE-CRED PIC S9(05)V99 05 CO-RESTRICAO PIC X(01). 05 FILLER PIC X(25). FD LISTAREL LABEL RECORD ARE OMITTED DATA RECORD IS LINHA. 01 REG-LISTAREL. 05 FILLER PIC X(001). 05 LD-REGIAO PIC X(003). 05 FILLER PIC X(005). 05 LD-SUBCENTRO PIC X(003). 05 FILLER PIC X(005). 05 LD-SALDO PIC ZZZ.ZZ9,99.

COMP-3. COMP-3.

Tipos de Campos
Zonado Campo zonado aquele onde um algarismo representado em um byte no formato zona e dgito. O tamanho mximo de dgitos deste tipo de campo 18 que ser representado em 18 bytes. Para informar na definio que o campo zonado, basta no codificar a clusula USAGE, ou seja aps o "TAMANHO" colocar o ponto. Exemplo: 05 CPO-ZONADO PIC 9(10).

Tipos de Campos (Cont.)


Compactado Neste campo cada algarismo representado em meio byte e o meio byte mais direita contm o sinal do campo. Exemplo: Um Campo de 5 dgitos com o valor +345 tem sua representao em hexadecimal X'00345C'. O tamanho mximo de dgitos desse campo 17, que sero representados em 9 bytes. A frmula para clculo do nmero de bytes de um campo compactado: a) Nmero mpar de dgitos: Somar 1 ao nmero de dgitos e dividir o resultado por 2. b) Nmero par de dgitos: Somar 2 ao nmero e dividir o resultado por 2. Observe que em um campo com nmero de dgitos par ocorre a perda do ltimo meio byte esquerda. Para definir um campo compactado, basta codificar a clusula USAGE igual a "COMP3". Exemplo: 05 CPO-COMPACTADO PIC 9(10) COMP-3. ou 05 CPO-COMPACTADO PIC 9(10) PACKED-DECIMAL. O VS COBOL II usa as clusulas: PACKED-DECIMAL e COMP-4, como clusulas equivalentes ao COMP-3. A constante USAGE opcional.

Tipos de Campos (Cont.)


Binrio O campo binrio oferece uma maior capacidade de representao dentro de um byte. Em um campo de 4 casas o valor 6859 armazenado em dois bytes e com representao hexadecimal X'1ACB'. A definio do campo por exemplo ficaria da seguinte forma: 05 CPO-BINARIO PIC 9(04) BINARY. O uso deste campo tem aplicao prtica para representar valores at 9.999, embora os dois bytes binrios represente um valor mximo de 32.768. A definio PIC 9(09) BINARY, tem sua aplicao para valores at 999.999.999, embora os quatro bytes binrios possa tambm representar um valor mximo de 2.147.483.648. A clusula COMP tambm define campos binrios.

Working Storage Section


Aqui se define os dados de trabalho do programa, ou seja todos os campos de informao (constantes ou variveis), dos quais o WORKING-STORAGE SECTION. programador lanar mo e que no fazem parte dos arquivos e neste item classificam-se: contadores, acumuladores, cabealhos de impresso, reas de apoio ou reas de armazenagem temporria, linhas de impresso, constantes do programa, etc. Esta seo descreve registros, constantes e reas de trabalho que no fazem parte de arquivos externos, mas que so necessrios para a execuo. A distribuio destes dados, faz-se da mesma forma que na FILE SECTION, acrescentando-se a existncia do nvel 77, que o nvel que define dados independentes, isto , aqueles que no so estrutura de dados ou parte deles. Os dados que se relacionam com outros, ou seja, so subdivididos, devem ser agrupados obedecendo as leis de descrio de estrutura de dados e comeando do nvel 01. Exemplo nvel 77: WORKING-STORAGE SECTION. 77 CONTADOR 77 MENS PIC 9(005). PIC X(008).

VALUE
VALUE IS literal Para se especificar os valores iniciais de constantes e contadores usar a clusula VALUE. Todo item definido com a clusula VALUE na WORKINGSTORAGE SECTION receber o valor especificado pelo literal para seu valor inicial, podendo ser mudado na PROCEDURE DIVISION. A clusula VALUE no deve ser especificada para descries de dados que tenham a clusula OCCURS ou sejam subordinadas a itens que contenham a clusula OCCURS. A clusula VALUE pode ter um segundo formato que usado para descrever um nome de condio. Cada nome de condio normalmente necessita de um nmero de nvel 88 para sua definio; entretanto, a clusula VALUE no seu segundo formato associa valor, valores ou faixa de valores a um determinado nome de condio. Quando a opo THRU utilizada, os valores que delimitam os intervalos devem estar em ordem crescente. O tipo de literal usado na clusula VALUE deve ser coerente com a descrio do campo que lhe associado.

VALUE (Cont.)
Exemplo: 01 TESTA-ESTADOS. 05 TA-ESTADO SPACES. 88 RIO-DE-JANEIRO 88 SAO-PAULO 88 MINAS-GERAIS PIC X(02) VALUE

VALUE 'RJ'. VALUE 'SP'. VALUE 'MG'.

A seguir veremos um exemplo de codificao da DATA DIVISION, apenas para efeito didtico. Note que usamos a clusula VALUE e os valores iniciais dos campos que a possuem so as que essa clusula define.

Exemplo
DIVISION.

SECTION.

ADCLIENTE L RECORD IS STANDARD. EG-CADCLIENTE. 5 CC-NOME-CLI 5 CC-ENDE-CLI 5 CC-ESTA-CLI 5 FILLER

PIC X(50). PIC X(40). PIC X(02). PIC X(22).

AIDA L RECORD ARE OMITTED. INHA. 5 FILLER 5 LD-NOME-CLI 5 FILLER 5 LD-ENDE-CLI

PIC X(01). PIC X(50). PIC X(10). PIC X(50). PIC 9(02) PIC 9(03) VALUE 99. VALUE ZERO.

KING-STORAGE SECTION. C100-LINHAS T150-PAGINA

200-REG-CADCLIENTE. 200-BRANCO 200-CIDADE 200-ESTADO 200-SIGLA-ESTADO

PIC X(10) VALUE SPACES. PIC X(15) VALUE 'SAO PAULO'. PIC X(15). PIC X(02).

BLANK WHEN ZERO


A clusula BLANK WHEN ZERO substitui o item por espaos, todas as vezes que seu valor for em todas posies zeros. Seu formato : BLANK WHEN ZERO

REDEFINES
A clusula REDEFINES utilizada para re-escrever uma rea ou de um arquivo ou da WORKING-STORAGE, de modo que os caracteres pertencentes a rea possam ser referenciados por outros nomes. 01 REG-ARQMOV. 05 MO-CHAVE. 10 MO-REGIAO 10 MO-SUBCENTRO 10 ... 05 MO-TIPO-MOV 05 RMO-TIPO-MOV REDEFINES MO-TIPO-MOV

PIC X(03). PIC X(03). PIC 9(02). PIC X(02).

No exemplo anterior, a rea descrita para MO-TIPO-MOV a mesma que descrita para RMO-TIPO-MOV. Contudo, um numrico o outro e alfanumrico.

REDEFINES (Cont.)
Outra forma redefinir o item de grupo, a diviso de campos para esses itens de grupo no a mesma, porm o tamanho total deve ser igual. 01 REG-ARQMOV. 05 MO-CHAVE. 10 MO-REGIAO 10 MO-SUBCENTRO 05 RMO-CHAVE REDEFINES MO-CHAVE. 10 MO-PRIMEIRA 10 MO-SEGUNDA 10 .... 10 MO-SEXTA 05 ....

PIC X(03). PIC X(03). PIC X(01). PIC X(01). PIC X(01).

De maneira geral, a clusula REDEFINES permite a referenciao da mesma rea de memria do computador para conter itens de dados diferentes ou agrupamento alternativo da mesma informao. Isto , a clusula REDEFINES permite a redefinio da rea de memria, e no dos itens que ocupam aquela rea.

Linkage Section
utilizada para ligar o programa principal em COBOL a outros programas, muito utilizado em programao modular, para comunicao entre o programa principal e as subrotinas passando parmetros.

LINKAGE SECTION

O seu funcionamento parecido com o da Working, com a diferena que os dados aqui declarados sero compartilhados com outro programa, podendo tanto enviar como receber dados nessa rea. ( uma rea comum entre programas).

Capitulo 10 rogramao Estruturada

ROGRAMAO ESTRUTURADA
O COBOL MORREU... VIVA O COBOL! Apesar de todo ano aparecerem notcias sobre sua morte, o Cobol resiste bravamente. Estima-se que existam cerca de 65 bilhes de linhas de cdigo Cobol do mundo inteiro, crescendo a um ritmo de 5 bilhes de linhas anualmente. Se considerarmos que cada programa Cobol patrimnio da empresa, e que o valor de cada linha eqivale a U$ 15,00 (estudo feito pelo Gartner Group), temos o equivalente a U$ 975.000.000.000,00 (novecentos e setenta e cinco bilhes de dlares) em patrimnio, escritos em linguagem Cobol no mundo inteiro Um patrimnio considervel, que no ser abandonado da noite para o dia! O seu universo de programadores deve provavelmente chegar a mais de 2 milhes de profissionais usando esta linguagem, principalmente mantendo Legacy Systems, alguns com mais de 20 anos de idade. Isso significa que sair do Cobol no uma tarefa muito simples e para muitas empresas manter essa linguagem uma questo de

ROGRAMAO ESTRUTURADA (Cont.)


Uma verso Cobol orientada a objeta (00) no uma contradio de termos. O conceito de 00 prope um foco data centered, onde um objeto constitudo de dados e de cdigo que os manuseiam. A estrutura da aplicao sugerida pela estrutura dos dados. Este conceito adapta-se muito bem ao Cobol, pois est linguagem oferece boas facilidades para organizar e processar estruturas de dados. As primeiras verses de 00 e visual Cobol j esto comeando a ser disponibilizados no mercado, pelos tradicionais fornecedores de Cobol Workbench, como microfocos e computer associates. Uma recomendao para aqueles usurios que esto hoje altamente dependentes do Cobol, caminhar para uma evoluo gradual dos seus legacy systems, pela adoo dos conceitos de 00 nesta linguagem. O uso do 00Cobol pode reduzir a curva de aprendizado, pois a linguagem j conhecida dos tcnicos, sendo que a novidade (conceitos de 00), includa como extenso da linguagem. Entretanto, estas primeiras verses no esto padronizados, pois o padro ANSI-00 ainda est em elaborao. Este um risco dos pioneiros do 00Cobol: a sintaxe do produto escolhido no estar aderente a padres

EVOLUO DO COBOL
O Cobol vem evoluindo nos ltimos anos, e a verso 85, conhecida como Structured Cobol (na verso IBM o Cobol/II) j quebrou o paradigma de programa monoltico das antigas verses, e incorporou construes similares s encontradas em linguagem como Pascal. Podemos citar as construes. IF / END-IF READ / END-READ Evolues do PERFORM, que passa a se comportar como Do-while e Do-until etc. Infelizmente, os velhos hbitos continuam arraigados e a maioria dos programas Cobol escritos hoje em dia no aproveitam adequadamente o conceito de estrutura embutido na linguagem. O mesmo problema poder acontecer com a verso OO. Sem uma conceituada slida nos fundamentos deste paradigma, os desenvolvedores continuaro a usar o Cobol nos conceitos antigos, hoje sem dvida anacrnicas. por esta razo que inclumos este capitulo de PROGRAMAO ESTRUTURADA neste curso, onde abordaremos os principais objetivos desta tcnica, e tambm novos conceitos para melhorar a qualidade dos programas como ACOPLAMENTO e COESO. Alm disso, apresentamos uma nova

so Geral de Programao Estruturada


O termo PROGRAMAO ESTRUTURADA foi criado pelo Prof. Edsger Dijkitra em meados da dcada de 60, e obteve ateno de um nmero significativo de pessoas em uma conferncia de Engenharia de Software em 1968. Porm, no foi este o evento que impulsionou a metodologia, e sim pela sua carta (agora famosa) enviada ao editor do CACM, entitulada A instruo GO TO considerada prejudicial. Infelizmente, os anos que seguiram a carta, a controvrsia sobre a sentena GO TO sombreou os mais significantes aspectos da Programao Estruturada. Algumas vezes, a programao sem GO TO e a Programao Estruturada eram considerados como conceitos sinnimos. Porm, os objetivos da programao estruturada vo alm de simplesmente criar programas sem sentenas GO TO.

que Programao Estruturada


Base terica para toda a lgica de procedimento, isto , para o tipo de lgica que descrevemos tradicionalmente com um diagrama (fluxograma foi o mais utilizado). Em meados da dcada de 60, dois cientistas de computador italianos, Corrado Bonh e Gioseppe Jacopini, provaram matematicamente que qualquer lgica de procedimento poderia ser derivado das combinaes de trs tipos bsicos de estruturas: SEQUNCIA SELEO (IF-ELSE ou CASE) REPETIO (DO-WHILE ou DO-UNTIL) Essas trs estruturas formam o ncleo da Programao Estruturada. A descoberta de que essas trs so suficientes para qualquer estrutura lgica arbitrariamente complexa importantssima, to importante quanto a descoberta da Engenharia de que qualquer forma de lgica de hardware pode ser construda pelas combinaes das portas AND, OR e NOT.

ementos da Programao Estruturada


A Programao Estruturada se concentra em tpicos como: Programao sem GO TO (completo ou parcial banimento da sentena) Programao com construo de controle padronizadas: Seqncia, Seleo e Repetio. Na forma do programa estruturado Na aplicao das convenes de codificao estruturada norteia todo o processo de programao. Impe uma disciplina em cada estgio da criao de sistema de software e a organizao dos programadores. Trata-se portanto de uma coleo de metodologias, ao Invs de um nico mtodo. Programao estruturada uma metodologia que leva a disciplina a forma do programa, processo do projeto, codificao e teste. uma metodologia para construo de programas modulares sob uma disposio hierrquica usando construes de controle padronizadas.

bjetivos da Programao Estruturada


Melhorar a leitura do Programa Fazer com as que a correspondncias entre o programa fonte e seu processo de execuo seja o mais trivial possvel. Encorajar a localizao das estruturas de controle e o uso dos dados. Reduzir a complexidade do programa atravs da simplificao dos seus caminhos de controle. Possibilitar a leitura do programa, do campo ao fim, sem nenhum pulo de controle. Melhorar a eficincia do programa. Identificar a confiabilidade do programa Construir o programa de forma a eliminar a necessidade de sua depurao. Fornecer uma disciplina para a programao Forar os programadores a pensar sistematizar o processo de programar.

opriedades da Programao Estruturada


O programa dividido em um grupo de mdulos arranjados de forma hierrquica, que representam o seu relacionamento lgico e de execuo. O fluxo de execuo entre os mdulos est restrito a simplicidade do seguinte esquema: O controle passa para a nica entrada do mdulo, que aps o processamento, segue para a nica sada do mdulo. O controle retorna ao mdulo de chamada. A construo do mdulo padronizada de acordo com as regras tradicionais de modularizao e com as construes de controle bsicos permitidas. A documentao do programa facilitada com a incluso de observaes na prpria codificao fonte, explicando as funes, estruturada de dados e o relacionamento entre os mdulos.

Construes de Controle
SEQNCIA

Quando o controle de execuo do tipo SEQUNCIA usado, os comandos so executados um aps o outro, na mesma ordem em que eles aparecem na codificao fonte. Ex: MOVE COMPUTE MOVE A TO B. C = B* 12 C TO Y.

Construes de Controle (Cont.)


SELEO (IF/ELSE)

Quando se usa a estrutura de SELEO (IF/ELSE), uma condio testada. Se a condio verdadeira (IF), executa-se um conjunto de instrues. Seno (ELSE), executa-se outro conjunto. No final, os dois conjuntos se encontram em um ponto comum para continuidade de execuo chamado Terminator (END-IF). Quando uma das duas portas possveis, SE (IF) e SENO (ELSE), no tiver instrues para ser executada, deve-se mesmo assim codific-lo

Construes de Controle (Cont.)


SELEO (IF/ELSE) Uma estrutura de SELEO (IF/ELSE) tem o seguinte formato bsico: IF condio sentena-1 ELSE sentena-2 END-IF Quando a sentena-1 desta estrutura de seleo contm outra estrutura de seleo, ela chamada de IF aninhado (ou encadeado):
V V V F F F

Construes de Controle (Cont.)


Se a aplicao requer mais de trs nveis de decises aninhadas (ou encadeadas), o programador deve separ-las em partes distintas, isto , em mdulo separados que podem ser entendidos separadamente. Estudos feitos por Noam Chomsky no campo da lingstica e Gerald Weinberg no campo da programao sobre dificuldade do ser humano em entender a complexidade , sugerem que muito poucas pessoas podem entender mais do que trs nveis de IFs aninhados. Finalmente, muitos problemas com IF aninhados so uma indicao de que o programador no est acostumado com tabelas de deciso. Assim, o mtodo de tabela de deciso provavelmente o melhor modo para assegurar de que todas as combinaes foram expressas, e de que as redundncias, ambigidades e contradies foram eliminadas, e ainda, que a lgica est organizada de modo que possa ser codificada de forma trivial.

Construes de Controle (Cont.)


SELEO (CASE)
Integer value = ?

Case-1 function

Case-2 function

Case-3 function

Case-4 function

= m Case-m function

Na estrutura SELEO (CASE), a estrutura aplicada de forma que uma, entre um conjunto de alternativas, seja escolhida com base em um teste de condio. No VS COBOL II representa-se esta estrutura atravs do comando EVALUATE.

Construes de Controle (Cont.)


DO-UNTIL (FAA AT QUE) Um mdulo ou Procedure executado, aps o qual ocorre um teste de condio de fim de loop. Se a condio verdadeira, o loop terminado e a execuo continua com a prxima instruo seqencial. Se a condio falsa, o mdulo executado novamente. Note que o loop com DO-UNTIL executado pelo menos uma vez. No VS COBOL II representa-se esta estrutura atravs do comando PERFORM WITH TEST AFTER UNTIL ...

REPETIO (DO-UNTIL)

PROCEDURE

F CONDIO

Construes de Controle (Cont.)


DO-WHILE (FAA) Uma condio de tmino testada. Se a condio falsa, o loop terminado e a execuo continua com a prxima instruo sequencial. Se a condio verdadeira, um mdulo ou procedure executado e a condio testada novamente. Note que, se a condio inicialmente falsa, o loop no ser executado No VS COBOL II representa-se esta estrutura atravs do comando PERFORM WITH TEST BEFORE UNTIL...

REPETIO (DO-WHILE)

PROCEDURE

CONDIO F

Construes de Controle (Cont.)


DO-n-TIMES(FAA n VEZES Um nmero de vezes estabelecido. Quando o limite atingido, o loop terminado e a execuo continua com a prxima instruo sequaencial. Seno, um bloco de instrues ou mdulo executado
CONDIO PROCEDURE

REPETIO (DO-n-TIMES)

No VS COBOL II representa-se esta estrutura atravs do comando PERFORM UNTIL n TIMES

Construes de Controle (Cont.)


FUGA
A possibilidade de FUGA (conhecida tambm como EXIT) para um ponto de sada do mdulo uma tcnica muito til no caso de ser necessrio pular algumas instrues devido a erros ou situaes excepcionais. Em muitas linguagens de programao, a fuga representada por uma sentena GO TO (inclusive no VS COBOL II). V

Construes de Controle (Cont.)


FUGA
Neste caso, a instruo GO TO no ir contra os fundamentos da Programao Estruturada, porque o seu uso ficar ao desvio para um ponto de sada do mdulo. Ex: PROCEDURE DIVISION. ... 100-LETURA-ARQENT SECTION. READ ARQEBT AT END GO TO 100-LEITURA-ARQENT-RETURN END-READ. COMPUTE VALOR = VALOR * 1,10. IF VALOR > 100 MOVE VALOR TO LIMIT-1 FUGA ELSE MOVE VALOR TO LIMIT-2. 100-LEITURA-ARQENT-RETURN. EXIT. Ponto de sada do mdulo

adronizao do formato do mdulo


Um programa estruturado um programa modular. Porm, adicionalmente as regras bsicas de modularizao, a forma do prprio mdulo tambm est restrita a algumas regras. Regras estritas de formato para a construo de um mdulo estruturado so um outro meio de simplificar o programa. Isto permite ao programador se concentrar no significado do programa, ao invs de sua forma sinttica. As regras para a construo de um mdulo so: O mdulo tem uma nica entrada e uma nica sada. O ponto de sada deve seguir o ponto de entrada na codificao, com nenhum outro deste tipo entre eles. Isto quer dizer que no deve haver meios de se entrar no meio do mdulos, ou por qualquer ponto intermedirio. Deve-se obrigatoriamente iniciar pelo ponto de entrada, no haver qualquer interrupo e pontos intermedirios, a no pelo mtodo de fuga onde por alguma condio desvia-se para o ponto de sada do mdulo. O mdulo uma estrutura fechada. Deve executar uma nica funo dentro do sistema. Este o conceito de CAIXA PRETA, isto , conhece-se o input (as entradas), o output (as sadas), mas no a necessidade de se conhecer como feito o processo em detalhes,

adronizao do formato do mdulo (Cont.)


O mdulo uma estrutura fechada. Deve executar uma nica funo dentro do sistema. Este o conceito de CAIXA PRETA, isto , conhece-se o input (as entradas), o output (as sadas), mas no a necessidade de se conhecer como feito o processo em detalhes, apenas qual a funo a ser executada. As construes de controle so restritas e padronizadas. Seqncia, Seleo (com os recursos adicionais aceitos), Repetio e Fuga.

IN U PT

OTU UP T

F N UO

dres para programaes estruturadas


Programa dividido em pedaos independentes, chamado mdulos. Um mdulo em COBOL pode ser considerado como qualquer uma das seguintes unidades de programao: Pargrafo Seo Subprograma Programa aninhado ( COBOL II) Um mdulo uma unidade fechada e completa, cuja codificao lgica e fisicamente separada dos outros mdulos. Em COBOL pode no ser separado fisicamente, como nos casos de Pargrafo, Seo e Programa aninhado. Um mdulo apresenta uma nica funo lgica do programa. O tamanho do mdulo no deve exceder 50 linhas de instrues, ou o tamanho de uma pgina da listagem. O mdulo est limitado a um ponto de entrada e um ponto de sada. Durante a execuo o controle entra pelo primeiro e sai pelo segundo. Os mdulos esto relacionados dento de uma estrutura de controle hierrquico. Cada nvel da estrutura de controle representa uma descrio funcional mais detalhada esse fato garante a passagem do controle de programa de mdulo a mdulo durante a execuo. No deve haver nenhum LOOP na estrutura de controle. Isso significa que

dres para programaes estruturadas (Con


Todos os nomes de variveis e mdulos devem ser significativos. Os nomes dos mdulos devem sugerir sua funo e os nomes das variveis sua finalidade no programa. Nomes de variveis que sejam locais (usadas somente em um mdulo) devem comear com o mesmo prefixo. As nicas construes de controle aceitveis so seqncia, seleo, repetio e fuga. Deve-se codificar uma instruo por linha. Se uma instruo requer mais de uma linha, as linhas sucessivas devem ser diferenciadas. As sentenas IFs no devem ser encadeadas em mais de trs nveis. O uso da sentena GO TO est limitado ao mdulo em que ocorrer. Isto significa que no deve ser usado para transferir o controle para outro mdulo: somente usado no desvio (fuga) para o ponto de sada dentro de um mdulo. A codificao obscura (truque) deve ser evitada.

ocumentao Grfica do Programa


Tcnicas de Diagramao Diagrama de Estrutura tima para Projeto Estruturado de Sistemas, pois trabalham em um nvel macro, organizando a hierarquia dos mdulos e documentando inclusive os dados que trafegam entre os mdulos. Ruim para projetos detalhados de programa. Diagrama HIPO Bom para projeto detalhado de programas pequenos. Rapidamente se tornam aglomerados e difceis de entender. Diagrama Warnier-Orr Combina as tcnicas de Projetos do sistema e Programa detalhado. Ruim para mostrar a lgica condicional assim como outras tcnicas de detalhe. Diagrama Jackson Bom para o projeto do programa, mas no ajuda quando a lgica do programa for complexa. Fluxograma timo para detalhar a lgica de programa pequenos. Para programas complexo tornam-se embaraosos. Incentivam a uma viso do programa que leva a uma estrutura pobre (seqencial).

ocumentao Grfica do Programa (Cont.)


Linguagem Estrutura e Pseudo-cdigo Linguagens Estruturas so escritas de uma forma que o usurio possa atend-las, so estruturas hierarquicamente, e possuem uma estrutura similar a codificao de programas. Pseudo-cdigo utilizam uma notao mais formal, orientado para o profissional de PD. A maioria das linguagens da 4 gerao mais simples e fcil de entender do que o Pseudo-cdigo. Quadros Nassi-Shneiderman Bom para detalhar programas, mas muito pobre para mostrar a hierarquia (seqencial). Diagramas de Ao Foram projetadas para resolver problemas das outras tcnicas de diagramao . So rpidos e fceis de desenhar. Cobre desde a viso geral at os detalhes a nvel de codificaes. Possibilitam a construo de programas estruturados e so mais grficos que pseudocdigos.

iagrama de Ao - Seqncia
Construes de Controle

SEQUNCIA COMANDO-1 COMANDO-2 COMANDO-3 . . . COMANDO-n

Diagrama de Ao - Seleo
Construes de Controle SELEO (IF-THEN-ELSE)

IF condio

IF condio

ELSE

Diagrama de Ao - Case

SELEO (CASE) WHEN condio-1

WHEN condio-2

WHEN condio-3

WHEN condio-n

iagrama de Ao - Repetio
Construes de Controle REPETIO (DO-WHILE) EM VS COBOL II: PERFORM WITH TEST BEFORE UNTIL FORMATO OUT-OF-LINE nome-do-mdulo UNTIL condio

FORMATO IN-LINE UNTIL condio

Diagrama de Ao Repetio (Cont.)


Construes de Controle REPETIO (DO-UNTIL) EM VS COBOL II: PERFORM WITH TEST AFTER UNTIL FORMATO OUT-OF-LINE nome-do-mdulo

UNTIL condio FORMATO IN-LINE

UNTIL condio

iagrama de Ao - Repetio (Cont.)


Construes de Controle REPETIO (DO-n-TIMES) EM VS COBOL II: PERFORM UNTIL n TIMES FORMATO OUT-OF-LINE nome-do-mdulo n TIMES

FORMATO IN-LINE n TIMES

Diagrama de Ao - Fuga
Construes de Controle FUGA

IF condio

iagrama de Ao - Estruturao

Entendendo o diagrama ESTRUTURAO

Diagrama de Ao - DO

Entendendo o diagrama DO (sem repetio) nome-do-mdulo

Diagrama de Ao - DO (Cont.)
Entendendo o diagrama DO (mdulo pr-definido) TRATAR-ERRO

Define-se o modulo apenas 1 vez no diagrama. TRATAR-ERRO As outras chamadas apenas coloca-se o nome dentro de um retngulo.

Diagrama de Ao - DO (Cont.)
Entendendo o diagrama DO (ROTINA DE USO COMUM ou PROCEDURE)

CALCDATA

Diagrama de Ao - DO (Cont.)
Entendendo o diagrama DATA ACTION

READ

CLIENTE

agrama de Ao Comparativo com o Fluxograma


PGM001
PROCESSAMENTO LEITURA

INICIO

LER CLIENTE

LEITURA PROCESSA MENTO

F EOF?

CH-FIM = 1

SOMAR 1 EM CT-LIDOS

MOVER 1 PARA CH-FIM

LEITURA

TERMINO

SADA

SADA

SADA INICIO TERMINO

SADA

SADA

agrama de Ao Comparativo com Fluxograma


PRINCIPAL INICIO LEITURA LER CLIENTE SE EOF MOVER 1 PARA CH-FIM ELSE SOMAR 1 EM CT-LIDOS PROCESSAMENTO UNTIL CH-FIM = 1

LEITURA TERMINO

Diagrama de Ao - Exerccio

A) FLUXOGRAMA

MOVTO

CADANT

CADATU

ARQUERRO

Diagrama de Ao - Exerccio (Cont.)


B) LAY-OUTs

OVTO TIPATU-MOV VALOR-MOV

CHAVE-MOV N-MOV CTACOR-MOV

DANT NOME-ANT SLDATU-ANT SLDDISP-ANT LIMCRED-ANT

CHAVE-ANT N-ANT CTACOR-ANT

DATU NOME-ATU SLDATU-ATU SLDDISP-ATU LIMCRED-ATU

CHAVE-ATU N-ATU CTACOR-ATU

QERRO VALOR-ERR OBS 1 OBS 2-ATU

CHAVE-ERRO N-ERR CTACOR-ERR

Diagrama de Ao - Exerccio
1)Atualizar o cadastro de clientes(CADANT CADATU) partir do arquivo MOVTO. 2) Somente o campo VALOR-MOV ser atualizado e dever obedecer as seguintes condies: a) TIPATU-MOV = 1 (Desbloqueio). Somar VALOR-MOV no campo SLDDISP-ATU. b) TIPATU-MOV = 2 (Depsito de cheques). Somar VALOR-MOV no campo SLDATUATU. c) TIPATU-MOV = 3 (Depsito em dinheiro). Somar VALOR-MOV nos campos SLDATU-ATU e SLADDISP-ATU. d) TIPATU-MOV = 4 (Dbito) Na funo de dbito dever ser considerado o tipo de cliente. Para clientes especiais h uma linha de emprstimo automtico que informado no campo LIMCRED-ANT, que estar zerado quando o cliente no tiver conta especial. Se VALOR-MOV for maior que o Saldo (SLDDISP-ANT + LIMCRED-ANT), gravar o ARQERRO, conforme layout, com a constante SEM FUNDOS no campo OBS1, e o campo OBS2 dever ser formatado com a constante CONTA ESPECIAL se for cliente especial , ou CONTA NORMAL se o cliente no tiver limite de crdito. Se VALOR-MOV for menor ou igual que Saldo (SLDDISP-ANT + LINCRED-ANT), subtra-lo dos campos SADDISP-ANT e SLDATU-ANT.

B) PROCEDIMENTOS

Diagrama de Ao - Exerccio (Cont.)


3) Poder existir registro no CADANT sem correspondente no MOVTO, neste caso gravar o registro do CADANT no CADATU sem qualquer alterao. 4) Se o registro do MOVTO no tiver correspondente no CADANT, gravar em ARQERRO, com a constante NO CADASTRADA no campo OBS1 e brancos no campo OBS2. 5) Poder haver mais que um registro do MOVTO. Observaes : Os arquivos MOVTO e CADANT esto classificado em ordem ascendente, pelos campos Chaves (CHAVE-MOV e CHAVE-ANT).

C) PROCEDIMENTOS

Diagrama de Ao - Exerccio (Cont.)


D) COPYs

MOVTO 01 REG-MOVTO 03 CHAVE-MOV. 05 AGN-MOV 05 CTACOR-MOV 03 TIPATU-MOV 03 VALOR-MOV 03 FILLER

PIC PIC PIC PIC

PIC 9(4). 9(6). X. S9(8)V99. X(59).

CADANT 01 REG-CADANT. 03 CHAVE-ANT. 05 AGN-ANT 05 CTACOR-ANT 03 NOME-ANT 03 SLDATU-ANT 03 SLDDISP-ANT 03 LIMCRED-ANT

PIC PIC PIC PIC PIC PIC

9(4). 9(6). X(40). S9(8)V99. S9(8)V99. S9(8)V99.

Diagrama de Ao - Exerccio (Cont.)


D) COPYs
01 REG-CADATU. 03 CHAVE-AUT. 05 AGN-ATU 05 CTACOR-ATU 03 NOME-ATU 03 SLDATU-ATU 03 SLDDISP-ATU 03 LIMCRED-ATU

ADATU

PIC 9(4). PIC 9(6). PIC X(40). PIC S9(8)V99. PIC S9(8)V99. PIC S9(8)V99.

RQERRO 01 REG-ERRO. 03 CHAVE-ERRO. 05 AGN-ERR 05 CTACOR-ERR 03 VALOR-ERR 03 OBS1 03 OBS2 03 FILLER

PIC 9(4). PIC 9(6). PIC S9(8)V99. PIC X(20). PIC X(20). PIC X(20).

Captulo 11 Procedure Division

rocedure Division - Unidades


Esta a quarta diviso do COBOL, aqui descreveremos os procedimentos necessrios para serem seguido pelo computador para dar soluo ao problema. nela que especificamos as aes de entrada e sada de dados, os movimentos de dados e os clculos necessrios para o processamento. (AQUI ENTRA O QUE VOCE APRENDEU EM LGICA) A PROCEDURE DIVISION consiste de 4 unidades, e esto sujeitos seguinte hierarquia: SEO PARGRAFO SENTENA COMANDO

Seo
Os programas podem ser compostos de uma ou vrias sees (SECTION), sendo que cada seo por sua vez pode ser composta por um vrios pargrafos. Nomes para Sees: Os nomes podem ser formados pelos caracteres: 0 a 9, A a Z e hfen; No podem iniciar e finalizar com hfen; Um nome de seo deve ser nico; O nome de seo deve ser escrito partir da margem A, seguido por um espao em branco e a palavra SECTION seguida por um ponto; Um nome de seo dispensvel se a PROCEDURE DIVISION consistir de somente uma seo; Uma seo termina quando comea outra seo; Uma seo deve ser imediatamente seguida por um nome de pargrafo.

Pargrafo
Um pargrafo constitudo de uma ou mais sentenas. Nomes para os pargrafos: Os nomes podem ser formados pelos caracteres: 0 a 9, A a Z e hfen. No podem iniciar nem finalizar com hfen; O tamanho mximo de 30 caracteres; Um nome de pargrafo seguido por um ponto. Deve comear na margem A.

Sentena

nsiste de um ou vrios comandos e termina sempre por um ponto.

emplo: MOVE CC-REGIAO MOVE CC-CONTA TO LD-REGIAO TO LD-CONTA

WRITE REG-LISTAREL AFTER 2.

Comando
a menor unidade da PROCEDURE DIVISION. Especifica a ao que se deve executar. uma combinao sinttica vlida de palavras que comeam com um verbo COBOL, tais como MOVE, ADD, READ, WRITE, etc. So quatro as categorias de comandos COBOL: Dirigidos ao Compilado r Os comandos dirigidos ao Compilador so comandos que especificam aes a serem tomadas durante normalmen te a compilao do programa. Imperativo Um comando imperativo especifica que uma ao incondicional para ser tomada pelo programa. Uma srie de comandos imperativos podem ser especificados sempre que um comando imperativo for permitido. Na lista abaixo esto a maioria dos comandos imperativos COBOL: ARITMTICOS CLASSIFICAO MOVIMENTAO ADD MERGE ACCEPT DATE DAY COMPUTE RELEASE INITIALIZE Condicional Um comando condicional especifica que uma ao deve ser tomada caso uma dada condio estipulada no programa seja verdadeira. Na lista abaixo esto alguns comandos condicionais do COBOL: IF THEN ELSE END-IF Abrangncia Em geral, um comando ou clusula do COBOL II pode ter delimitadores de abrangncia na forma explcita ou implcita. Usa-se o delimitador de abrangncia na forma explcita para transformar um comando condicional em um comando imperativo. Explcitos Um delimitador explcito marca o fim de um comando END-ADD END-IF END-SEARCH Implcitos Um delimitador implcito um ponto que termina a abrangncia de todos os comandos anteriores ainda no terminados. No comando IF, a frase ELSE termina a abrangncia de todas as

EVALUATE

INITIALIZE
Um grande beneficio VS COBOL II o novo comando INITIALIZE, que nos permite a inicializao de diversas variveis do programa, de acordo com sua classe de dados, num nico comando. Este comando ser muito til, principalmente em ambientes ON-LINE, onde temos a caracterstica de um mesmo programa executar diversas vezes, uma vez para cada transao, sem a recarga do programa. Isto nos obrigava a inicializar as variveis no inicio da PROCEDURE, com diversos comandos MOVEs, ao invs de inicializ-las na WORKINGSTORAGE.
INITIALIZE identifier-1 [identifier-2]...

A sintaxe do comando INITIALIZE:

REPLACING

{ {

ALPHABETIC aLPHANUMERIC NUMERIC ALPHANUMERIC-EDITED NUMERIC-EDITED

ALPHABETIC aLPHANUMERIC NUMERIC ALPHANUMERIC-EDITED NUMERIC-EDITED

} }

{
DATA BY

indentifier-3 literal-1

}] }]

{
DATA BY

indentifier-3 literal-1

INITIALIZE
Um exemplo no seu formato mais simples: INITIALIZE INVENTORY-DATA. Se INVENTORY-DATA for um item-de-grupo, todos os seus subordinados: Numricos e numricos de edio sero inicializados com zeros alfabticos, alfanumricos e alfanumricos de edio sero inicializados com espaos. Existem trs excees, que no sero inicializados: Indexadores FILLER Itens contendo a clusula REDEFINIDAS (sero inicializados de acordo com o tipo do campo redefinido). Se INVENTORY-DATA A for um item-elementar, ser inicializado com espaos ou zeros, dependendo de sua definio.

INITIALIZE
INTIALIZE WS - DATA AC - TOTAL - 1 AC - TOTAL 2 CT - PAG CT - LIN CT - REG.

oc tambm pode inicializar diversos campos em um mesmo comando:

ada um, ser inicializado de acordo com o seu tipo, com zero ou espaos.

XEMPLOS INTIALIZE WS-CAMPO-1. WS-CAMPO-1 WS-CAMPO-1 PICTURE ANTES 9(05) 12345 X(05) AB123 99XX9 12AB3 XXBX/BB ABbC/DE **99,9CR 1234,5CR A(05) ABCDE WS-CAMPO-1 DEPOIS 00000 bbbbb bbbbb bbbb/bb **00,0 bbbbb

INITIALIZE
Clusula REPLACING Atravs da clusula REPLACING, voc pode determinar qual a forma de inicializaode cada tipo de campo, por um valor literal ou por um outro campo: INITIALIZE REG-CLIENTE REPLACING ALPHANUMERIC DATA BY LOW-VALUES NUMERIC DATA BY WS-VALOR NUMERIC-EDITED DATA BY +999,99.

INITIALIZE

os

ANJUST PIC X (8) JUSTIFIED RIGHT VALUE SPACES. ALPHANUM-4 PIC X (4) VALUE 1234.

OCEDURE DIVISION.

NITIALIZE ANJUST REPLACING ALPHANUMERIC DATA BY ALPHANUM-4. ALPHANUM-4 1234 ANJUST (ANTES) bbbbbbbb ANJUNST (DEPOIS) bbbb1234

NUMERIC-1 PIC 9 (8) VALUE 98765432. NUM-INT PIC 9 (7) VALUE 1234567.

OCEDURE DIVISION.

NITIALIZE NUMERIC-1 REPLACING NUMERIC DATA BY NUM-INT. NUM-INT 1234567 NUMERIC-1 (ANTES) 98765432 NUMERIC-1 (DEPOIS) 01234567

INITIALIZE
O mais importante de se destacar na clusula REPLACING que, ao ser utilizado em um item-de-grupo, o comando INITIALIZE s inicializar os campos especificados. Os demais permanecero sem alterao.

INITIALIZE
outro exemplo: WS-GROUP. WSG-NAME WSG-AGE WS-INCOME FILLER WSG-DATE WSG-CODE PIC PIC PIC PIC PIC PIC X (15) S9 (3) COMP-3. 9 (7) V99. X (3) XX/XX/XX. A (1) (alphanumeric) (numeric) (numeric) (alphanumeric) (alphanumeric-edited) (alphabetic) contm espaos contm zeros contm zeros inalterado contm bb/bb/bb contm branco inalterado contm 2 contm 2 inalterado inalterado

01 05 05 05 05 05 05

NITIALIZE WS-GROUP.

WSG-NAME WSG-AGE WSG-INCOME FILLER WSG-DATE WSG-CODE NITIALIZE WS-GROUP REPLACING NUMERIC BY 2.

WSG-NAME WSG-AGE WSG-INCOME FILLER WSG-DATE WSG-CODE

inalterado

NITIALIZE WS-GROUP REPLACING ALPHANUMERIC BY * NUMERIC BY 19. contm *************** contm 19 contm 19 inalterado inalterado

WSG-NAME WSG-AGE WSG-INCOME FILLER WSG-DATE WSG-CODE

inalterado

INITIALIZE
Quando utilizamos o comando INITIALIZE, ocorrer um processo idntico ao comando MOVE, isto , para cada campo a ser inicializado, ser gerado uma instruo MOVE. Por esta razo, inicializar tabelas com INITIALIZE pode no ser o mtodo mais eficiente. Ser mais eficiente a construo de uma rotina para esta finalidade, e utilizar o comando PERFORM VARYING para executar a inicializao. Voc no pode utilizar INITIALIZE para campos que contenham a clusula OCCURS DEPENDING ON, ou seus subordinados.

A EN T O

ACCEPT
Formato Geral : ACCEPT campo FROM mnemnico DATE DAY DAY-OF-WEEK TIME

Exemplo : WORKING-STORAGE SECTION. 77 HOJE PIC 9(06). ... PROCEDURE DIVISION. INICIO. ACCEPT HOJE FROM DATE.

ACCEPT
Consideraes: Neste exemplo o comando ACCEPT ler a hora do sistema e armazenar essas informaes no item HOJE. O comando ACCEPT pode receber informaes contidas no sistema especificados em registradores especiais (DATE, DAY, ou TIME). A recepo precisa seguir as regras do comando MOVE sem a opo CORRESPONDING. DATE: Seqncia da data no formato: "AAMMDD", a PICTURE implcita 9(06). DAY: Data no formato JULIANO "AADDD", a PICTURE implcita 9(05). TIME: Hora no formato "HHMMSSDD", a PICTURE implcita 9(08). DAY-OF-WEEK: Dia da semana em formato numrico PIC 9. Onde 1 = Segunda-feira, 2 = Tera-feira , ...

DISPLAY
usado para imprimir at 120 caracteres atravs da impressora. No imprime arquivos. Os literais podem estar na forma numrica ou alfanumrica. Exemplo:
DISPLAY TOTAL DISPLAY 'FIM DO PROGRAMA' DISPLAY 'QTD.DE DADOS=' QUANT. DADOS = 0. imprimir o contedo de TOTAL impresso da mensagem FIM DE PROGRAMA exemplo ser impresso : "QUANT. DE

MOVE
A informao representada pelo literal ou data-name1 movido para o data-name2 e assim por diante. Por exemplo suponha que tivssemos 2 campos, um chamado CAMPO1 e o outro CAMPO2. antes do MOVE: CAMPO1 = "BRADESCO" CAMPO2 = "XXXXXXXX" MOVE CAMPO1 TO CAMPO2 depois do MOVE: CAMPO1 = "BRADESCO" MOVE VALOR TO PRECO1 PRECO2 CAMPO2 = "BRADESCO"

PRECO3.

MOVE
Regras: 1. Quando estamos movimentando para "campos alfanumricos" ou alfabticos devemos levar em considerao o seguinte: a. Os caracteres a serem transferidos so armazenados no campo receptor da esquerda para a direita b. Se o campo receptor maior que o campo emissor, as posies restantes ( direita) so preenchidas com espaos c. Se o campo emissor maior que o receptor, a transferncia terminada no momento em que o campo receptor estiver preenchido. 2. Quando estivermos movimentando para campos numricos: a. O alinhamento feito pela vrgula decimal e as posies no usadas so

MOVE CORRESPONDING
A opo CORRESPONDING permite operaes a serem feitas em itens elementares de mesmo nome, se o item de grupo a qual eles pertencem estiverem especificados. Ambos os identificadores devem ser itens de grupo. Para um par de itens de dados (itens subordinados), as seguintes regras so vlidas: Ambos os itens subordinados so elementares Os 2 itens subordinados tem o mesmo nome e as mesmas qualificaes. Os itens subordinados no podem ser identificados pela palavra chave FILLER. Os itens subordinados no podem incluir REDEFINES, OCCURS ou USAGE IS INDEX em suas descries. Se um item subordinado for um grupo, os itens subordinados a ele so

MOVE CORRESPONDING
Exemplo: 05 ITEM-1 OCCURS 6 INDEXED BY X. 10 ITEM-A .... 10 ITEM-B .... 10 ITEM-C REDEFINES ITEM-B. 05 ITEM-2. 10 ITEM-A .... 10 ITEM-B .... 10 ITEM-C .... Se um MOVE CORR ITEM2 TO ITEM-1 (X) for codificado ITEM-A e ITEM-A (X) e ITEM-B e ITEM-B (X) so considerados como correspondente; ITEM-C e ITEM-C (X) no so includos, pois o ITEMC (X) inclui a clusula REDEFINES. No pode ser usado o CORR no nvel 77 ou 88.

Modificao de Referncia
O caracter dois pontos (:) ou clon como conhecida na lngua inglesa era um caracter invlido na sintaxe do VS COBOL at o Release 3. No VS COBOL II Release 3 este caracter indica uma Modificao de Referncia a uma parte de um campo, conhecido tambm como substring. Vamos ver como isto funciona: Reference Modification pode ser utilizado somente em campos no formato DISPLAY. Seu formato o seguinte: DATA FIELD (x : y) Nmero de bytes direita, a partir da posio inicial. Sendo omitido, ser a partir da posio inicial at o fim do campo. Posio inicial.

Modificao de Referncia
Exemplos: 1) MOVE FIELD1(3:7) TO FIELD2 Movimenta FIELD1 do terceiro ao nono byte para FIELD2, ou em outra palavras, a partir de terceiro, sete caracteres direita. 2) MOVE FIELD1(5:) TO FIELD2 Movimenta FIELD1 do quinto caracter at o fim para FIELD2, Exemplo da utilidade de Reference Modificacion: DATA DIVISION. WORKING-STORAGE SECTION. 01 HORA-CORRENTE PIC X (8). PROCEDURE DIVISION. ACCEPT HORA-CORRENTE FROM TIME. DISPLAY HORA CORRENTE = HORA-CORRENTE (1:2) : HORA-CORRENTE (3:2) : HORA-CORRENTE (5:2) :

Modificao de Referncia
Com este novo recurso do VS COBOL II, evita-se complexas codificaes para separar partes de uma string, como por exemplo, separar de um Nome, o Sobrenome: Em VS COBOL: DATA DIVISION. WORKING-STORAGE SECTION. 01 FULL-NAME. 05 FULL-CHAR PIC X OCCURS 40 TIMES. 01 LAST-NAME. 05 LAST-CHAR PIC X OCCURS 20 TIMES. 01 LAST-NAME-BEGIN PIC S9 (3) COMP-3. 01 SUB-FULL PIC S9 (4) COMP. 01 SUB-LAST PIC S9 (4) COMP. PROCEDURE DIVISION. ... MOVE +1 TO SUB-LAST. PERFORM MOVE-LAST THRU MOVE-END VARYNG SUB-FULL FROM LAST-NAME-BEGIN BY +1 UNTIL SUB-FULL > 40 OR SUB-LAST > 20. ... MOVE LAST. MOVE FULL-CHAR (SUB-FULL) TO LAST-CHAR (SUB-LAST). ADD +1 TO SUB-LAST. MOVE-END. EXIT.

Modificao de Referncia
Em VS COBOL II DATA DIVISION. WORKING-STORAGE SECTION. 01 FULL-NAME PIC X (40). 01 LAST-NAME PIC X (20). 01 LAST-NAME-BEGIN PIC S9 (3) PACKED-DECIMAL PROCEDURE DIVISION. ... MOVE FULL-NAME (LAST-NAME-BEGIN: ) TO LAST-NAME.

Modificao de Referncia
Como voc deve ter observado nas pginas anteriores, o Reference Modification pode ser declarado por uma constante inteira, por um campo e ainda por expresses: Atravs de constante: MOVE FIELD1 (3:5) TO FIELD2. Atravs de campo (binrio ou compactado recomendado): MOVE FIELD (POS-INICIAL:TAMANHO) TO FIELD2. Atravs das duas formas combinadas: MOVE FIELD1 (POS-INICIAL:5) TO FIELD2. Atravs de expresses MOVE FIELD1 (POS-INICIAL +1 :TAMANHO - 2) TO FIELD2
A EN T O
O segundo parmetro opcional. No entanto o caracter dois pontos (:) obrigatrio, para que o compilador no entendo como sendo uma subscrio ou indexao: MOVE FIELD1 (3:) TO FIELD2. Modification MOVE FIELD1 (3) TO FIELD2. Reference Subscrio

bscrio e modificao de Referencia Combinados


Subscrio e Modificao de Referencia (Referencia Modification) podem ser combinados para um mesmo campo, no mesmo comando: DATA DIVISION. WORKING-STORAGE SECTION. 01 TABLE1. 05 ENTRY1 01 SUB1 01 FIELD1 OCCURS 20 TIMES PIC X (15). PIC S9 (4) BINARY. PIC X (7).

PROCEDURE DIVISION. ... MOVE ENTRY1 (SUB) (5:7)


A EN T O

TO FIELD1.

O subscritor ou indexador deve ser codificado sempre em primeiro.

GOBACK ou STOP RUN


Tem por funo terminar a execuo do programa. Onde : STOP RUN termina a execuo do programa e retorna o controle para o Sistema Operacional. GOBACK termina a execuo do programa retornando o controle para o programa que o chamou, se o programa for um programa principal, o GOBACK tem a mesma funo do STOP RUN.

Exerccio 1

bjetivos :

eviso dos conceitos de formao de registros, uso da clusula redefines, uso dos comandos :

CCEPT, INITIALIZE, DISPLAY e MOVE.

nunciado :

efina no programa COBOL uma rea na WORKING-STORAGE SECTION com o seguinte formato : REGISTRO-PACIENTE. 05 DATA-EDITADA 05 HORA 05 RESPONSAVEL 05 NOME-PACIENTE 05 IDADE-PACIENTE 05 PLANO-SAUDE 05 ESTADO-GRAVE 05 POLICIA-AVISADA 05 DESCRICAO-ESTADO. 10 DESCRICAO-01 10 DESCRICAO-02 10 DESCRICAO-03 05 MEDICO PIC 9(006). PIC 9(004). PIC X(015). PIC X(030). PIC 99. PIC X(015). PIC X(003). PIC X(003). PIC X(060). PIC X(060). PIC X(060). PIC X(020).

Exerccio 1
1) Inicialize o campos com os comandos adequados. 2) Preencha o registro acima com os seguintes dados : 3) Luis Augusto dos Santos, 29 anos. Plano de Sade Sul Amrica. Paciente chegou em estado grave, com vrias leses internas devido a atropelamento. Policiais encaminharam o paciente ao Hospital o mdico que atendeu Dr. Ailton. A data e hora do registro devero ser lidas do sistema operacional. (ACCEPT). NOTA : A data dever conter o formato DDMMAA e a hora HHMM. 4) O responsvel no registro o seu prprio nome. 5) Redefina o registro do paciente a fim de separar o campo nome em dois subcampos : NOME e SOBRENOME. Exiba separadamente o SOBRENOME. 6) Movimentar todo o registro para um campo alfanumrico de 300 caracteres, e exiba este campo na sysout.

Operaes Aritmticas
de se esperar que a maioria dos programas, comerciais ou cientficos, executem clculos, nem que seja uma simples soma. Todos os operandos utilizados em operaes aritmticas devem ser itens elementares numricos. O tamanho mximo de cada operando de 18 dgitos decimais.

Operaes Aritmticas - ADD


Esse comando soma dois operandos numricos e armazena o resultado no dataname2. exemplo o contedo do campo A ser somado ao de B e o resultado dessa soma ser colocado no campo B ADD 5 TO TOTAL. se tivssemos em TOTAL o valor 10, aps a execuo desse comando TOTAL ADD A B TO C conteria 15 os contedos dos campos A, B, e C sero ADD A B GIVING C. somados e o resultado colocado em C. o comando soma os valores que esto esquerda da palavra GIVING e coloca o ADD A 2 C D GIVING resultado no Data-Name direita E. se os contedos dos campos A for 5, C for 10 e D for 3, ento aps essa instruo em E, ser colocado o valor 20. O propsito e efeito da clusula CORRESPONDING so os mesmos j considerados no comando MOVE. ADD A TO B

peraes Aritmticas - SUBTRACT


Esse comando subtrai do data-name2 o valor do data-name1 e coloca o resultado em data-name2. SUBTRACT A FROM B SUBTRACT 5 FROM TOTAL. se tivssemos em TOTAL o valor 10, aps a execuo desse comando TOTAL conteria 5. SUBTRACT A B FROM C. todos os literais ou contedos dos SUBTRACT A FROM B GIVING C. campos que precedem as palavras SUBTRACT A 2 C FROM D GIVING E.FROM so somados, e o total subtrado do Data-Name definido aps a palavra FROM. e o resultado colocado no Data-Name aps a palavra GIVING o comando subtrai de B o valor de A e o resultado ser colocado no campo B.

peraes Aritmticas MULTIPLY


Esse comando multiplica o valor do data-name1 pelo contedo do dataname2 e coloca o resultado em data-name2. Formato 1 MULTIPLY CAMPO-01 BY CAMPO-02 LITERAL Formato 2 MULTIPLY CAMPO-01 BY LITERAL CAMPO-02 LITERAL GIVING CAMPO-03 ...

peraes Aritmticas DIVIDE


Esse comando divide o valor do data-name1 pelo contedo do dataname2 e coloca o resultado em data-name2. Formato Geral : DIVIDE CAMPO-01 LITERAL [ ROUNDED ] Observaes : .REMAINDER : Identifica que a operao de diviso ir calcular o Resto. .Para utilizar o REMAINDER o campo CAMPO-04 somente com numrico e inteiro. BY CAMPO-02 LITERAL GIVINGCAMPO-03

[ REMAINDER CAMPO-04 ]

peraes Aritmticas - Operandos


Existem 5 operandos aritmticos que podem ser usados nas expresses aritmticas: Adio (+) Regras: Todo operador aritmtico deve ser precedido e seguido por, no mnimo um espao. Expresses dentro de parnteses, so executadas primeiro. Quando existir diversos parnteses, os mais internos sero executados primeiro. Quando no h parnteses, as operaes so executadas na seguinte ordem hierrquica: Potenciao Multiplicao e Diviso Adio e Subtrao Subtrao (-) Multiplicao (*) Diviso (/) Potenciao ( ** )

Se a seqncia de operaes do mesmo nvel hierrquico, no for esclarecida pelos parnteses as operaes sero efetuadas da esquerda para a direita. Exemplo: A / B * C ser interpretada como se tivesse sido escrita da seguinte forma: (A / B) * C. A + B / C + D ** E * F + G interpretada como: A + (B / C) + ( ( D ** E) * F) + G

peraes Aritmticas - COMPUTE


Uma vez que aprendemos como funciona expresses aritmticas, vamos agora estudar o comando COMPUTE que utiliza expresses aritmticas. COMPUTE calcula a expresso direita do sinal de igual e coloca o resultado no campo esquerda do sinal de igual.. Exemplos: COMPUTE SOMA = 5. COMPUTE VALOR = QUANTIDADE. COMPUTE SALARIO = (SALARIO * 1,5) + ADIC. COMPUTE TAXA = 5,6 * CAPITAL. Opo ON SIZE ERROR e ROUNDED Essas opes so utilizadas em todos os comandos aritmticos que vimos at agora. Sabemos que o resultado de qualquer operao aritmtica fica armazenado em algum campo. Porm algumas vezes esse campo pequeno para poder armazenar todos os dgitos do resultado da operao. Por exemplo se o campo determinado para receber o resultado tiver 5 posies (PIC9(5)) e o resultado de uma operao qualquer foi 123456, no seria possvel armazenar esse resultado. Ento utilizaremos a opo ON SIZE ERROR para codificarmos algum comando que s ser executado se isso acontecer. Nesse caso estamos nos referindo s casas inteiras ( esquerda do ponto decimal). Pode ser usado em todos os comandos aritmticos j estudados, no seguinte formato: Exemplo: ADD 1 TO TOTAL ON SIZE ERROR GO TO FIM. DIVIDE 11 INTO QUOC ON SIZE ERROR GO TO PARAG1.

peraes Aritmticas - Opo ROUNDED


Quando no campo receptor foi reservado um certo nmero de posies decimais e esse campo receber o resultado de uma operao cujo nmero de posies decimais excede quele, ento os dgitos mais direita do resultado sero perdidos. Por exemplo: Se o campo que ir receber o resultado foi definido com 3 casas inteiras e 2 decimais, e a operao der como resultado o valor 543,212, o valor que ser armazenado ser 543,21 perdendo-se os dgitos mais direita que no couberem. Para se eliminar tal truncamento, utilize ROUNDED, que ir arredondar o dgito menos significativo. MULTIPLY PRECO BY QUANTIDADE GIVING PRODUTO ROUNDED. SUBTRACT 100 FROM DIF ROUNDED. ADD CAMPO TO TOTAL ROUNDED. As duas opes podem ser usadas juntas, nesse caso o formato ser: comando aritmtico [ ROUNDED ][ ON SIZE ERROR comando] Exemplo: MULTIPLY PRECO BY QUANTIDADE GIVING PRODUTO ROUNDED ON SIZE ERROR GO TO P2. DIVIDE DIVISOR INTO 50 GIVING QUOCIENTE ROUNDED ON SIZE ERROR GO TO A. COMPUTE CALC ROUNDED = A / B + D ON SIZE ERROR GO TO XYZ.

Exerccio 2
Objetivos : Uso das instrues aritmticas. Enunciado : 1) Faa um programa COBOL que calcule a seguinte frmula matemtica R = ( ( X6 - X4 ) + ( X3 * ( X1 - X2 ) ) ) / X5 - X1 2) A preciso de R deve ser de 4 casas decimais, sendo que o formato dos campos deve ser : X2, X3 e X5 binrio X1, X4, X6 e R compactado 3) A frmula dever ser resolvida com os comando bsicos (ADD, MULTIPLY, ....) e COMPUTE. 4) Teste o programa com os valores X1 = 1.507,12 X2 = 456 X3 = 0,9523 X4 = 1.453,15 X5 = -5 X6 = 1.901,01 O resultado R dever ser = -1.796,88 5) Divida o resultado R por 25,13 calcule utilizando as duas formas do DIVIDE com e sem o REMAINDER 6) Utilize o DISPLAY para imprimir todos os resultados

IF / END-IF
Com criao dos delimitadores estruturados, o comando IF ganha em legibilidade e facilita muito a construo de programas estruturados, pois o uso de IFs aninhados (IFs codificados dentro de IFs), muito intenso. Veja a comparao de codificao de programa sem END-IF e com END-IF:

IF / END-IF
Codificando sem end-if
1 5 7 8 10 12 15 20 25 30 35 40 45 50 55 60 65 70 72

100-PRODUCE-ENPLOYEE-LINE. PERFORM 110-READ-EMPLOYEE-RECORD. IF NOT EMPLOYEE-EOF IF SR-ACTIVE-EMPLOYEE PERFORM 120-PRINT-ACTIVE-LINE ELSE PERFORM 150-PRINT-INACTIVE-LINE. IF NOT EMPLOYEE-EOF PERFORM-160-ACCUMULATE-GAND-TOTAL.

IF / END-IF

dificando com end-if

5 7 8 10 12 15 20 25 30 35 40 45 50 55 60 65 70 72

100-PRODUCE-ENPLOYEE-LINE. PERFORM 110-READ-EMPLOYEE-RECORD. IF NOT EMPLOYEE-EOF IF SR-ACTIVE-EMPLOYEE PERFORM 120-PRINT-ACTIVE-LINE ELSE PERFORM 150-PRINT-INACTIVE-LINE END-IF PERFORM-160-ACCUMULATE-GAND-TOTAL.

IF Aninhados
Analise o seguinte fluxograma:
C PERFORM BAD RISK? D MOVE LOWRATE TO DISCONT F COMPUTE GROSS =(etc) G COMPUTE NET =(etc) H PERFORM INVOICE A GOOD RISK?

B QUANT >100?

E MOVE HIGHRATE TO DISCONT

Em VS COBOL, este fluxograma seria impossvel de ser implementado, da forma que est desenhado. Para implementar esta lgica teremos que repetir as funes F e G, conforme mostrado na pagina seguinte.

IF Aninhados

m VS COBOL: 5 7 8 10 12 15 20 25 30 35 40 45 50 55 60 65 70 72 IF GOOD-RISK IF QUANT > 100 MOVE HIGH-RATE TO COMPUTE GROSS = . . COMPUTE NET = . . . ELSE MOVE LOW-RATE TO COMPUTE GROSS = . . COMPUTE NET = . . . ELSE PERFORM BAD-RISK. PERFORM INVOICE.

DISCOUNT . DISCOUNT .

IF Aninhados

m VS COBOL II:

5 7 8 10 12 15 20 25 30 35 40 45 50 55 60 65 70 72 GOOD-RISK IF QUANT > 100 MOVE HIGH-RATE TO DISCOUNT ELSE MOVE LOW-RATE TO DISCOUNT END-IF COMPUTE GROSS = . . . COMPUTE NET = . . . SE PERFORM BAD-RISK ND-IF.

RFORM INVOICE.

IF Aninhados
Com esse tipo de instruo o programador indica a existncia de uma deciso em seu programa, dizendo o que fazer conforme o resultado de um teste. Isto , de acordo com o resultado do teste, o programa ser desviado para algum lugar. Exemplo: IF A > B ADD 5 TO C END-IF Neste caso se o teste for verdadeiro, isto , se o contedo do campo A for maior que o contedo de B, a operao soma (ADD 5 TO C) ser executada IF A < B PERFORM CALCULA. END-IF

Se A for menor que B (teste verdadeiro), o pargrafo CALCULA ser executado; se A no for menor que B (teste falso), ser executada a instruo seguinte ao comando

IF Aninhados
Testes de Classe Esse tipo de teste serve para determinar se o contedo de um campo definido com PIC X numrico ou alfabtico. IF DADO IS NUMERIC PERFORM CALCULO END-IF Se o contedo do campo DADO for numrico, haver um desvio para o pargrafo CALCULO IF NOME IS NOT ALPHABETIC GOBACK END-IF Se o contedo de NOME no for alfabtico, o programa termina via execuo do comando GOBACK. Teste de Sinal Este teste permite verificar se o contedo de um campo numrico positivo (POSITIVE), negativo (NEGATIVE) ou nulo (ZERO).

Com o comando IF, podemos ter quatro tipos de testes:

Comando de Desvio - IF
Teste de Relao Este tipo de teste serve para fazer comparaes entre dois operandos, podendo ser, contedo de campos, literais ou expresses aritmticas. So operadores relacionais: IS [NOT] GREATER THAN IS [NOT] > MAIOR QUE [ou] NO MAIOR QUE LESS - EQUAL IF SALARIO GREATER 10000 PERFORM CALC1 END-IF CALC1. COMPUTE SALARIO = SALARIO * 50000. So permitidos os conectores de condio AND e OR Se o contedo de SALARIO for maior que 100000, ento o programa ser desviado para o pargrafo CALC1. Caso contrrio o programa seguir a seqncia normal que o comando: COMPUTE SALARIO = SALARIO + 50000.

Comando de desvio IF
Sem opo ELSE Com opo ELSE Ser executada a sentena que precede a palavra ELSE caso o teste seja verdadeiro, e ELSE, se o teste for falso.
IF A = B ADD 1 TO C SUBTRACT 5 FROM Z MOVE SPACES TO REGISTRO WRITE REGISTRO ELSE ADD 5 TO NUMERO DISPLAY 'FIM' GOBACK END-IF IF A = B ADD 1 TO C ELSE PERFORM P1 END-IF

IF QUANT NOT = TOTAL ADD QUANT TO TOTAL END-IF

IF A + B * C LESS 2 PERFORM P1 END-IF

IF A > B PERFORM ROTINA END-IF

IF CIDADE = 'SAO PAULO' MOVE 'SP' TO SIGLA END-IF

F CONDIES RELACIONAIS

Antes de mostrarmos as alteraes nos testes de condies relacionais no VS COBOL II, vamos rever as condies possveis no VS COBOL: A < B IF A IS LESS THAN B IF A LESS B A = B IF A IS EQUAL TO B IF A EQUAL B A > B IF A IS GREATER THAN B IF A GREATER B

A NOT < B IF A IS NOT LESS THAN B IF A NOT LESS B A NOT = B IF A IS NOT EQUAL THAN B IF A NOT EQUAL B A NOT > B IF A IS NOT GREATER THAN B IF A NOT GREATER B Mas o VS COBOL no suporta as condies: less than or equal to or equal to or greater than Se voc precisar precisa fazer o seguinte teste: se A menor ou igual a 3 ?

F CONDIES RELACIONAIS
Y

6 > 3

< 3

Em VS COBOL: IF A NOT > 3

NOT < 3 <= 3

Agora em VS COBOL II, temos disponvel novas condies relacionais <= e >= para simplificao da lgica e melhoria no entendimento do programa, pois a condio NOT sempre foi causa de muito enganos. O mesmo teste acima feito simplesmente: IF A <= 3

F CONDIES RELACIONAIS

mplificando Testes de Intervalos

-NUMBER possui um valor entre 2 e 4? Para codificar estes teste em VS COBO IF ((WS-NUMBER NOT < 2 ) AND (WS_NUMBER NOT > 4)) PERFORM...

VS COBOL II, podemos simplificar o teste da seguinte forma: IF WS-NUMBER >= 2 AND WS-NUMBER <= 4 PERFORM... END-IF.

NEXT SENTENCE
Nem sempre numa descrio de lgica se tem necessidade, de dado um teste no comando IF, executar a parte verdadeira e a falsa. Opcionalmente, nesse caso usamos as palavras NEXT SENTENCE para fazer papel de um comando nulo (isto , no faz nenhuma ao). IF A < B IF A > C NEXT SENTENCE ELSE ADD 1 TO C END-IF ELSE PERFORM IMPRESSAO END-IF.

CONTINUE
O comando CONTINUE um comando no-operacional. indicado quando nenhuma instruo executvel ser utilizada. Este comando foi criado para o uso de complementao de sintaxe de qualquer comando condicional ou imperativo do VS COBOL II, principalmente o EVALUATE. Tambm pode ser utilizado para o comando IF/ELSE, substituindo neste caso a palavra-chave NEXT SENTENCE. Veja os exemplos abaixo: IF STATUS-CODE = SPACES CONTINUE ELSE PERFORM 999-ERROR END-IF.

CONTINUE
Nem sempre CONTINUE tem o mesmo efeito de NEXT SENTENCE em um comando IF/ELSE. Quando NEXT SENTENCE processado, a execuo continua aps o prximo ponto; Quando CONTINUE processado, a execuo continua aps o prximo END-IF. No exemplo abaixo, se NEXT SENTENCE fosse utilizado no lugar de CONTINUE, PERFORM BIG-STATE no seria executado. Com o uso de CONTINUE, PERFORM BIG-STATE ser executado. IF STATE-CODE = 07 IF CITY-CODE = 02 PERFORM BIG-CITY ELSE CONTINUE END-IF

AE O T N

OPEN
Sua funo preparar um arquivo para ser lido ou gravado. obrigatrio abrir o arquivo antes de qualquer leitura ou gravao de arquivo. OPEN INPUT CADCONTA CADCLIENTE INPUT ......... para arquivos de entrada OUTPUT ..... para arquivos de sada I-O ................para arquivos indexados de entrada e sada (atualizao)

CLOSE
usado para fechar um arquivo. Para que um arquivo possa ser fechado necessrio que ele tenha sido anteriormente aberto, por um comando OPEN. CLOSE CADCONTA CADCLIENTE

READ
Realiza leitura de um registro dos arquivos especificados como INPUT na instruo OPEN. S pode ser usado aps o arquivo ser aberto por OPEN. Quando esse comando executado um registro lido do arquivo de entrada, esse registro ter condies de ser processado. Quando for detectado o fim do arquivo, desviar o programa para a sentena aps a palavra AT END.
READ file-name [NEXT] [ INTO data-name ] AT END statement [ NOT AT END statement ]

Obs. : NOT AT END (Somente para COBOL II)

READ
Exemplo: READ CADASTRO AT END MOVE 'Y' TO FIM-DE-ARQUIVO. READ MOVIM INTO REGTRAB AT END GOBACK. READ CARTAO AT END MOVE 'Y' TO IND-FIM-ARQ NOT AT END ADD 1 TO CT-REG-LIDO.

READ
Ao se executar a instruo READ, o registro ser lido do arquivo levado rea de registro do arquivo reservado na FD da FILE SECTION. Com o comando anterior, um registro do arquivo chamado CARTAO, lido e colocado na rea de registro da FD. Aps o comando READ podemos dar o comando MOVE e transferir as informaes que foram lidas e armazenadas na rea de registro para uma rea de trabalho da WORKING-STORAGE SECTION. Entretanto podemos utilizar o comando READ com a opo INTO, que seria o equivalente a um comando READ seguido por um comando MOVE. O registro lido fica acessvel tanto na rea de registro como na rea de trabalho.

WRITE
O comando WRITE providencia a sada de um registro lgico. O verbo WRITE grava o registro em arquivos que foram especificados com OUTPUT na instruo OPEN. Permite tambm a movimentao do papel na impressora. WRITE record-name [ FROM data-name] Exemplo: Notas: Um comando OPEN deve ter sido executado para o arquivo antes do primeiro comando WRITE. O nome do registro deve ser aquele definido em nvel 01 na FD da FILE SECTION. Observe que um comando READ segue um nome de arquivo, mas a um comando WRITE segue um nome de registro. WRITE REG-SAIDA.

WRITE
Se a informao no estiver na rea de sada de registro, o programador deve executar um MOVE desta informao para essa rea. Entretanto, ao invs de usar o MOVE, voc pode usar: WRITE record-name FROM data-name A opo FROM eqivale a um comando WRITE precedido de um comando MOVE para transferir os dados para a rea de sada de registro. Opo ADVANCING Quando um arquivo for impresso em um formulrio contnuo da impressora, deve-se observar o posicionamento do carro da impressora, indicando quantas linhas em branco deseja-se saltar em cada um dos registros impressos.

WRITE - Consideraes:
A) A impressora assume que o primeiro caractere de qualquer registro transferido ela, um caractere de controle de espacejamento, conforme j consideramos. B) Assim sendo, o primeiro caractere de cada registro de um arquivo na impressora deve ser reservado para o caractere de controle de impresso. Exemplo 01 REG-LISTAREL. 05 FILLER 05 LINHA Notas: A opo ADVANCING do comando WRITE colocar automaticamente, o caractere de controle de impresso adequado na primeira posio do registro a ser escrito pela impressora, antes do WRITE a ser executado. AFTER especifica que a impresso do registro deve ser efetuada depois do espacejamento. Isto , permite a impresso do registro aps o formulrio avanar o nmero inteiro de linhas. PIC X. -> posio para controle de carro PIC X(132).

WRITE - Consideraes:
O nmero inteiro pode ser 0, 1, 2, 3, etc... WRITE REGISTRO BEFORE ADVANCING 2 LINES. WRITE LINHA BEFORE 3 LINES. WRITE LINHA FROM DETALHE AFTER 1 LINES. WRITE CABEC AFTER PAGE.

GO TO
Em geral, em um programa COBOL, os comandos so executados na seqncia em que eles aparecem na escrita do programa. H, entretanto, alguns comandos que fazem com que essa execuo seqencial seja alterada passando a executar um outro comando, por meio de desvios. GO TO nome-de-procedimento (deve ser um nome de pargrafo). Exemplo: LER. ... GO TO CALCULAR. ... CALCULAR. ... Nesse exemplo o programa vem executando o pargrafo LER, e quando atingir o GO TO sofrer um desvio para o pargrafo CALCULAR, mesmo que no tenha terminado o pargrafo anterior. Em outras palavras, assim, num programa ao ser encontrado um comando GO TO, a seqncia de execuo desviada para o pargrafo especificado no GOTO.

Exerccio 3
Objetivos : Uso de estruturas condicionais com o comando IF, desvios incondicionais GO TO e comandos de acesso a arquivos externos seqenciais (OPEN/CLOSE, READ/WRITE). Enunciado : 1) Faa um programa COBOL que leia um arquivo com DDNAME igual a ENTRADA, com DSNAME conforme padronizao interna da empresa, cujos os registros tem o seguinte LAYOUT: 01 REGISTRO. 10 REG-NOME 10 REG-IDADE PIC PIC X(030). 99.

Exerccio 3
2) Gerando um arquivo SAIDA com o LAYOUT: 01 REG-SAIDA. 10 REG-SAIDA-NOME 10 FILLER 10 REG-SAIDA-IDADE 10 FILLER 10 REG-SAIDA-DESCR PIC X(030). X(015). PIC 99. X(013). X(015).

PIC PIC PIC

3) O campo REG-NOME deve ser movido para REG-SAIDA-NOME e REGIDADE para REG-SAIDA-IDADE. 4) O campo REG-SAIDA-DESCR deve ser criado conforme o contedo do campo REG-IDADE : Se REG-IDADE maior que 60 mover IDOSO para REG-SAIDA-DESCR, Se REG-IDADE maior que 40 mover ADULTO para REG-SAIDA-DESCR Se REG-IDADE maior que 20 mover ADULTO JOVEM para REG-SAIDADESCR

Exerccio 3
5) Todas as condies acima descritas devem estar em uma nica estrutura de IF. 6) Ao final da execuo do programa, dever ser emitido um TOTAL DE CONTROLE (DISPLAY) com o seguinte aspecto : TOTAIS DE REGISTROS LIDOS DO ARQUIVO DE ENTRADA IDOSOS .................. : XX ADULTOS .............. : XX ADULTOS-JOVENS: XX ADOLESCENTES ...: XX CRIANCAS .............: XX GERAL ....................: XX

Comando INSPECT
O comando INSPECT provavelmente o comando COBOL que apresenta a maior variedade de formatos possveis. No VS COBOL eram 3 formatos, e agora no VS COBOL II possvel um novo formato que iremos mostrar mais adiante, com substituto do chamado TRANSFORM. INSPECT como substituto do EXAMINE

INSPECT uma verso mais poderosa do comando EXAMINE. Tudo o que podamos fazer com EXEMINE tambm pode ser feito com INSPECT com diferenas pouco importante no formato. Alm do mais, INSPECT prov um nmero de capacidades no presentes em EXAMINE FIELD1 REPLACING ALL ZEROS BY SPACES. EXAMINE. NSPECT FIELD1 REPLACING ALL ZERO BY SPACES.

EXAMINE FIELD1 TALLYING UNTIL FIRST 0.

MOVE ZERO TO TALLY. NPECT FIELD1 TALLYING TALLY FOR CHARACTERS BEFORE 0.

Comando INSPECT
Exemplos 77 COUNTR 01 DATA-1 PIC 9 VALUE ZERO. PIC X (6).

INSPECT DATA-1 TALLYING COUNTR FOR CHARACTER AFTER INITIAL S REPLACING ALL A BY O DATA-1 Antes COUNTR ANSELM SACKET PASSED Aps DATA-1 Aps 3 ONSELM 5 SOCKET 2 POSSED

Comando INSPECT
77 COUNTR 01 DATA-2 PIC 9 VALUE ZERO. PIC X (11).

INSPECT DATA-2 TALLYING COUNTR FOR LEALDING 0 REPLACING FIRST A BY 2 AFTER INITIAL C.

DATA-2 Antes COUNTR 00ACADEMY00 0000ALABAMA CHATHAM0000

Aps 2 4 0

DATA-2 Aps 00AC2DEMY00 0000ALABAMA CH2THAM0000

Comando INSPECT
77 COUNTR 01 DATA-3 PIC 9 VALUE ZERO. PIC X (8).

INSPECT DATA-3 REPLACING CHARACTER BY ZEROS BEFORE INITIAL QUOTE.

DATA-3 Antes COUNTR Aps 456"ABEL 0 ANDES"12 0 "TWAS BR 0

DATA-3 Aps 000"ABEL 00000"12 "twas br |

Comando INSPECT
Outros exemplos INSPECT FIELD1 REPLACING ALL A BY B BEFORE INITIAL X INSPECT FIELD1 REPLACING CHARACTERS BY SPACES AFTER INITIAL . INSPECT FIELD1 REPLACING ALL X BY Y B BY Z W BY Q AFTER INITIAL SPACE INSPECT FIELD1 REPLACING FIRST X AFTER INITIAL Y BY Z INSPECT FIELD1 REPLACING ABC BY XYZ INSPECT FIELD1 TALLYING COUNT-1 FOR CHARACTERS BEFORE INITIAL DEPT INSPECT SAMPLE TALLYING INDEX-4 FOR LEADING SPACES REPLACING ALL . BY . FIRST Q BY P

Comando INSPECT

NSPECT como substituto do TRANSFORM

Novo Formato

INSPECT indentifier-1 CONVERTING

indentifier-2 literal-1

}{
TO

indentifier-3 literal-2

{ [

BEFORE AFTER

} {
INITIAL

indentifier-4 literal-3

} ]

TRANSFORM FIELD1 CHARACTERS FROM WXYZ TO ABCD.

INSPECT FIELD1 CONVERTING WXYZ TO ABCD.

Comando INSPECT
Exemplos
01 DATA-4 PIC X (11). INSPECT DATA-4 CONVERTING a b c d e f g h i j l m n o p q r s t u v w x y z TO A B C D E F G H I J L M N O P Q R S T U V W X Y Z DATA-4 Antes inspect DATA-4 Aps INSPECT

01 DATA-4 PIC X (11). INSPECT DATA-4 CONVERTING a b c d e f g h i j l m n o p q r s t u v w x y z TO A B C D E F G H I J L M N O P Q R S T U V W X Y Z AFTER INITIAL / BEFORE INITIAL ? . DATA-4 Antes DATA-4 Aps A/five/?six a/FIVE/?six R/Rexx/RRRr r/REXX/RRRR Zfour?inspe zfour?inspe

Comando INSPECT
01 DATA-5 PIC X (11).

INSPECT DATA-5 CONVERTING XBC TO YZQ AFTER INITIAL R. DATA-5 Antes XBCRXBC XBC9XBC RXBCXBC DATA-5 Aps XBCRYZQ XBC9XBC RYZQYZQ

EVALUATE
Na Programao Estruturada as estruturas possveis so: SEQUNCIA Seqncia de comandos quaisquer. SELEO Se/Seno. Nas linguagens mais populares essa estrutura obtida pelo comando IF/ELSE. REPETIO Estrutura repetitiva (looping), nos formatos DO-UNTIL ou DOWHILE. Cada linguagens apresenta comandos diferentes: FOR, GOSUB, DO-WHILE, DO-UNTIL, etc. No COBOL ambos os formatos so obtidos pelo comando PERFORM. CASE Caso 1, Caso 2, Caso 3,...,Caso n. Em algumas linguagens essa estrutura obtida pelo comando DO CASE/CASE/ENDCASE.

EVALUATE
Estrutura CASE O VS COBOL no possui nenhum comando para resolver essa estrutura. Quando projetada em um comando COBOL, tnhamos que resolver o problema atravs do uso de IF/ELSE. Uma estrutura CASE obtida atravs de IF/ELSE, caracteriza-se por s executar comandos na condio SE (positivo ou negativo). Na condio SENO ( negativo ou falso), existe uma nova condio. Podemos representar isso atravs do seguinte F V diagrama de blocos:
F V

EVALUATE
O Diagrama da pgina anterior, poderia ser codificado em COBOL da seguinte forma: IF ESTADO - CIVIL = SOLTEIRO PERFORM 100 - SOLTEIRO ELSE IF ESTADO - CIVIL = CASADO PERFORM 110 - CASADO ELSE IF ESTADO - CIVIL = DESQUITADO PERFORM 120 - DESQUITADO ELSE IF ESTADO - CIVIL = DIVORCIADO PERFORM 130 - DIVORCIADO ELSE IF ESTADO - CIVIL = VIUVO PERFORM 140- VIUVO ELSE PERFORM 999 - ERRO. Observao: Neste tipo de estrutura, o correto era no utilizar indentao, para que visualmente fosse fcil de identificar a estrutura CASE (somente em IFs aninhados que utilizamos indentao).

EVALUATE - SINTAXE
Com o novo comando EVALUATE do VS COBL II, agora podemos projetar a estrutura CASE utilizando o seguinte diagrama de blocos:

Integer value = ?

= m

Case-1 function

Case-2 function

Case-3 function

Case-4 function

Case-m function

EVALUATE - SINTAXE

A sintaxe do comando EVALUATE:

EVALUATE

{ {

{{ WHEN

{ } { }
identifier-1 literal-1 espression-1 TRUE FALSE

[ ALSE

identifier-2 literal-2 expression-2 TRUE FALSE

]...

ANY condition -1 TRUE FALSE [ NOT ]

indentifier-3 literal-3 arthmetic-expression-1

}[{

THOROUGH THRU

}{ }{

indentifier-4 literal-4 arthmetic-expression-2

{{ ALSON
ANY condition -1 TRUE FALSE [ NOT ]

Imperative [ WHEN OTHER imperative-statement-2] [ END-EVALUTE]

indentifier-5 literal-5 arthmetic-expression-3

}[{

THOROUGH THRU

indentifier-6 literal-6 arthmetic-expression-4

} }]}
}]

]...}...

EVALUATE
A primeira vista, parece ser um comando complexo. O motivo que existe diversas variaes do comando. Atravs de exemplos vamos explorar todas as suas variantes. Em um exemplo simples, podemos traduzir a estrutura IFs que foi mostrada na pgina anterior para o comando EVALUATE: 1 5 7 8 10 12 15 20 25 30 35 40 45 50 55 60 65 70 72 IF ESTADO-CIVIL = SOLTEIRO PERFORM 100-SOLTEIRO ELSE IF ESTADO-CIVIL = CASADO PERFORM 110-CASADO ELSE IF ESTADO-CIVIL = DESQUITADO PERFORM 120- DESQUITADO ELSE IF ESTADO-CIVIL = DIVORCIADO PERFORM 130- DIVORCIADO ELSE IF ESTADO-CIVIL = VIUVO PERFORM 140-VIUVO ELSE PERFORM 999-ERRO. EVALUATE ESTADO-CIVIL WHEN SOLTEIRO PERFORM 100-SOLTEIRO WHEN CASADO PERFORM 110-CASADO WHEN DESQUITADO PERFORM 120- DESQUITADO WHEN DIVORCIADO PERFORM 130- DIVORCIADO WHEN VIUVO PERFORM 140-VIUVO WHEN OTHER PERFORM 999-ERRO END-EVALUATE.

EVALUATE
A forma mostrada na pgina anterior uma das mais simples. Vamos agora apresentar outro exemplo, codificado em IFs e depois codificado em EVALUATE, j com a utilizao na clusula WHEN do operador THRU: 1 5 7 8 10 12 15 20 25 30 35 40 45 50 55 60 65 70 72 IF ITR-TRAN-CODE = 1 PERFORM 240-EDIT-CODE-1-FIELDS ELSE IF ITR-TRAN-CODE = 2 PERFORM 250-EDIT-CODE-2-FIELDS ELSE IF ITR-TRAN-CODE = 3 PERFORM 260-EDIT-CODE-3-FIELDS ELSE IF ITR-TRAN-CODE : 4 PERFORM 270-EDIT-CODE-4-FIELDS ELSE IF ITR-TRAN-CODE : 5 PERFORM 280-EDIT-CODE-5-FIELDS ELSE IF ITR-TRAN-CODE NOT < 6 AND NOT > 10 PERFORM 290-EDIT-COMMON-FIELDS ELSE MOVE N TO VALID-TRAN-CODE ADD 1 TO INVALID-TRAN-CODE-COUNT. EVALUATE ITR - TRAN - CODE WHEN 1 PERFORM 240-EDIT-CODE - 1 - FIELDS WHEN 2 PERFORM 250-EDIT-CODE - 2 - FIELDS WHEN 3 PERFORM 260-EDIT-CODE - 3 - FIELDS WHEN 4 PERFORM 270-EDIT-CODE - 4 - FIELDS WHEN 5 PERFORM 280-EDIT-CODE - 5 - FIELDS WHEN 6 TRHU 10 PERFORM 290-EDIT-COMMON-FIELDS WHEN OTHER MOVE N TO VALID - TRAN - CODE ADD 1 TO INVALID-TRAN-CODE-COUNT END-EVALUATE.

EVALUATE - QUADRO
Este quadro simplificado, mostra diversas formas de se codificar o comando EVALUATE:
EVALUATE Sintax Vriatons
EVALUATE WHEN WHEN WHEN

Examples
EVALUATE TRUE WHEN WS-VALUE < 0.75 WHEN 88-level name

[
[

TRUE FALSE

[RELATION ] [CONDITION] [ OTHER ]

]
]

END-EVALUATE. EVALUATE IDENTIFIER-1 literal or range

WHEN

[ ]
indentifier-2

EVALUATE WS-VALUE WHEN F WHEN PRTHRU ZQ WHEN 13 THRU 175.8 WHEN HRS-REG-WEEK

when OTHER END-EVALUATE.

[ ] [

EVALUATE expression literal

EVALUATE

WHEN OTHER END-EVALUATE.

[ ]] [
imdentifier-3

EVALUATE A * B WHEN 152 WHEN 13 THRU 175.8 WHEN HRS-REG-WEEK

VALUATE - Clusula ALSO


Atravs desta clusula, podemos testar condies mltiplas, em um mesmo comando EVALUATE. Veja o exemplo abaixo, onde fazemos o teste de trs campos: 1 5 7 8 10 12 15 20 25 30 35 40 45 50 55 60 65 70 72 WORKING-STORAGE SECTION. * 01 APPLICANT-CATEGORY-FIELDS. 05 EXPERIENCE-CATEGORY PIC X. 88 NO-EXPERIENCE VALUE 88 UNDER-5-YERS VALUE 88 5-AND-OVER-YEARS VALUE 05 COLLEGE-DEGREE-CATEGORY PIC X. 88 NO-DEGREE VALUE 88 BACHELORS-DEGREE VALUE 88 MASTERS-DEGREE VALUE 88 DOCTOROL-DEGREE VALUE 05 SALARY-REQUIREMENT-CATEGORY PIC X. 88 UNDER-20-THOUSAN VALUE 88 FROM-20-TO-35-THOUSAND VALUE 88 OVER-35-THOUSAND VALUE ... PROCEDURE DIVISION. ... 300-EVALUATE-APPLICATION-DATA. EVALUATE EXPERIENCE-CATEGORY ALSO COLLEGE-DEGREE-CATEGORY ALSO SALARY-REQUIREMENT-CATEGORY

1. 2. 3. N. B. M. P. 1. 2. 3.

VALUATE - Clusula ALSO


Utilizando os operadores NOT e ANY

WHEN WHEN WHEN WHEN WHEN WHEN WHEN

1 ALSO B ALSO 1 1 ALSO M ALSO 2 1 ALSO P ALSO 3 2 ALSO NOT P ALSO NOT 1 2 ALSO P ALSO ANY 3 ALSO NOT P ALSO ANY OTHER

PERFORM PERFORM PERFORM PERFORM PERFORM PERFORM PERFORM

310-ACTION-1 320-ACTION-2 330-ACTION-3 340-ACTION-4 350-ACTION-5 360-ACTION-6 380-DEFAULT

END-EVALUATE.

EVALUATE Clusula ALSO


5 7 8 10 12 15 20 25 30 35 40 45 50 55 60 65 70 72 WORKING-STORAGE SECTION. 01 APPLICANT-CATEGORY-FIELDS. 05 EXPERIENCE-CATEGORY PIC X. 88 NO-EXPERIENCE VALUE 1. 88 UNDER-5-YERS VALUE 2. 88 5-AND-OVER-YEARS VALUE 3. 05 COLLEGE-DEGREE-CATEGORY PIC X. 88 NO-DEGREE VALUE N. 88 BACHELORS-DEGREE VALUE B. 88 MASTERS-DEGREE VALUE M. 88 DOCTOROL-DEGREE VALUE P. 05 SALARY-REQUIREMENT-CATEGORY PIC X. 88 UNDER-20-THOUSAND VALUE 1. 88 FROM-20-TO-35-THOUSAND VALUE 2. 88 OVER-35-THOUSAND VALUE 3. ... PROCEDURE DIVISION. ...

VALUATE Clusula ALSO (Cont)


300-EVALUATE-APPLICATION-DATA. EVALUATE TRUE ALSO TRUE ALSO TRUE WHEN NO-EXPERIENCE ALSO BACHELORS-DEGREE ALSO UNDER-20-THOUSAND PERFORM 310-ACTION-1 WHEN NO-EXPERIENCE ALSO MASTERS-DEGREE ALSO FROM-20-TO-35-THOUSAND PERFORM 320-ACTION-2 WHEN NO-EXPERIENCE ALSO DOCTOROL-DEGREE ALSO OVER-35-THOUSAND PERFORM 330-ACTION-3 WHEN NO-EXPERIENCE ALSO NOT DOCTORAL-DEGREE ALSO NOT OVER-35-THOUSAND PERFORM 340-ACTION-4 WHEN UNDER - 5 YERS ALSO DOCTORAL DEGREE ALSO ANY PERFORM 350-ACTION-5 WHEN 5-AND-OVER-YERS ALSO NOT DOCTORAL DEGREE ALSO ANY PERFORM 360-ACTION-6 WHEN 5-AND-OVER-YERS ALSO DOCTORAL DEGREE ALSO ANY PERFORM 370-ACTION-7 WHEN OTHER PERFORM 380-DEFAULT END-EVALUATE.

VALUATE - Outros exemplos


1) Condio composta DATA DIVISION. WORKING-STORAGE SECTION. 01 GENERO 01 IDADE PROCEDURE DIVISION. EVALUATE GENERO = MACHO ALSO IDADE > 25 WHEN TRUE ALSO TRUE PERFORM RATE - 1 WHEN TRUE ALSO FALSE PERFORM RATE - 2 WHEN FALSE ALSO TRUE PERFORM RATE - 3 WHEN OTHER PERFORM RATE - 4 END-EVALUATE.

PIC X (5). PIC S9 (3) COMP-3.

VALUATE - Outros exemplos


DATA DIVISION. WORKING-STORAGE SECTION. 01 GENERO 01 IDADE PROCEDURE DIVISION. EVALUATE TRUE ALSO TRUE WHEN GENERO = MACHO ALSO IDADE > 25 PERFORM RATE - 1 WHEN GENERO = MACHO ALSO IDADE NOT > 25 PERFORM RATE - 2 WHEN GENERO = FEMEA ALSO IDADE > 25 PERFORM RATE - 3 WHEN OTHER PERFORM RATE - 4 END-EVALUATE.

) Idem ao exemplo acima, s que testando valores na clusula WHEN:

PIC X (5). PIC S9 (3) COMP-3.

VALUATE - Outros exemplos


DATA DIVISION. WORKING-STORAGE SECTION. 01 TAXA PIC S9V9 (4) 01 PRINCIPAL PIC S9 (7) V99 01 JUROS PIC S9 (7) V99 PROCEDURE DIVISION. EVALUATE TRUE ALSO TRUE WHEN PRINCIPAL + JUROS > 50000 ALSO TAXA > 0.095 ADD 0.0075 TO TAXA WHEN PRINCIPAL + JUROS > 10000 ALSO TAXA > 0.09 ADD 0.005 TO TAXA END-EVALUATE.

3) Uso de expresses

COMP-3. COMP-3. COMP-3.

VALUATE - Outros exemplos


4) Uso da clusula THRU DATA DIVISION. WORKING-STORAGE SECTION. 01 IDADE 01 PESO 01 PREMIO PROCEDURE DIVISION. EVALUATE IDADE ALSO PESO WHEN 21 THRU 30 ALSO MOVE 200 TO WHEN 31 THRU 40 ALSO MOVE 250 TO END-EVALUATE. 140 THRU 200 PREMIO 150 THRU 225 PREMIO

PIC S9 (3) COMP-3. PIC S9 (3) COMP-3. PIC S9 (7) V99 COMP-3.

EVALUATE - EXERCCIO
Voc agora ir codificar um comando EVALUATE para revolver o seguinte problema : Tendo a informao de se h histrico de ataques cardacos na famlia, sexo, e se fumante ou no, determine o fator de risco um ataque cardaco, de acordo com o seguinte quadro: HOMEM Famlias que no possuem histrico de ataque cardaco Famlias que possuem histrico de ataque cardaco MULHER

FUMANTE = 0,18 FUMANTE = 0,14 NO FUMANTE = 0,01 NO FUMANTE = 0,005 FUMANTE = 0,32 FUMANTE = 0,24 NO FUMANTE = 0,03 NO FUMANTE = 0,02

EVALUATE - EXERCCIO

Construa abaixo, uma tabela de deciso de acordo com o quadro abaixo: Famlias que possuem histrico de ataque cardaco

Sexo

Fumante?

Fator de Risco

EVALUATE - EXERCCIO
2) Complete o programa abaixo, codificando o comando EVALUATE de acordo com a tabela de deciso construda na pgina anterior:
5 7 8 10 12 15 20 25 30 35 40 45 50 55 60 65 70 72 ENVIRONMENT DIVISION. CONFIGURATION SECTION. DECIMAL-POINT IS COMMA. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-RISK PIC Z,999. 01 WS-DATA-TABLE-SETUP. 05 FILLER PIC X (3) VALUE 05 FILLER PIC X (3) VALUE 05 FILLER PIC X (3) VALUE 05 FILLER PIC X (3) VALUE 05 FILLER PIC X (3) VALUE 05 FILLER PIC X (3) VALUE 05 FILLER PIC X (3) VALUE 05 FILLER PIC X (3) VALUE 05 FILLER PIC X (3) VALUE 05 FILLER PIC X (3) VALUE 05 FILLER PIC X (3) VALUE 05 FILLER PIC X (3) VALUE

NHS. NHN. ***. NMS. NMN. NH*. SHS. SHN. N*S. SMS. SMN. *HS.

VALUATE - EXERCCIO (Cont.)


01 WS-DATA-TABLE REDEFINES WS-DATA-TABLE-SETUP. 05 WS-DATA-ROW OCCURS 12 TIMES INDEXED BY INDX. 10 WS-HISTORY PIC X (1). 10 WS-SEX PIC X (1). 10 WS-SMOKER PIC X (1). 01 IN-DATA. 10 WS-HISTORY PIC X (1). 10 WS-SEX PIC X (1). 10 WS-SMOKER PIC X (1). PROCEDURE DIVISION. 0000-MAINLINE. PERFORM 1000-DECISION VARYNG INDX FROM 1 BY 1 UNTIL INDX > 12. STOP RUN. 1000-DECISION. MOVE WS-DATA-ROW (INDX) TO IN-DATA. *----------------------------------------------------------------* * MOVER FATOR DE RISCO PARA WS-RISK. QUANDO INVALIDO MOVER 9,999 * *----------------------------------------------------------------* EVALUATE ... END-EVALUATE. DISPLAY FATOR DE RISCO = WS-RISK.

VALUATE - EXERCCIO (Cont.)


05 SR-LETTER-GRADE PIC X (1). 88 SR-EXCELENT VALUE A. 88 SR-GOOD VALUE B. 88 SR-OK VALUE C. 88 SR-NEED-IMPROV VALUE D. 88 SR-FAIL VALUE F. PROCEDURE DIVISION. EVALUATE SR-LETTER-GRADE WHEN SR-EXCELENT DISPLAY EXCELENT TRABALHO WHEN SR-GOOD DISPLAY MUITO BOM WHEN SR-OK ... END-EVALUATE.

ndique o que est errado no comando EVALUATE abaixo:

VALUATE - EXERCCIO (Cont.)

SET... TO TRUE
O comando SET... TO TRUE para ser usado com Nomes Condicionais (Nveis 88). Com o uso deste comando voc pode setar uma condio como verdadeira sem conhecer qual o valor que teria que ser movido para o campo. Veja o exemplo abaixo: 05 CARGO- STATUS 88 TRAINEE 88 JUNIOR 88 PLENO 88 SENIOR PIC X. VALUE 1. VALUE 2. VALUE 3. VALUE 4.

Para que PLENO seja verdadeiro, com o comando MOVE: MOVE 3 TO CARGO-STATUS. Para que PLENO seja verdadeiro, com o comando SET TO TRUE: SET PLENO TO TRUE.

SET... TO TRUE
O comando SET em VS COBOL II continua com sua antiga funo de manipular os Indexadores de tabelas: SET DT-IX TO 1. SET DT-IX UP BY 1. SET DT-IDX DOWN BY 1. Com a clusula TRUE ele se torna exclusivo para o uso com nomes condicionais (Nveis 88), tornando os programas mais legveis e fceis de manter: 01 WS-EOF-FLAG PIC X VALUE N. 88 MORE-RECORDS-TO-READ VALUE N. 88 END-OF-FILE VALUE E. PROCEDURE DIVISION. ... READ INPUT-FILE AT END SET END-OF-FILE TO TRUE END-READ.

SET... TO TRUE (Cont.)


Em caso que o nvel 88 possui mltiplos valores, SET assinale para o campo, o valor da lista. Por exemplo, neste caso o comando SET movimentaria o valor 4 para WS-GDATEMONTH-9: 01 WS-GREGHORIAN-DATE-9. 05 WS-GDATE-MONTH-9 PIC X (2). 88 MONTH-WITH-31-DAYS VALUE 1 3 5 7 8 10 12. 88 MONTH-WITH-30-DAYS VALUE 4 6 9 11. 88 MONTH-OF-FEB VALUE 2. 88 MONTH-VALID VALUE 1 THRU 12. PROCEDURE DIVISION. SET MONTH-WITH-30-DAYS TO TRUE.

Indexao
Construo de Tabelas
Freqentemente, existe a necessidade do programador construir uma tabela contendo informaes. Esta tabela poder estar definida no programa ou seu contedo poder vir de uma fonte externa, tal como cartes perfurados, discos ou fitas magnticas. O programador poder construir a rea da tabela na DATA DIVISION do seu programa, na FILE SECTION ou na WORKING-STORAGE SECTION, utilizando a clusula OCCURS. Suponha, por exemplo, que necessitemos de uma rea na memria, suficiente para conter vinte ndices econmicos diversos. Ento, teremos: WORKING-STORAGE SECTION. 01 REGISTRO-TRABALHO. 03 IMPOSTO 03 INDICE 03 VARIANCA PIC 9(05)V99. PIC 9(02)V99 PIC 9(03)V99.

OCCURS 20 TIMES.

Indexao (Cont.)
Na memria uma rea chamada de registro-trabalho criada, contendo 92 bytes. Vemos que a clusula OCCURS ocasionou a reserva de vinte vezes 4 bytes, que so necessrios para o armazenamento de uma informao chamada no programa de ndice. Durante a execuo do programa, os valores sero lidos e colocados dentro da tabela de ndices. Vejamos como isto possvel.

Indexao (Cont.)
Na PROCEDURE DIVISION, o programa poder ter acesso a qualquer ndice apenas dando o nome da tabela, que no caso ndice, seguido de um subscrito. Exemplo: ADD MOVE MOVE MOVE INDICE (3) INDICE (I) INDICE (INDIC) REGIAO (ESTADO) TO TOTAL-INDICE. TO AREA1. TO AREA-SAIDA. TO XPD.

Dentro dos parnteses visto o algarismo 3, que representa o valor de uma varivel chamado ndice. O algarismo em questo nos aponta para o terceiro valor colocado na tabela. Na tabela dada como por exemplo, qualquer nmero entre 1 e 20 pode ser um ndice. Qualquer nmero acima de vinte, para o exemplo particular dado ilegal. Os ndices, entretanto, no necessitam ser itens literais numricos, podendo ser nomes simblicos, conforme demonstrado nos outros exemplos.

Indexao (Cont.)
Na aplicao de sucessivos OCCURS aos nomes de dados, devemos ter em mente que o nmero mximo de Indexadores permitidos em COBOL, para um mesmo nome 7. 77 PRODUTO PIC 99. 77 ANO PIC 99. 77 MES PIC 99. 01 PRODUTOS. 05 VENDAS-PRODUTOS OCCURS 20 TIMES. 10 VENDAS-QUINZENAL OCCURS 5 TIMES. 15 VENDAS-MENSAIS OCCURS 12 TIMES PIC S9(08) COMP3.

Tabela de 7 nveis
Agora voc poder construir de at sete nveis! Este recurso provavelmente voc dificilmente ir utilizar pois 3 nveis j eram o suficientes: WORKING - STORAGE SECTION. 01 GRADE-7 05 TAB-1 OCCURS 10 TIMES INDEXED BY IDX-1. 10 TAB-2 OCCURS 10 TIMES INDEXED BY IDX-2. 15 TAB-3 OCCURS 10 TIMES INDEXED BY IDX-3. 20 TAB-4 OCCURS 10 TIMES INDEXED BY IDX-4. 25 TAB-5 OCCURS 10 TIMES INDEXED BY IDX-5. 30 TABOCCURS 10 TIMES INDEXED BY IDX-6. 35 TAB-7 OCCURS 10 TIMES INDEXED BY IDX-7. 40 TAB-ITEM PIC S9 (3) V99 PACKED-DECIMAL. 01 TAB-DISPLAY PIC ZZ9,99

abela de 7 nveis (Cont.)

PROCEDURE DIVISION. ... PERFORM 210-DISPLAY-VALUES VARYING AFTER AFTER AFTER AFTER AFTER AFTER IDX-1 IDX-2 IDX-3 IDX-4 IDX-5 IDX-6 IDX-7 FROM FROM FROM FROM FROM FROM FROM 1 2 3 4 5 6 7 BY BY BY BY BY BY BY 1 2 3 4 5 6 7 UNTIL UNTIL UNTIL UNTIL UNTIL UNTIL UNTIL IDX-1 > IDX-2 > IDX-3 > IDX-4 > IDX-5 > IDX-6 > IDX-7 > 10 10 10 10 10 10 10

210-DISPLAY-VALUES. MOVE TAB-ITEM (IDX-1 IDX-2 IDX-3 IDX-4 IDX-5 IDX-6 IDX-7) TO TAB-DISPLAY. DISPLAY TAB-DISPLAY.
Esta a razo de o comando PERFORM VARYING aceitar at 6 clusulas AFTER.

bscrio Relativa (Relative Subscripting)


Um subscritor, um campo criado na WORKING_STORAGE, para ser utilizado como apontador de um elemento de uma tabela. recomendado utilizar um campo tipo Binrio com tamanho de uma Fillword para todos subscritores: DATA DIVISION. WORKING-STORAGE SECTION. 01 SUB1 PIC 9 (8) BINARY VALUE 0.

bscrio Relativa (Relative Subscripting) (Cont.)


No VS COBOL II, permitido utilizar trs formas de subscrio de tabelas: 1) Subscrio atravs de constantes: TAB-ITEM (1) 2) Subscrio atravs de campo: TAB-ITEM (SUB1) 3) Subscrio Relativa: TAB-ITEM (SUB1+2) Quando lidamos com tabelas de mais de uma dimenso (bidimensional, tridimensional, ...) no obrigatrio separar os subscritos com virgula: TAB-COLUMN (SUB1 SUB2) No entanto, se voc utilizar Subscrio Relativa, a virgula melhora a legibilidade do programa: TAB-COLUMN (SUB1-1, SUB2+3)

dexao Relativa (Relative Indexing)


Um indexador, um campo criado junto a declarao da tabela, e serve como um pointer (endereo) dos elementos da tabela. S pode ser utilizado para a tabela onde foi declarado. Como voc viu na pgina anterior, o VS COBOL II aceita Subscrio Relativa. Tambm possvel a Indexao Relativa. Veja o exemplo: DATA DIVISION. WORKING-STORAGE SECTION. 01 SAMPLE-TABLE. 05 TABLE-DEPT OCCURS 3 TIMES INDEXED BY INDX-A . 10 TABLE-COLUMN OCCURS 4 TIMES INDEXED BY INDX-B. 15 TABLE-ROW OCCURS 8 TIMES INDEXED BY INDX-C. PROCEDURE DIVISION. ... MOVE TABLE-ROW (INDX-A + 1, INDX-B + 2, INDX-C -1) TO ...
Indexao Relativa

dexao Relativa (Relative Indexing) (Cont.)

ATENO

A Indexao Relativa no modifica o valor do indexador. Os nicos comandos que modificam o valor de um indexador so PERFORM VARYING, SEARCH E SET.

olocando Valores em uma tabela


O VS COBOL II oferece trs formas de colocarmos valores em uma tabela: Carregar a Tabela dinamicamente Inicializar a Tabela Assinalar valores na definio da Tabela Vamos comentar as trs formas mostradas acima: Carregar a Tabela dinamicamente Se os valores iniciais de uma tabela so diferentes a cada vez que o programa executar , a tabela dever ser definida sem valores iniciais, e os valores devero ser carregados dinamicamente, antes de se manipular a tabela Para carregar a tabela dinamicamente, temos o comando: PERFORM...VARYING utilizando subscritor ou Indexador.

olocando Valores em uma tabela (Cont.)


Inicializar a Tabela Voc pode carregar a tabela com um valor durante a execuo do programa, utilizando o comando INITIALIZE. INITIALIZE TABLE-ONE O comando INITIALIZE sem REPLACING mover os seguintes valores: Spaces para itens ALPHABETIC, ALPHANUMERIC e ALPHANUMERIC-EDITED Zeros para itens NUMERIC e NUMERIC-EDITED Para mover um valor em particular, utilize a clusula REPLACING: INITIALIZE TABLE-ONE REPLACING NUMERIC DATA BY 3.

olocando Valores em uma tabela (Cont.)

ATENO

Voc no pode utilizar INITIALIZE para Tabelas de tamanho varivel (OCCURS DEPENDING ON).

olocando Valores em uma tabela (Cont.)


Assinalar valores na definio da Tabela Se a sua tabela contm valores estatsticos (por exemplo, uma tabela que contenha dias e meses do ano), os valores podem ser assinalados na prpria definio da tabela, existem trs formas. Primeira forma: 01 TABLE-ONE 05 TABLE-TWO VALUE 1234. OCCURS 4 TIMES PIC X.

olocando Valores em uma tabela (Cont.)


01 TABLE-MONTHS. 05 PIC X (11) VALUE 01JANEIRO. 05 PIC X (11) VALUE 02FEVEREIRO 05 PIC X (11) VALUE 03MARO. 05 PIC X (11) VALUE 04ABRIL. 05 PIC X (11) VALUE 05MAIO. 05 PIC X (11) VALUE 06JUNHO. 05 PIC X (11) VALUE 07JULHO. 05 PIC X (11) VALUE 08AGOSTO. 05 PIC X (11) VALUE 09SETEMBRO. 05 PIC X (11) VALUE 10OUTUBRO. 05 PIC X (11) VALUE 11NOVEMBRO. 05 PIC X (11) VALUE 12DEZEMBRO. 01 REDEFINES TABLE-MONTHS. 05 OCCURS 12 TIMES. 10 MONTH-NUMBER PIC 9 (02). 10 MONTH-NUMBER PIC X (09).

Segunda forma:

olocando Valores em uma tabela (Cont.)


Terceira forma: 01 TABLE-2 05 TABLE-ITENS OCCURS 5 TIMES. 10 X PIC X (2) VALUE AA. 10 Y PIC 9(2) VALUE 19. 10 Z PIC X (2) VALUE BB. Esta terceira a novidade do VS COBOL II, onde podemos colocar a clusula VALUE para itens da tabela. Neste caso, todas as ocorrncias (no exemplo, 5 ocorrncias) tero os mesmos valores.

PERFORM
A seguir, mostramos, algumas das sintaxes possveis do comando PERFORM no VS COBOL : PERFORM (Formato OUT-OF-LINE bsico)
R UH PERFORM procedure-name-1 [{TH O G name-2] TR HU

} procedure-

Outras sintaxes do comando PERFORM: PERFORM (Formato OUT-OF-LINE com opo UNTIL)
R UH PERFORM procedure-name-1 [{TH O G name-2] TR HU

} procedure-

PERFORM (Cont.)

dificando com Out-of-line PERFORM

5 7 8 10 12 15 20 25 30 35 40 45 50 55 60 65 70 72 0000-MAINLINE. ... PERFORM 2100-DISPLAY UNTIL WS-COUNT > 4. ... 2100-DISPLAY. ADD 1 TO WS-COUNT DISPLAY THE COUNT NOW = WS-COUNT.

PERFORM (Cont.)
Quando utilizar Inline PERFOM? Mais eficiente que o Outline PERFORM, ele otimiza o cdigo e reduz a paginao de memria virtual. Fcil leitura porque todo o cdigo est em um nico lugar. Melhor, se o cdigo a executar ser executado somente em um lugar do programa, e no em vrios lugares. Quando utilizar Outline PERFOM? Se o cdigo a executar ser executado em vrios lugares do programa. Para certeza, voc pode querer cada lgica a ser executada em um pargrafo separado, proporcionando manuteno mais fceis e maior atendimento do programa.

PERFORM (Cont.)
Voc poder continuar codificando Out-ofline com VS COBOL II, mas lembre-se, ao utilizar Inline PERFORMs, o delimitador ENDPERFORM obrigatrio.

ATENO

PERFORM (Cont.)
Testa a condio antes de executar a funo. Sua estrutura no fluxograma, conhecida como ESTRUTURA DO-WHILE, demostrada abaixo: DO-WHILE (FAA ENQUANTO)

PROCEDURE

CONDIO

Faa enquanto condio for verdadeira

Em VS COBOL, a estrutura DO-WHILE era obtida pelo comando PERFORM UNTIL, pois a condio era testada sempre antes de

PERFORM VARYING

ntaxe Out-of-Line:

ERFORM (Formato OUT-OF-LINE com opo VARYING)


PERFORM procedure-name-1 WITH TEST

VARYING

{ [ { {
BY AFTER BY

[ {

WITH TEST

[ { }

Indentifier-1 Index-name-1 FROM

}{

BEFORE AFTER

{ }]

THROUGH THRU

procedure-name-2

Indentifier-2 Index-name-2 literal-1

Indentifier-3 UNTILcondition-1 literal-2 Indentifirer-4 Index-name-3 FROM

Indentifier-6 UNTIL condition-2 literal-4

}{ } ]...

Indentifier-5 Index-name-4 Lieral-3

EARCH - Pesquisa Seqencial ou Serial


Pesquisa Serial ou Seqencial DATA DIVISION WORKING-STORAGE SECTION. 01 ARRAY-VALUES. 05 PIC 9(3)V99 VALUE 11,11. 05 PIC 9(3)V99 VALUE 22,22. 05 PIC 9(3)V99 VALUE 33,33. 05 PIC 9(3)V99 VALUE 44,44. 05 PIC 9(3)V99 VALUE 55,55. 05 PIC 9(3)V99 VALUE 66,66. 05 PIC 9(3)V99 VALUE 77,77. 05 PIC 9(3)V99 VALUE 88,88. 05 PIC 9(3)V99 VALUE 99,99. 01 ARRAY-TBL REDEFINES ARRAY-VALUES. 05 ARRAY-ELEMENT OCCURS 10 TIMES INDEXED BY AE-INDEX. 01 AE-KEY PIC 9(3)V99. PROCEDURE DIVISION. SET AE-INDEX TO 1. MOVE 0 TO RETURN-CODE. SEARCH ARRAY-ELEMENT AT END MOVE 8 TO RETURN-CODE WHEN AE-KEY (AE-INDEX) = 77,77 CONTINUE WHEN AE-KEY (AE-INDEX) = 88,88 MOVE 4 TO RETURN-CODE. END-SEARCH.

SEARCH ALL - Pesquisa Binria


Obrigatrio que a tabela esteja organizada em ordem ascendente ou descendente. DATA DIVISION WORKING-STORAGE SECTION. 01 TABLE-A. 05 TABLE-ENTRY OCCURS 90 TIMES ASCENDENTE KEY-1, KEY-2 DESCENDENTE KEY-3 INDEXED BY INDX-1. 10 PART-1 PIC 99. 10 KEY-1 PIC 9(5). 10 PART-2 PIC 9(6). 10 KEY-2 PIC 9(4). 10 PART-3 PIC 9(18). 10 KEY-3 PIC 9(5). PROCEDURE DIVISION. SEARCH ALL TABLE-ENTRY AT END PERFORM NOENTRY WHEN KEY-1 (INDEX-1) = VALUE-1 AND KEY-2 (INDEX-1) = VALUE-2 AND KEY-3 (INDEX-1) = VALUE-3 MOVE PART-1 (INDEX) TO OUTPUT-AREA END-SEARCH.

Exerccio 4 (Cont.)
A) FLUXOGRAMA

ARQENT

ARQREL

Exerccio 4 (Cont.)

B) LAY-OUTs

ARQENT PORCENT 99V99 X(56)

NOME-DISTRIB X(20)

ARQREL

DEMONSTRATIVO GRFICO DA DISTRIBUO DE COMBSTVEL EMPRESA NDICE 1 5 10 15 20 25 30 35 40 45 50 SHELL XXXXXXXXXXXXXXXXXXXXXXXXXX ESSO XXXXXXXXXXXXXXXX TEXACO XXXXXXX IPIRANGA XXXXXXXXXXXX ATLANTIC XXXXXXX SAO PAULO X HUDSON XXX

Exerccio 4 (Cont.)
C) PROCEDIMENTOS 1) No arquivo ARQENT existem registros, um para cada distribuidora de combustvel, com seu nome e porcentagem do mercado. No h registro invlidos. 2) Nenhuma porcentagem de mercado maior que 50%. 3) Leia todos os registros de ARQENT, e imprima no relatrio ARQREL, o nome da empresa e sua porcentagem em forma de grfico, representando cada 1% em um caracter X. Arredonde a porcentagem. 4) O relatrio ARQREL, possui apenas 21 linhas: Cabealho Principal - 4 linhas (2 em branco) Cabealho do detalhe - 4 linhas (1 em branco) Detalhe - 13 linhas (1 em branco entre cada empresa) 5) No h necessidade de lgica para controlar quebra de pgina. 6) O formulrio possui 80 colunas