Curso de COBOL - Aula 3

Notas da aula de 29.11.2008 (Aula #3) do Curso de COBOL da

Escola Alcides Maya com o Professor Cabral

-----------------------------------------------

IDENTIFICATION DIVISION.

PROGRAM-ID. SÉRIE DE FIBONACCI.

AUTHOR. CABRAL.

INSTALLATION. ALCIDES MAYA.

DATE-WRITTEN. 29/11/2008, SÁBADO.

DATE-COMPILED. 11/29/2008, SATURDAY.

ENVIRONMENT DIVISION.

CONFIGURATION SECTION.

SOURCE-COMPUTER. PC DO LABORATÓRIO.

OBJECT-COMPUTER. PC DA SALA 3.

SPECIAL-NAMES. DECIMAL-POINT IS COMMA.

INPUT-OUTPUT SECTION.

FILE-CONTROL.

DATA DIVISION.

* Não tem FILE SECTION pq não tem arquivos.

WORKING-STORAGE SECTION.

77 ANTERIOR PIC S9(4) VALUE -1.

77 ATUAL PIC S9(4) VALUE 1.

77 PROXIMO PIC S9(4).

* Nível 77 é para variáveis de trabalho.

* PICTURE S permite ao número ter sinal.

PROCEDURE DIVISION.

LACO.

COMPUTE PROXIMO = ANTERIOR + ATUAL.

IF PROXIMO > 1000

STOP RUN.

DISPLAY PROXIMO.

MOVE ATUAL TO ANTERIOR.

* Comando MOVE copia o ATUAL ao ANTERIOR.

MOVE PROXIMO TO ATUAL.

GO TO LACO.

----------------

Cláusula DEFINES

Muito usada para datas! Pode haver vários REDEFINES de um mesmo campo original, mas não de um redefinido.

Os campos redefinidos devem ter o mesmo número de nível (05 no exemplo) e tamanho do original (6 no exemplo).

Exemplo:

01 DATAS.

03 DATA-ELEMENTAR PIC 9(6). 291108 (=291.108)

03 DATA-1 REDEFINES DATA-ELEMENTAR.

05 DIA PIC 99. 29

05 MÊS PIC 99. 11

05 ANO PIC 99. 08

03 DATA-1 REDEFINES DATA-ELEMENTAR.

05 DIA-1 PIC 99. 29

05 MÊS-ANO PIC 9(4). 1108 (=1.108)

03 DATA-2 REDEFINES DATA-ELEMENTAR.

05 DIA-MES PIC 9(4). 2911 (=2.911)

05 ANO-1 PIC 99. 08

* O único outro jeito de “separar” seria usar (291108 DIV 10.000 = 29) e (291108 MOD 10.000 = 1108)

---------------------------------

Nível 88 (“booleano sofisticado”)

01 REGISTRO

03 NOME PIC A(36).

03 SEXO PIC A.

88 SEXO-VALIDO VALUE “M”,”F”.

* Campo do nível 88 está associado ao ÚLTIMO campo declarado. :-}

03 CEP PIC 9(8).

88 CEP-VALIDO VALUE 90000000 THRU 99000000.

03 CONCEITO PIC A.

88 CONC VALUE “A”, “B”, “C”, “D”, “E”.

88 CONC-2 VALUE “A” THRU “E”.

03 ESTADO PIC AA.

88 EST-VALIDO VALUE “RS”, “SC”, “PR”, “SP”, “RJ”, “ES”, “BA”, “SE”, “AL”, “PE”, “PB”, “RN”, “CE”, “PI”, “MA”, “PA”, “AP”, “AM”, “RR”, “RO”, “AC”, “MT”, “MS”, “GO”, “DF”, “TO” , “MG”.

88 EST-SUL VALUE “RS”, “SC”, “PR”.

88 EST-CABRAL VALUE “RS”, “SC”, “PR”, “SP”, “RJ”.

88 EST-ARROZ VALUE “RS”, “SC”, “PR”, “MT”.

03 NIVEL-RISCO PIC A.

88 NIVEL-RISCO-VALIDO VALUE “A” THRU “H”.

03 FONE PIC X(8).

88 FONE-CELULAR VALUE “80000000” THRU “99999999”.

88 FONE-FIXO VALUE “20000000” THRU “79999999”.

03 ESCOLARIDADE PIC 99.

88 ESCOL-VALIDO VALUE 1 THRU 12.

03 ESTADO-CIVIL PIC 99.

88 EST-CIVIL-VALIDO VALUE 1 THRU 8.

* ESCOLARIDADE

* 01 = Analfabeto

* 02 = Ensino Fundamental incompleto

* 03 = Ensino Fundamental completo

* 04 = Ensino Médio incompleto

* 05 = Ensino Médio completo

* 06 = Técnico

* 07 = Superior incompleto

* 08 = Superior completo

* 09 = Especialização

* 10 = Mestrado

* 11 = Doutorado(=PhD)

* 12 = Pós-doutorado

* ESTADO CIVIL

* 1 = Solteiro

* 2 = Casado

* 3 = Viúvo

* 4 = Desquitado

* 5 = Divorciado

* 6 = Separado

* 7 = Amasiado

* 8 = Outros

* Depois, o teste fica supersimples:

IF NOME IS ALPHABETIC ...

IF SEXO-VALIDO ...

* E não

IF SEXO=“M” OR SEXO=“F”

IF CEP-VALIDO ...

* E não

IF CEP GEQ 90000000 AND CEP LEQ 99000000

IF EST-VALIDO ...

IF EST-SUL ...

* E não

IF ESTADO = “RS” OR

ESTADO = “SC” OR ... :P

IF NIVEL-RISCO-VALIDO ...

IF FONE-CELULAR

DISPLAY “CELULAR”

ELSE

IF FONE-FIXO

DISPLAY “FIXO”

ELSE

DISPLAY “ERRO”.

--------------------------------------

Nível 66 – RENAMES (junta campos contíguos)

01 REGISTRO.

03 RUA PIC X(25).

03 NUM PIC 9(5).

03 APTO PIC 9(4).

03 BAIRRO PIC X(15).

03 CIDADE PIC X(25).

03 ESTADO PIC AA.

03 CEP PIC 9(8).

66 ENDERECO RENAMES RUA THRU APTO.

66 CIDADE-ESTADO RENAMES CIDADE THRU ESTADO.

66 BAIRRO-CIDADE RENAMES BAIRRO THRU CIDADE.

66 NUMERO RENAMES NUM.

66 IND-COMPLETO RENAMES RUA THRU CEP.

66 END-QUASE RENAMES ENDERECO THRU CIDADE-ESTADO.

* Renames de Renames pode!

----------------------------------

Pictures de edição (sempre fica como a gente quer que fique)

ARQ ENTRADA

03 SALARIO PIC 9(6)V99.

03 SALARIO-IMP PIC 999.999,99. * 000.000,01

03 SALARIO-IMP PIC ZZZ.ZZZ,ZZ. * , 1

03 SALARIO-IMP PIC ZZZ.ZZ9,99. * 0,01

03 CEP PIC 9(8).

03 CEP-IMP PIC 99.999-999.

03 NUMERO-SINAL PIC -9(5).

03 NUMERO-Z-SINAL PIC –Z(5). * 813 e - 1234 e - 5

03 NUMERO-SINAL PIC -----. * 813 e -1230 e -5

03 NUM-SINAIS PIC +++++. * +815 e -1230 e -5 (sofisticada!)

03 SALARIO-DEPUTADO PIC +++.+++,++9,99.

03 COM-CIFRAO PIC $$$.$$$,$$9,99. (muito sofisticada!)

* ponto ( . ) enfeite usado para milhares

* vírgula ( , ) vírgula decimal

* Ze (Z) supressão de zeros à esquerda não significativos

* Picture de inserção ( - )

* Teria que botar um ON SIZE ERROR DISPLAY “Cálculo tal estourou o campo tal” em cada comando de cálculo... :-P

----------------------------------------------

Cabral é cultura:

 COBOL é a única linguagem que tem um comando como MOVE (que faz cópia de uma variável para outra).

 O SINAL do número não ocupa espaço extra (usa metade do primeiro byte do número 0000=+; 1111=-).

 DEFINES é muito usado para datas com 8 dígitos (normal é 6) nas versões da linguagem posteriores a 2002.

 Há 80 anos, quando surgiram as primeiras instalações elétricas, os engenheiros estudaram a melhor posição para as tomadas (a 50cm do chão) e dos interruptores de luz (a 1,30m do chão).

 Ergonomia para mesas de computador: posição do teclado e do mouse devem permitir aos braços ficarem em um ângulo de 90 graus, e o monitor deve ficar com a primeira linha na altura dos olhos.

 Notebook não são nada ergonômicos! Solução seria ligar um monitor externo (na posição correta) ao note. :-P

 Freqüência da luz em câmera de cinema (24Hz) difere da da TV (30Hz) e da do micro (50Hz), dá efeito estranho.

 Videogame/TETRIS pode servir como “aquecimento” para desenvolver a capacidade de aprender (libera Dopamina).

 JoyStick (bastão da alegria) surgiu para permitir desenhar círculos. Mouse (camundongo) era bem parecido mesmo!

 Depois de 1 dia sem fumar, o organismo recupera 50% das suas funções (cirurgias em fumantes sempre “demoram” um dia); depois de 1 semana sem fumar, recupera 90%; mas para 95% leva 1 ano; e para 100% (do coração), 10 anos. Para 100% do pulmão, 15 anos. Entre os informáticos, há apenas 2% de fumantes.  (Mas e os viciados em café?)

 Os CEPs do Rio Grande do Sul vão do número 90.000-000 até o 98.999-999.

 Com o nível 88, a consistência dos cadastros (e de todos os campos) fica uma barbada! Que só COBOL tem!

 Antigo apelido das britadeiras: lambreta de baiano. :-}

 Ainda existem cidades no Nordeste cujos números de telefone são de 7 dígitos.

 A operação “caderno” (fiado) moderna é o cartão magnético.

 “Tecnólogo” hoje não é grau de escolaridade; é como um cursinho de COBOL. :-} Antigamente, era como Bacharel!

 PhD = Past High Degree ou PhD = PHilosophical Degree

 Desquitado (na Justiça) não pode casar de novo; Divorciado (na Justiça), pode; Separado (CF1988) só no Cartório.

 O Rio Grande do Sul tem em torno de 240 marcas diferentes de arroz. Os outros estados, juntos, têm cerca de 20.

 Não existem telefones cujo número comece com 1.

 Só o Excel, além do COBOL, consegue fazer máscaras de edição de números de maneira sofisticada.

 Problema de falta na Picture (faltaram casas) deixou a curva estatística do vestibular achatada para dentro, em vez de normal.

--------------------------------