1) O documento apresenta uma série de exercícios de programação em COBOL para serem desenvolvidos, incluindo programas para realizar cálculos aritméticos, ler e processar dados de arquivos, imprimir relatórios com quebras de página e totalizações. 2) Os exercícios envolvem temas como entrada e saída de dados, laços, condicionais, arquivos, manuseio de registros e formatação de saída. 3) São fornecidos detalhes sobre os layouts dos arquivos de
2. Direitos Autorais – Escola de Programadores 2
Exercício 1: Desenvolver um programa que receba uma informação passada via JCL e exiba o conteúdo desta informação na sysout de execução. Utilizar os seguintes comandos: ACCEPT, DISPLAY, DATE, TIME e DAY-OF-WEEK Exercício 2: Desenvolver um programa que efetue as 4 operações aritméticas, sendo que para cada operação, deverá ser exibido o valor do cálculo. Utilizar os seguintes comandos: ADD, SUBTRACT, MULTIPLY, DIVIDE E COMPUTE Exercício 3: Desenvolver um programa para ler números, até o final da lista e exibir somente os números maiores que 100. No final mostrar a quantidade total de números maiores que 100. Exercício 4: Desenvolver um programa usando a técnica de AVALIE ou EVALUATE, em que dada a idade de N nadadores, até idade = ZEROS, acumule a quantidade total de alunos em cada categoria, de acordo com a classificação abaixo:
- Baby = até 4 anos
- Infantil A = 5 a 7 anos
- Infantil B = 8 a 11 anos
- Juvenil A = 12 a 13 anos
- Juvenil B = 14 a 17 anos
- Adultos = Maiores de 18 anos
No final mostrar a quantidade de nadadores em cada categoria. Exercício 5: Desenvolver um programa que identifique os números pares e impares. Processamento: Receber um número via entrada padrão - SYSIN, no formato PIC 9(03), verificar se o mesmo é par ou impar e exibir a mensagem correspondente via saída padrão – SYSOUT. Repetir o processamento, até receber um número igual a 000.
3. Direitos Autorais – Escola de Programadores 3
Exercício 6: Desenvolver um programa, utilizando os comandos PERFORM THRU e PERFORM UNTIL, conforme as seguintes etapas. - Ler o arquivo ENTRADA, até o fim - Selecionar os clientes que possuam idade superior a 60 anos e residam em São Paulo. - Gravar os dados selecionados no arquivo SAIDA. - Exibir total de Qtde. Reg.Lidos, Qtde. Reg. Gravados e Qtde. Reg. Desprezados LAYOUT – ENTRADA – Tamanho do registro (LRECL) 100 posições CODIGO NOME ENDEREÇO TELEFONE IDADE CIDADE
9(04)
X(25)
X(30)
9(08)
9(03)
X(20)
X(10)
LAYOUT – SAIDA – Tamanho do registro (LRECL) 100 posições CODIGO NOME ENDEREÇO TELEFONE IDADE CIDADE
9(04)
X(25)
X(30)
9(08)
9(03)
X(20)
X(10)
Exercício 7:
4. Direitos Autorais – Escola de Programadores 4
Exercício 8: Desenvolver um programa estruturado que reflita a somatória dos gastos por agência e conta do “Contas Corrente A” e grave o resultado no “Contas Corrente B”. Importante: Poderá haver vários registros no “Contas Corrente A” com a mesma agência e conta, neste caso somente um registro será gravado no “Contas Corrente B” com a somatória dos registros do “Contas Corrente A”. Exercício 9: Desenvolver um programa que leia o cadastro de alterações e grave o cadastro de alunos, exibindo a quantidade de inserções efetuadas.
5. Direitos Autorais – Escola de Programadores 5
Exercício 10:
Codificar o programa EXEMPLO da apostila COBOL, criando os seus arquivos com dados
sugeridos pelo professor. Execute o programa e anote os resultados abaixo:
Qtde. Reg. Lidos no ARQENT
Qtde. Reg. Gravados no ARQSAI
Hora do início do processamento
Hora do final do processamento
Exercício 11:
Fluxo e descrição do processamento
ESTOQUE
REPOSICAO
GP20Bxxx REG. LIDOS
REG.GRAVADOS
Layouts dos arquivos de entrada e saída
ENTRADA – ESTOQUE – tamanho do registro (LRECL) 50 posições
CODPROD-E DESCRICAO-E QTDEST-E QTDMIN-E QTDMAX-E PRECO-E
Ler os registros do arquivo ESTOQUE gerando o arquivo
REPOSICAO com os itens em estoque que deverão ser
repostos.
Um item deverá ser reposto quando a quantidade em
estoque for menor que a quantidade mínima;
Calcular a quantidade de reposição como a diferença entre
a quantidade máxima e a quantidade em estoque.
QTDREP-S = QTDMAX-E – QTDEST-E.
Ao final do processamento informar o total de registros
lidos e o total de registros gravados.
6. Direitos Autorais – Escola de Programadores 6
9(04) X(25) 9(03) 9(03) 9(03) 9(04)v99 X(06)
SAIDA – REPOSICAO – tamanho do registro (LRECL) 20 posições
CODPROD-S QTDEST-S QTDMAX-S QTDREP-S PRECO-S
9(04) 9(03) 9(03) 9(03) 9(04)V99 X(01)
Mensagem final – totais de registros lidos e gravados
TOTAIS DO PROCESSAMENTO
TOTAL DE REGISTROS LIDOS...: 999
TOTAL DE REGISTROS GRAVADOS: 999
------- FINAL DE EXECUCAO ------
Exercício 12:
Quebra de pagina com totalização por pagina e geral
Fluxo e descrição do processamento
RELATO
CADALUNO
GP50Bxxx
Layouts dos arquivos de entrada e saída
ENTRADA – CADALUNO
CLASSE-E NUM-E NOME-E ENDE-E NOTA1-E NOTA2-E NOTA3-E IDADE-E
X(03) 9(03) X(40) X(40) 99v99 99v99 99v99 9(02)
SAIDA – RELATO – imprimir 50 linhas por pagina
1...5...10....5...20....5...30....5...40....5...50....5...60....5...70....5...80
dd/mm/aaaa ESCOLA DA VIDA - RELACAO DE ALUNOS POR SALA DE AULA PAG. 99
CODIGO DA CLASSE 999
NUMERO NOME DO ALUNO NOTA1 NOTA2 NOTA3 MEDIA
Ler os registros do arquivo CADALUNO gerando relação de alunos por sala
de aula.
Ao final de cada classe informar o total de alunos e a media da classe.
Imprimir ao final da ultima página.
Iniciar a impressão de nova classe em nova pagina.
Ao final do processamento imprimir, em pagina separada, com o primeiro
cabeçalho o total de classes, o total de alunos da escola e media entre os
alunos da escola:
Media do aluno :
(NOTA1 x 2 + NOTA2 x 2 + NOTA3 x 3) / 7
Média da classe:
médias dos alunos da classe / total de alunos da classe
Média geral :
médias de todos os alunos / total de alunos da escola
7. Direitos Autorais – Escola de Programadores 7
999 x......................................x Z9,99 Z9,99 Z9,99 Z9,99
999 x......................................x Z9,99 Z9,99 Z9,99 Z9,99
999 x......................................x Z9,99 Z9,99 Z9,99 Z9,99
999 x......................................x Z9,99 Z9,99 Z9,99 Z9,99
999 x......................................x Z9,99 Z9,99 Z9,99 Z9,99
TOTAL DE ALUNOS... 999 - MEDIA DA CLASSE Z9,99
TOTAL DE CLASSES... 99 - TOTAL DE ALUNOS... 999 - MEDIA GERAL.... Z9,99
Exercício 13:
Atualizando o cadastro de funcionários
Fluxo do processamento
CADFUNCA
GP60Bxxx
RELATO
CADMOVTO
CADFUNCN
Descrição do Processamento
Gravar versão atualizada do Cadastro de Funcionários – CADFUNCN - a partir do processamento
dos arquivos CADFUNCA e CADMOVTO, gerando relatório com as ocorrências encontradas
durante a execução.
Regras para o processamento
Todos os registros nos arquivos CADFUNCA e CADMOVTO estão classificados em ordem
ascendente pelo código do funcionário CODFUN;
O campo TIPO-M, no arquivo CADMOVTO indica a operação que deverá ser realizada:
TIPO-M = „A‟ Alteração de dados cadastrais;
TIPO-M = „I‟ Inclusão de registro de novo funcionário;
TIPO-M = „E‟ Exclusão de registro do arquivo CADFUNCA.
Ler inicialmente um registro do arquivo CADFUNCA e um registro do arquivo CADMOVTO,
procedendo conforme segue:
1 CODFUN-A = CODFUN-M Alteração de dados ou exclusão de registro
Se TIPO-M = „A‟, mover os campos do registro do arquivo CADMOVTO, com conteúdo válido,
para o registro do cadastro de funcionários CADFUNCA e gravar o registro atualizado no
arquivo CADFUNCN. Listar o registro do arquivo CADFUNCA antes e depois da alteração com
as mensagens correspondentes.
CONTEÚDO VÁLIDO: campos numéricos com conteúdo > 0 e alfanuméricos com
conteúdo <> de brancos.
Se TIPO-M = „E‟, não gravar o registro do arquivo CADFUNCA no arquivo CADFUNCN. Listar
o registro eliminado com a mensagem correspondente.
8. Direitos Autorais – Escola de Programadores 8
Se TIPO-M <> „A‟ ou „E‟, gravar o registro do arquivo CADFUNCA no arquivo CADFUNCN sem qualquer alteração. Listar o registro do arquivo CADFUNCA com a mensagem correspondente.
Ler novo registro dos arquivos CADFUNCA e CADMOVTO.
CODFUN-A < CODFUN-M Permanência (registro sem alteração)
Gravar o registro do arquivo CADFUNCA no arquivo CADFUNCN, sem qualquer alteração. Não listar o registro.
Ler novo registro do arquivo CADFUNCA.
CODFUN-A > CODFUN-M Inclusão de novo registro do Cadastro de Funcionários
Se TIPO-M = „I‟, mover os campos do registro do arquivo CADMOVTO para a nova versão do cadastro de funcionários CADFUNCN e gravar o novo registro. Listar o registro com a mensagem correspondente.
IMPORTANTE: O campo TIPO-M não faz parte do registro do arquivo CADFUNCN e, portanto não deve ser movido.
Se TIPO-M <> „I‟, listar o registro do arquivo CADMOVTO com a mensagem correspondente.
Ler novo registro do arquivo CADMOVTO.
Layouts dos arquivos de entrada e saída
ENTRADA – CADFUNCA – REGISTRO: 80 POSIÇÕES CODFUN-A NOME-A FUNCAO-A SALARIO-A VENCTOS-A DESCTOS-A
9(04)
X(35)
X(20)
9(04)v99
9(04)v99
9(04)v99
X(03)
ENTRADA – CADMOVTO – REGISTRO: 80 POSIÇÕES CODFUN-M NOME-M FUNCAO-M SALARIO-M VENCTOS-M DESCTOS-M TIPO-M
9(04)
X(35)
X(20)
9(04)v99
9(04)v99
9(04)v99
X(01)
X(02)
SAIDA – CADFUNCN – REGISTRO: 80 POSIÇÕES CODFUN-N NOME-N FUNCAO-N SALARIO-N VENCTOS-N DESCTOS-N
9(04)
X(35)
X(20)
9(04)v99
9(04)v99
9(04)v99
X(03)
SAIDA – RELPAG – imprimir 50 linhas por pagina (ver anexo)
9. Direitos Autorais – Escola de Programadores 9
Exercício 14: Desenvolver um programa para um batimento entre dois arquivos do contas correntes (“A” e “B”). Conforme a especificação abaixo: ROTINA PRINCIPAL Processar ROTINA INICIO Processar ROTINA PROCESSAMENTO até que seja Agência e C. Corrente do “A” seja High-values e Agência e C. Corrente do Movimento seja High-values Processar ROTINA FIM Parar o processamento ROTINA INICIO Exibir “INICIO DE PROCESSAMENTO” Abrir para leitura CONTAS CORRENTE “A” e Movimentos Abrir para escrita a CONTAS CORRENTE “B” e Listagem Processar ROTINA LER CONTAS CORRENTE “A” Processar ROTINA LER CONTAS MOVIMENTOS ROTINA PROCESSAMENTO SELECIONAR Agência e C.Corrente “A” e Agência e C.Corrente do Movimento Caso Agência e C.Corrente do “A” > Agência e C.Corrente do Movimento Processar MOVIMENTO SEM CONTAS CORRENTES Processar ROTINA LER MOVIMENTO Caso Agência e C.Corrente do “A” < Agência e C.Corrente do Movimento Mover dados do CONTAS CORRENTE do “A” para CONTAS CORRENTE do “B” Gravar CONTAS CORRENTE do “B” Processar ROTINA LER CONTAS CORRENTE “A” Caso Agência e C.Corrente do “A” = Agência e C.Corrente do Movimento Somar valor do Movimento ao Saldo do CONTAS CORRENTE do “A” Processar ROTINA LER MOVIMENTO FIM SELECIONAR ROTINA SEM CONTAS CORRENTES Processar ROTINA CABECALHO Mover dados do Movimento para DET1 Imprimir DET1. ROTINA LER CONTAS CORRENTE “A” Ler Contas corrente “A” SE Fim Mover High-values para Agência e C.Corrente do “A” FIM-SE ROTINA LER CONTAS CORRENTE “B”
10. Direitos Autorais – Escola de Programadores 10
Ler Contas corrente “B” SE Fim Mover High-values para Agência e C.Corrente do “B” FIM-SE ROTINA FIM Fechar CONTAS-CORRENTES “A”, “B” e “C” Exibir “FIM DE PROCESSAMENTO” Exercício 15:
Desenvolver um programa, seguindo a descrição abaixo: Gravar versão atualizada do Cadastro de Conta Corrente – CADASTRO NOVO à partir do processamento dos arquivos CADASTRO e MOVIMENTO, exibindo mensagem com registros sem correspondência.
Layouts dos arquivos de entrada e saída ENTRADA – CADCCA – REGISTRO: 50 POSIÇÕES AGENCIA-CCA CONTA-CCA NOME-CCA SALDO-CCA LIMITE-CCA FILLER 9(003) 9(004)
X(030)
S9(007)V99
9(07)V99
X(003)
CHAVEREG ENTRADA – MOVCC – REGISTRO: 20 POSIÇÕES AGENCIA-MOV CONTA-MOV LANC LANCTO-MOV TIPOL-MOV FILLER 9(003) 9(004) 9(007)V99
9(001)
X(003)
CHAVEREG 1 –débito 2 - crédito SAIDA – CADCCN – REGISTRO: 50 POSIÇÕES AGENCIA-CCN CONTA-CCN NOME-CCN SALDO-CCN LIMITE-CCN FILLER 9(003) 9(004)
X(030)
S9(007)V99
9(07)V99
X(003)
11. Direitos Autorais – Escola de Programadores 11
Exercício 16: Desenvolver um programa para gerar um arquivo VSAM KSDS, à partir do arquivo de entrada abaixo. O layout do VSAM, será igual à entrada. ENTRADA: AGENCIA-CCN CONTA-CCN NOME-CCN SALDO-CCN LIMITE-CCN FILLER 9(003) 9(004)
X(030)
S9(007)V99
9(07)V99
X(003)
SAÍDA: AGENCIA-CCN CONTA-CCN NOME-CCN SALDO-CCN LIMITE-CCN FILLER 9(003) 9(004)
X(030)
S9(007)V99
9(07)V99
X(003)
CHAVE DO VSAM
12. Direitos Autorais – Escola de Programadores 12
Exercício 17:
Atualizando o cadastro de produtos (VSAM KSDS)
Fluxo do processamento
LxxB0070
RELATO
MOVIMENTO
PRODUTOS
VSAM KSDS
Descrição do Processamento
Atualizar o cadastro de produtos – PRODUTOS – a partir das informações contidas no arquivo
MOVIMENTO (já consistido) e com base no conteúdo do campo TIPO-M. Gerar relatório –
conforme layout de impressão anexo - com as ocorrências encontradas durante a execução e, ao
final do processamento imprimir em pagina separada com o primeiro cabeçalho, estatísticas de
processamento, conforme layout de impressão anexo.
IMPORTANTE: o processamento será mensal e no relatório, deverá ser colocado o mês por
extenso e ano, para identificar o mês de referência.
Regras para atualização
O campo TIPO-M, no arquivo MOVIMENTO indica a operação que deverá ser realizada:
TIPO-M = „A‟ Alteração de dados cadastrais;
TIPO-M = „I‟ Inclusão de registro de novo produto;
TIPO-M = „E‟ Exclusão de registro do arquivo PRODUTOS.
Ler registro do arquivo MOVIMENTO e proceder conforme segue:
Se TIPO-M = „A‟ – Alteração de dados
Acessar o registro correspondente no arquivo PRODUTOS, utilizando a o conteúdo do campo
CODPROD-E como chave do arquivo;
Se o registro não for encontrado no arquivo PRODUTOS, imprimir o registro do arquivo
MOVIMENTO com a mensagem adequada – NAO CADASTRADO, e considerá-lo como
registro rejeitado;
Se o registro for encontrado, mover os campos do registro do arquivo MOVIMENTO, com
conteúdo válido, para o registro do cadastro de produtos PRODUTOS e efetuar a atualização
do mesmo. Listar o registro do arquivo PRODUTOS, antes e depois da alteração com as
mensagens correspondentes – ANTES ALTERACAO e APOS ALTERACAO.
CONTEÚDO VÁLIDO: campos numéricos com conteúdo numérico (inclusive zeros) e
alfanuméricos com conteúdo diferente de brancos.
13. Direitos Autorais – Escola de Programadores 13
Se TIPO-M = „I‟ – Inclusão de registro
Incluir novo registro no cadastro de produtos PRODUTOS, a partir do registro do arquivo MOVIMENTO, utilizando o conteúdo do campo CODPROD-M como chave. Listar o registro com a mensagem correspondente – INCL. EFETUADA.
Se já existir registro com mesma chave, listar o registro do arquivo MOVIMENTO com a mensagem correspondente – JA CADASTRADO, considerando-o como registro rejeitado.
IMPORTANTE: O campo TIPO-M não faz parte do registro do arquivo PRODUTOS. Se TIPO-M = „E‟ – Exclusão do registro
Excluir o registro do arquivo de produtos PRODUTOS – utilizando o conteúdo do campo CODPROD-M como chave. Listar o registro eliminado com a mensagem correspondente – EXCL. EFETUADA.
Se não existir, no arquivo PRODUTOS, registro a ser excluído, listar o registro do arquivo MOVIMENTO, com a mensagem correspondente – NAO CADASTRADO., considerando-o como registro rejeitado.
Se TIPO-M diferente de „A‟, „E‟ ou „I‟ listar o registro do arquivo MOVIMENTO com a mensagem correspondente - TIPO INVALIDO, considerando o registro como rejeitado. Ler novo registro do arquivo MOVIMENTO. Layouts dos arquivos de entrada e saída (acessíveis via COPY) Cadastro de Produtos – PRODUTOS – registro 65 posições CODPROD-P DESCRI-P LOCAL-P QTDEST-P QTDMIN-P QTDMAX-P PRECO-P
X(06)
X(35)
X(06)
9(04)
9(04)
9(04)
9(04)v99
ENTRADA – MOVIMENTO – registro 66 posições CODPROD-M DESCRI-M LOCAL-M QTDEST-M QTDMIN-M QTDMAX-M PRECO-M TIPO-M
X(06)
X(35)
X(06)
9(04)
9(04)
9(04)
9(04)v99
X(01)
SAIDA – RELATO – imprimir 50 linhas por pagina 1...5...10....5...20....5...30....5...40....5...50....5...60....5...70....5...80....5...90 ATUALIZACAO DO CADASTRO DE PRODUTOS – MES BASE xxxxxxxxx/aa PAG. 99 IMAGEM DO REGISTRO OCORRENCIA x................................................................x x.............x x................................................................x x.............x x................................................................x x.............x x................................................................x x.............x x................................................................x x.............x x................................................................x x.............x x................................................................x x.............x x................................................................x x.............x x................................................................x x.............x x................................................................x x.............x x................................................................x x.............x 1...5...10....5...20....5...30....5...40....5...50....5...60....5...70....5...80....5...90 ATUALIZACAO DO CADASTRO DE PRODUTOS – MES BASE xxxxxxxxx/aa PAG. 99 ESTATISTICA FINAL DE PROCESSAMENTO TOTAL DE REGISTROS ALTERADOS..... 999 TOTAL DE REGISTROS INCLUIDOS..... 999 TOTAL DE REGISTROS EXCLUIDOS..... 999 TOTAL DE REGISTROS REJEITADOS.... 999
14. Direitos Autorais – Escola de Programadores 14
Exercício 18: Neste programa usaremos a cláusula OCCURS. Pesquisaremos uma tabela indexada com a instrução SEARCH ALL, isso causará uma pesquisa binária e a tabela tem que estar em ordem crescente pela chave. Veja o exemplo abaixo e desenvolva outro, usando a mesma técnica.
15. Direitos Autorais – Escola de Programadores 15
Exercício 19: Desenvolver um programa usando a instrução CALL para ligarmos um programa principal a um sub-programa. As vantagens de usarmos um sub-programa é que rotinas repetitivas aos programas principais são codificadas uma única vez. Este exercício terá um programa principal que acessará uma sub-rotina para trazer os nome do mês informado, veja o fluxo abaixo.