cobol

Embed Size (px)

Citation preview

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-RequisitoEsse treinamento requer que os participantes possuam os seguintes prrequisitos : Conhecimentos bsicos de programao TSO e JCL

Captulo 2 Elementos bsicos do COBOL II

CaracteresNumricos - 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 CobolDividimos em dois grupos: Palavras Reservadas Palavras definidas pelo programador

Palavras em CobolPalavras 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 CobolTipos 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 ProgramadorTambm 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

ConstantesConstantes 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 AlfanumricosSo 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 FigurativasPossuem 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 COBOLUm 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 DIVISIONDocumenta 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 DIVISIONEsta 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 DIVISIONDescrever 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

ColunasO 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

MARGENSEstas 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.

EXEMPLOPara 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 FormatosA 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 EspeciaisNo 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

InformaesA 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

SeesENVIRONMENT 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.

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

SeesINPUT-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 SECTIONDATA 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 ModeClusula 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 LABELClusula 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 registrosComo 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 EspeciaisOs 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.

FILLERUm 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 SintticasO 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 PICTUREOs 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 PICTUREResumindo 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 edioA 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.

ExemploArquivo 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 CamposZonado 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 SectionAqui 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).

VALUEVALUE 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.

ExemploDIVISION.

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

REDEFINESA 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 ESTRUTURADAO 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 COBOLO 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 EstruturadaO 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 EstruturadaBase 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 EstruturadaA 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 ControleSEQNCIA

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

V

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

V

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 executadoCONDIO PROCEDURE

REPETIO (DO-n-TIMES)

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

Construes de Controle (Cont.)FUGAA 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.)FUGANeste 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 mduloUm 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 ProgramaTcnicas 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 - SeqnciaConstrues de Controle

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

Diagrama de Ao - SeleoConstrues 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 - RepetioConstrues 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 - FugaConstrues 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 FluxogramaPGM001PROCESSAMENTO LEITURA

INICIO

LER CLIENTE

LEITURA PROCESSA MENTO

F EOF?

V

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 FluxogramaPRINCIPAL 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 - Exerccio1)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) COPYs01 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 - UnidadesEsta 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

SeoOs 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.

PargrafoUm 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

INITIALIZEUm 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

INITIALIZEUm 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.

INITIALIZEINTIALIZE 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

INITIALIZEClusula 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

INITIALIZEO 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.

INITIALIZEoutro 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

INITIALIZEQuando 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

ACCEPTFormato 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.

ACCEPTConsideraes: 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

MOVEA 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.

MOVERegras: 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 CORRESPONDINGA 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 CORRESPONDINGExemplo: 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 RefernciaO 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 RefernciaExemplos: 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 RefernciaCom 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 RefernciaEm 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 RefernciaComo 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 FIELD2A EN T OO 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 CombinadosSubscrio 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 RUNTem 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).

1

Exerccio 11) 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 - ADDEsse 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 - SUBTRACTEsse 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 MULTIPLYEsse 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 DIVIDEEsse 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 - OperandosExistem 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 - COMPUTEUma 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 ROUNDEDQuando 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 2Objetivos : 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-IFCom 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-IFCodificando sem end-if1 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 AninhadosAnalise 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 AninhadosCom 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 AninhadosTestes 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 - IFTeste 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 IFSem 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 RELACIONAISY

0

1

2

3

4

5

6 > 3

< 3

Em VS COBOL: IF A NOT > 3

NOT < 3 = 2 AND WS-NUMBER C NEXT SENTENCE ELSE ADD 1 TO C END-IF ELSE PERFORM IMPRESSAO END-IF.

CONTINUEO 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.

CONTINUENem 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

OPENSua 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

READRealiza 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)

READExemplo: 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.

READAo 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 tran