PROGRAMAÇÃO
COBOL
Módulo
2 — Lógica de programação aplicada ao COBOL
Aula 1 — Entrada, processamento e saída de
dados
Em qualquer linguagem de programação,
antes mesmo de pensar em comandos mais complexos, é importante compreender uma
ideia básica: todo programa existe para trabalhar com dados. Ele recebe
informações, faz algum tipo de tratamento sobre elas e devolve um resultado.
Essa lógica, conhecida como entrada, processamento e saída de dados, é uma das
bases mais importantes da programação e aparece com muita força no COBOL.
No COBOL, essa ideia é especialmente
relevante porque a linguagem foi criada para atender a sistemas comerciais,
administrativos e financeiros. Esses sistemas lidam com informações o tempo
todo: nomes de clientes, números de contas, salários, descontos, parcelas,
estoques, notas fiscais, contratos, pagamentos, saldos e relatórios. Por isso,
compreender como os dados entram no programa, como são processados e como os
resultados são apresentados é um passo essencial para quem está começando.
A entrada de dados é o primeiro momento
desse fluxo. Ela representa tudo aquilo que o programa recebe para poder
funcionar. Esses dados podem ser digitados por uma pessoa, lidos de um arquivo,
recebidos de outro sistema ou carregados de uma base de informações. Em um
sistema simples, a entrada pode ser o nome de um funcionário e seu salário. Em
um sistema maior, pode ser uma lista com milhares de registros de clientes ou
movimentações financeiras.
Para entender melhor, imagine uma empresa
que precisa calcular o salário líquido de seus funcionários. O programa não
pode fazer esse cálculo sozinho, sem informações. Ele precisa receber o salário
bruto, os descontos, os adicionais, as faltas, as horas extras e outros dados
necessários. Cada uma dessas informações é uma entrada. Sem elas, não há como
chegar a um resultado confiável.
Em COBOL, a entrada de dados está
diretamente ligada aos campos declarados na Data Division. Como visto no módulo
anterior, antes de o programa usar qualquer informação, é preciso preparar os
campos que irão armazená-la. Isso significa que o programador deve definir
quais dados serão recebidos, qual será o nome de cada campo, qual tipo de
informação ele armazenará e qual tamanho será reservado para ele.
Essa preparação é muito importante porque um dado recebido de forma inadequada pode comprometer todo o restante do processo. Se um valor monetário for lido incorretamente, o cálculo poderá sair errado. Se um
preparação é muito importante porque
um dado recebido de forma inadequada pode comprometer todo o restante do
processo. Se um valor monetário for lido incorretamente, o cálculo poderá sair
errado. Se um nome for cortado porque o campo tem tamanho insuficiente, o
cadastro poderá ficar incompleto. Se um código for tratado como número quando
deveria ser apenas uma identificação, a lógica do sistema poderá gerar
confusão.
Depois da entrada, vem o processamento. O
processamento é o momento em que o programa realiza ações sobre os dados
recebidos. Essas ações podem ser cálculos, comparações, movimentações de
valores, verificações, classificações ou qualquer operação necessária para
transformar as informações iniciais em um resultado útil.
Em um programa de folha de pagamento, o
processamento pode calcular descontos, somar benefícios e chegar ao salário
líquido. Em um sistema de cobrança, pode verificar se uma parcela está atrasada
e calcular juros. Em um controle de estoque, pode subtrair a quantidade vendida
da quantidade disponível. Em um cadastro de clientes, pode organizar os dados
recebidos e preparar uma mensagem de confirmação.
O processamento é, portanto, a parte em
que a lógica do programa aparece de maneira mais evidente. É nesse momento que
as regras do mundo real são transformadas em instruções. Uma regra
administrativa como “aplicar desconto de 6% para quem utiliza vale-transporte”
precisa ser convertida em cálculo. Uma regra como “bloquear cliente com saldo
negativo acima do limite permitido” precisa ser convertida em comparação e
decisão.
No COBOL, esse processamento acontece
principalmente na Procedure Division. É ali que o programa executa as
instruções necessárias. A Procedure Division pode movimentar dados de um campo
para outro, realizar operações matemáticas, tomar decisões, repetir processos e
organizar a sequência das ações. Enquanto a Data Division prepara os dados, a
Procedure Division coloca esses dados em movimento.
Por fim, temos a saída de dados. A saída é
o resultado produzido pelo programa após o processamento. Esse resultado pode
aparecer na tela, ser impresso em um relatório, gravado em um arquivo, enviado
para outro sistema ou armazenado para uso posterior. A saída é aquilo que torna
visível o trabalho realizado pelo programa.
Em um sistema de folha de pagamento, a saída pode ser o salário líquido do funcionário. Em um sistema bancário, pode ser o saldo atualizado da conta. Em um sistema de estoque, pode ser um aviso de
que, pode ser um aviso de
que determinado produto está abaixo da quantidade mínima. Em uma rotina de
cobrança, pode ser o valor total da parcela com multa e juros.
É importante perceber que a saída precisa
ser clara e útil. Um programa pode fazer o cálculo corretamente, mas se
apresentar o resultado de forma confusa, o usuário ainda terá dificuldade para
compreender a informação. Em sistemas empresariais, relatórios, mensagens e
arquivos de saída precisam ser organizados, pois muitas decisões dependem
deles.
A lógica de entrada, processamento e saída
pode parecer simples, mas ela está presente em sistemas muito grandes e
complexos. Mesmo programas usados por bancos, seguradoras, órgãos públicos ou
grandes empresas seguem essa estrutura básica. A diferença é que, nesses
ambientes, a quantidade de dados é muito maior e as regras de processamento são
mais detalhadas.
Pense, por exemplo, no fechamento mensal
de uma empresa. O sistema pode receber dados de vendas, pagamentos, despesas,
impostos, folha de pagamento e movimentações bancárias. Depois, processa essas
informações de acordo com regras contábeis e administrativas. Ao final, gera
relatórios, demonstrativos e arquivos para outros departamentos. Embora o
processo seja grande, ele continua seguindo a mesma lógica: entrada,
processamento e saída.
Essa ideia ajuda o aluno iniciante a
organizar o raciocínio. Antes de escrever um programa, é útil fazer três
perguntas: quais dados o programa precisa receber? O que ele deve fazer com
esses dados? Qual resultado ele deve apresentar? Essas perguntas simples ajudam
a planejar melhor a lógica e evitam que o programador comece a escrever
comandos sem entender o problema.
Em COBOL, esse planejamento é ainda mais
importante porque a linguagem valoriza a organização. Como os dados são
declarados de forma estruturada e os procedimentos ficam em uma parte
específica do programa, o aluno precisa aprender a pensar antes de escrever. Um
bom programa começa com a compreensão do problema, passa pela definição dos
dados e só depois chega às instruções de processamento.
Um exemplo simples pode tornar essa lógica mais clara. Imagine um pequeno programa para calcular o valor final de uma compra com desconto. A entrada seria o valor original da compra e o percentual de desconto. O processamento seria calcular o valor do desconto e subtrair esse valor do total. A saída seria o valor final a pagar. Mesmo sem entrar em detalhes técnicos, já é possível entender o funcionamento
do desconto e subtrair esse
valor do total. A saída seria o valor final a pagar. Mesmo sem entrar em
detalhes técnicos, já é possível entender o funcionamento do programa.
Outro exemplo pode envolver uma rotina de
aprovação de crédito. A entrada seria a renda do cliente, o valor solicitado e
talvez informações sobre seu histórico. O processamento verificaria se os dados
atendem aos critérios definidos pela empresa. A saída poderia ser uma mensagem
informando se o crédito foi aprovado, recusado ou encaminhado para análise.
Nesse caso, além de cálculos, o processamento envolveria decisões.
Em sistemas administrativos, é muito comum
que a entrada venha de arquivos. Um arquivo pode conter centenas ou milhares de
registros. Cada registro representa uma informação organizada, como um
funcionário, um cliente, uma conta ou uma movimentação. O programa lê esses
registros, processa cada um deles e gera uma saída. Esse tipo de rotina é
bastante associado ao uso tradicional do COBOL.
Por exemplo, uma empresa pode ter um
arquivo com todos os funcionários e seus salários. O programa COBOL pode ler
cada registro, calcular descontos e benefícios, atualizar os valores e gerar um
relatório final. Esse tipo de processamento é conhecido como processamento em
lote, pois trabalha com um conjunto de dados, geralmente em grande quantidade,
de forma organizada.
Mesmo quando o aluno ainda está estudando
exemplos simples, é importante entender que esses exercícios representam
situações maiores. Um cálculo com um funcionário pode se transformar em uma
rotina para milhares de funcionários. Um cadastro de um cliente pode se
transformar em um sistema de cadastro completo. Uma mensagem exibida na tela
pode se transformar em um relatório empresarial. Por isso, os fundamentos
precisam ser bem compreendidos desde o início.
A entrada de dados também exige
responsabilidade. O programa deve estar preparado para receber informações
compatíveis com aquilo que foi definido. Quando um campo espera um valor
numérico, é necessário cuidado para que a informação recebida possa ser usada
em cálculos. Quando um campo recebe texto, é preciso observar o tamanho e a
finalidade desse dado. A qualidade da entrada influencia diretamente a
qualidade da saída.
Existe uma expressão muito conhecida na área de tecnologia que resume essa ideia: se os dados de entrada forem ruins, os resultados também tendem a ser ruins. Um programa bem escrito não consegue produzir um resultado correto se as informações
recebidas estiverem erradas,
incompletas ou mal formatadas. Por isso, a atenção à entrada de dados é parte
fundamental do desenvolvimento.
O processamento também precisa ser
coerente com as regras do negócio. Não basta que o programa execute comandos
corretamente do ponto de vista técnico. Ele precisa representar de forma fiel a
regra que a empresa deseja aplicar. Se a regra determina que o desconto seja
calculado sobre o salário-base, o programa não pode calcular sobre outro valor.
Se a multa deve ser aplicada apenas após o vencimento, o programa precisa
respeitar essa condição.
Essa relação entre programação e regra de
negócio é muito importante no COBOL. Como a linguagem é muito usada em sistemas
corporativos, o programador precisa entender não apenas a linguagem, mas também
o processo que está sendo automatizado. Um erro de interpretação pode gerar
consequências práticas, como cobrança incorreta, pagamento errado ou relatório
inconsistente.
A saída, por sua vez, deve ser pensada de
acordo com quem irá utilizá-la. Um relatório para o setor financeiro pode
precisar de valores detalhados. Uma mensagem para o usuário pode precisar ser
simples e objetiva. Um arquivo enviado para outro sistema pode precisar seguir
um formato específico. Assim, a saída não é apenas o fim do programa; ela é a
forma como o resultado será comunicado.
Ao estudar entrada, processamento e saída,
o aluno também começa a compreender a importância da sequência lógica. Um
programa não pode apresentar um resultado antes de receber os dados
necessários. Também não pode processar informações que não foram definidas. A
ordem das etapas precisa fazer sentido. Primeiro, prepara-se a estrutura dos
dados. Depois, recebem-se as informações. Em seguida, realiza-se o
processamento. Por fim, apresenta-se o resultado.
Essa sequência ajuda a evitar erros comuns
de iniciantes. Um erro frequente é tentar realizar um cálculo usando campos que
ainda não receberam valores. Outro erro é exibir uma saída antes de finalizar o
processamento. Também é comum esquecer de armazenar um resultado intermediário
necessário para a etapa seguinte. Pensar em entrada, processamento e saída
ajuda a organizar melhor cada passo.
Em um programa COBOL, a clareza desse fluxo facilita tanto o desenvolvimento quanto a manutenção. Quando outro profissional precisa entender o programa, ele pode procurar quais dados entram, o que é feito com eles e quais resultados são gerados. Essa análise é muito útil em sistemas legados,
nos quais a documentação pode estar incompleta ou
desatualizada.
Para o iniciante, a melhor forma de
praticar esse conteúdo é observar situações do cotidiano e tentar descrevê-las
nesse formato. Uma compra no supermercado envolve entrada, como produtos e
preços; processamento, como soma e aplicação de descontos; e saída, como o
valor final da compra. Um boletim escolar envolve entrada, como notas e
frequência; processamento, como cálculo de média; e saída, como aprovação ou
reprovação. Uma conta bancária envolve entrada, como depósitos e saques;
processamento, como atualização de saldo; e saída, como extrato ou saldo final.
Esse exercício mostra que a lógica da
programação está presente em muitas atividades comuns. O COBOL apenas
transforma essas etapas em uma linguagem organizada para o computador executar.
Quando o aluno entende a lógica por trás do processo, os comandos passam a
fazer mais sentido.
Nesta aula, o mais importante é
compreender que um programa não deve ser pensado como um conjunto solto de
instruções. Ele deve ser visto como um fluxo. Os dados entram, passam por uma
transformação e geram um resultado. Essa visão simples é a base para conteúdos
mais avançados, como decisões, repetições, leitura de arquivos e geração de
relatórios.
Ao final desta aula, o aluno deve ser
capaz de identificar, em um problema simples, quais são os dados de entrada,
qual processamento precisa ser realizado e qual saída deve ser apresentada.
Essa habilidade será fundamental para avançar nas próximas aulas do módulo,
especialmente no estudo das estruturas de decisão e repetição.
A programação em COBOL, apesar de sua
aparência formal, segue uma lógica muito humana: receber informações,
analisá-las, aplicar regras e comunicar resultados. É exatamente isso que
empresas fazem diariamente em seus processos administrativos. Por isso, aprender
entrada, processamento e saída não é apenas aprender uma teoria de programação.
É aprender a transformar atividades reais em sistemas organizados, confiáveis e
úteis.
Referências bibliográficas
ASCENCIO, Ana Fernanda Gomes; CAMPOS,
Edilene Aparecida Veneruchi de. Fundamentos da programação de computadores. São
Paulo: Pearson.
MANZANO, José Augusto N. G.; OLIVEIRA,
Jayr Figueiredo de. Algoritmos: lógica para desenvolvimento de programação de
computadores. São Paulo: Érica.
SEBESTA, Robert W. Conceitos de linguagens
de programação. Porto Alegre: Bookman.
TANENBAUM, Andrew S. Organização estruturada de computadores. São
Paulo: Pearson.
DATE, C. J. Introdução a sistemas de
bancos de dados. Rio de Janeiro: Elsevier.
WILSON, Leslie B. COBOL estruturado. São
Paulo: McGraw-Hill.
SAMMET, Jean E. Linguagens de programação:
história e fundamentos. São Paulo: McGraw-Hill.
Aula 2 — Estruturas de decisão
Em programação, nem sempre um sistema
segue um único caminho do começo ao fim. Muitas vezes, ele precisa analisar uma
situação antes de escolher o que fazer. É nesse ponto que entram as estruturas
de decisão. Elas permitem que um programa avalie uma condição e execute uma
ação de acordo com o resultado encontrado. Em outras palavras, o programa deixa
de ser apenas uma sequência fixa de instruções e passa a responder de forma
lógica às situações apresentadas pelos dados.
No COBOL, as estruturas de decisão são
especialmente importantes porque a linguagem é muito utilizada em sistemas
administrativos, financeiros, bancários e empresariais. Esses sistemas
trabalham com regras o tempo todo. Um cliente pode ter crédito aprovado ou
negado. Uma conta pode estar ativa ou bloqueada. Um funcionário pode ter
direito ou não a determinado benefício. Uma parcela pode estar em dia ou em
atraso. Um produto pode estar disponível ou sem estoque. Todas essas situações
exigem decisões.
Para compreender esse conceito, basta
observar atividades comuns do cotidiano. Quando uma pessoa vai fazer uma compra
e verifica se tem saldo suficiente, ela está tomando uma decisão. Se o saldo
for suficiente, a compra pode ser realizada. Se não for, ela precisa escolher
outra forma de pagamento ou desistir da compra. Um sistema computacional
trabalha de modo semelhante, mas precisa que essa lógica esteja escrita de
maneira clara e precisa.
A estrutura de decisão parte sempre de uma
condição. Uma condição é uma pergunta que pode ser respondida como verdadeira
ou falsa. Por exemplo: o salário é maior que determinado valor? A idade do
cliente é igual ou superior a 18 anos? O saldo da conta é suficiente para o
saque? A parcela está vencida? O produto está disponível em estoque? O programa
avalia essa condição e, conforme o resultado, executa uma ação.
Essa ideia é simples, mas muito poderosa. Ela permite transformar regras de negócio em instruções computacionais. Quando uma empresa diz “se o pagamento estiver atrasado, aplicar multa”, essa frase precisa ser convertida em lógica de programação. O programa deve comparar a data de vencimento com a data de pagamento e, a partir dessa comparação, decidir se a
multa”, essa frase
precisa ser convertida em lógica de programação. O programa deve comparar a
data de vencimento com a data de pagamento e, a partir dessa comparação,
decidir se a multa será aplicada ou não.
No COBOL, as decisões geralmente aparecem
na Procedure Division, pois é nessa parte do programa que ficam as instruções
executáveis. A Data Division prepara os campos necessários, como valores,
datas, códigos e indicadores. Depois, a Procedure Division utiliza esses campos
para comparar informações, aplicar regras e produzir resultados. Assim, os
dados declarados anteriormente ganham movimento dentro da lógica do programa.
Uma estrutura de decisão simples acontece
quando existe apenas uma condição principal e uma ação correspondente. Por
exemplo, se o saldo do cliente for menor que o valor do saque, o sistema deve
informar que a operação não pode ser realizada. Nesse caso, a decisão é direta:
o programa verifica uma condição e executa uma ação se ela for verdadeira.
Já uma decisão composta ocorre quando há
mais de um caminho possível. Em vez de apenas fazer algo quando a condição é
verdadeira, o programa também precisa fazer outra coisa quando ela é falsa. Por
exemplo, se o aluno atingiu a média mínima, será considerado aprovado; caso
contrário, será considerado reprovado. Nesse tipo de situação, o sistema
precisa tratar os dois resultados possíveis.
As decisões compostas são muito comuns em
sistemas administrativos. Em uma rotina de concessão de desconto, por exemplo,
o programa pode verificar se o cliente tem direito ao benefício. Se tiver,
aplica o desconto. Se não tiver, mantém o valor original. Em uma rotina de
estoque, pode verificar se a quantidade disponível atende à venda solicitada.
Se atender, libera a venda. Se não atender, informa a falta do produto.
Também existem decisões com várias
possibilidades. Em alguns casos, o programa precisa avaliar mais de uma
condição antes de chegar ao resultado. Imagine um sistema de classificação de
clientes. Um cliente pode ser classificado como comum, preferencial ou
especial, dependendo do histórico de compras, do tempo de relacionamento e do
valor médio movimentado. Nessa situação, o programa precisa analisar diferentes
critérios para definir a categoria correta.
Esse tipo de decisão exige muito cuidado. Quanto maior o número de condições, maior a possibilidade de erro na lógica. O programador precisa pensar com calma sobre a ordem das verificações, os critérios usados e os possíveis resultados.
Uma condição mal colocada pode
fazer com que o programa escolha um caminho errado, mesmo que os dados estejam
corretos.
Um erro comum entre iniciantes é escrever
condições confusas ou incompletas. Às vezes, o programador pensa apenas no caso
mais evidente e se esquece das exceções. Por exemplo, ao criar uma regra para
aprovar um saque, ele pode verificar apenas se o saldo é maior que o valor
solicitado, mas esquecer de considerar se a conta está bloqueada. Nesse caso, o
sistema poderia permitir uma operação que deveria ser impedida.
Outro erro frequente é não definir
claramente o que deve acontecer quando a condição não é atendida. Um programa
precisa tratar tanto o caminho positivo quanto o caminho negativo de uma
decisão. Se uma pessoa não tem direito a determinado benefício, o que o sistema
deve fazer? Apenas ignorar? Informar uma mensagem? Registrar o motivo? Manter o
valor original? Essas respostas precisam estar claras na lógica.
Em sistemas empresariais, uma decisão mal
formulada pode causar consequências sérias. Um desconto aplicado indevidamente
pode gerar prejuízo. Uma cobrança feita de forma errada pode causar
reclamações. Uma aprovação indevida de crédito pode criar risco financeiro. Um
bloqueio incorreto de cadastro pode prejudicar o atendimento ao cliente. Por
isso, estruturas de decisão não devem ser tratadas como detalhes técnicos, mas
como partes essenciais da regra de negócio.
O programador precisa lembrar que toda
decisão no sistema representa uma escolha feita pela organização. Quando o
programa decide aplicar uma multa, conceder um desconto, aprovar um cadastro ou
negar uma operação, ele está executando uma regra definida por alguém. Assim,
antes de programar, é necessário entender bem a regra. Uma lógica correta
depende de uma interpretação correta do processo.
Por exemplo, imagine uma empresa que
oferece desconto para pagamentos antecipados. A regra pode parecer simples: se
o cliente pagar antes do vencimento, recebe desconto. Mas algumas perguntas
precisam ser respondidas. Quantos dias antes do vencimento? O desconto vale
para qualquer cliente? Existe valor mínimo de compra? O desconto é percentual
ou fixo? Pode ser acumulado com outras promoções? Sem essas respostas, a
decisão no programa pode ficar incompleta.
Esse cuidado mostra que a programação não depende apenas de conhecer comandos. O profissional precisa saber conversar com as regras do negócio, interpretar situações e transformar informações em lógica. No COBOL, isso
é muito evidente porque muitos sistemas lidam com
rotinas financeiras, fiscais, cadastrais e administrativas, áreas em que
pequenas diferenças nas regras podem alterar bastante o resultado.
As comparações são fundamentais dentro das
decisões. O programa pode comparar valores numéricos, textos, códigos, datas ou
indicadores. Pode verificar se um valor é maior, menor, igual ou diferente de
outro. Pode também combinar condições, como exigir que duas situações sejam
verdadeiras ao mesmo tempo. Por exemplo, um benefício pode ser concedido apenas
se o funcionário tiver mais de um ano de empresa e estiver com cadastro ativo.
Quando várias condições são combinadas, o
programador deve ter ainda mais atenção. A diferença entre “e” e “ou” pode
mudar completamente o resultado. Se a regra diz que o cliente precisa ter renda
suficiente e cadastro aprovado, as duas condições devem ser atendidas. Mas se a
regra diz que o cliente pode apresentar comprovante de renda ou declaração
alternativa, basta uma das condições ser atendida. Confundir essas relações
pode gerar decisões incorretas.
Outro ponto importante é a clareza dos
dados usados na decisão. Uma condição só será confiável se os campos envolvidos
estiverem bem definidos. Se o campo que guarda o status de um cadastro aceita
valores mal padronizados, a decisão pode falhar. Por exemplo, se um cadastro
ativo aparece como “A”, “ATIVO”, “Ativo” ou “1” em diferentes situações, o
programa pode ter dificuldade para interpretar corretamente. Por isso, decisões
dependem também de dados organizados.
A padronização ajuda muito. Quando uma
empresa define que determinado campo usará sempre os mesmos códigos ou valores,
o programa consegue tomar decisões com mais segurança. Um campo de situação do
cliente, por exemplo, pode utilizar códigos fixos para ativo, bloqueado,
cancelado ou em análise. Dessa forma, a lógica se torna mais previsível e menos
sujeita a interpretações ambíguas.
As estruturas de decisão também são
importantes para evitar erros de processamento. Um programa pode verificar se
um valor é válido antes de fazer um cálculo, se um campo está preenchido antes
de gerar um relatório ou se uma quantidade é suficiente antes de atualizar o
estoque. Essas verificações funcionam como pontos de controle dentro do
sistema.
Imagine um programa que calcula comissão de vendas. Antes de calcular a comissão, ele pode verificar se o valor da venda é maior que zero. Se o valor estiver zerado ou negativo, o sistema pode impedir o
cálculo e sinalizar que há um problema nos dados. Essa decisão evita que o
programa produza um resultado sem sentido. Assim, as estruturas de decisão
também contribuem para a segurança e a qualidade do processamento.
No aprendizado do COBOL, é útil pensar nas
decisões como perguntas feitas pelo programa durante a execução. O programa
pergunta: esta condição foi atendida? Este valor está dentro do limite? Este
cadastro está ativo? Este pagamento está atrasado? Conforme a resposta, ele
escolhe o próximo passo. Essa forma de pensar ajuda o aluno a construir a
lógica de maneira mais natural.
Uma boa prática é escrever a regra em
linguagem comum antes de transformá-la em programação. Por exemplo: “Se o
salário-base for maior que determinado limite, calcular desconto; caso
contrário, não aplicar desconto.” Depois disso, o aluno pode identificar quais
campos serão usados, qual comparação será feita e qual resultado deverá ser
produzido. Esse processo reduz a chance de erro porque organiza o raciocínio
antes da escrita técnica.
As decisões também devem ser testadas. Não
basta verificar apenas o caso em que tudo dá certo. É preciso testar diferentes
possibilidades. Se uma regra envolve idade mínima de 18 anos, por exemplo, é
importante testar uma idade menor que 18, exatamente 18 e maior que 18. Esses
testes ajudam a verificar se a condição foi construída corretamente,
especialmente nos limites da regra.
Os chamados casos de limite merecem
atenção especial. Muitas falhas acontecem quando a condição está quase no ponto
de mudança. Se um desconto vale para compras acima de R$ 500,00, o que acontece
com uma compra exatamente de R$ 500,00? Ela recebe desconto ou não? A regra
precisa deixar isso claro, e o programa precisa representar essa decisão
corretamente. Pequenas diferenças entre “maior que” e “maior ou igual a” podem
mudar o resultado.
Em sistemas financeiros, esse cuidado é
ainda mais importante. Um cálculo de juros, uma cobrança de multa ou a
liberação de crédito pode depender de comparações precisas. Se o programa
considerar uma condição de forma errada, pode gerar valores incorretos para
muitos clientes ao mesmo tempo. Por isso, decisões devem ser escritas,
revisadas e testadas com responsabilidade.
Outro aspecto relevante é a legibilidade. Uma decisão pode até funcionar, mas se estiver escrita de maneira confusa, dificultará a manutenção. Em sistemas COBOL, que muitas vezes permanecem em uso por muitos anos, a clareza é essencial. Um profissional que
precisar revisar o
programa no futuro deve conseguir entender por que determinada decisão foi
tomada e qual regra ela representa.
Nomes claros para campos ajudam muito
nesse processo. Uma condição envolvendo campos como SALARIO-BASE,
VALOR-DESCONTO e SITUACAO-FUNCIONARIO é mais compreensível do que uma condição
com nomes abreviados e pouco informativos. A escolha de bons nomes não é apenas
uma questão estética; ela facilita a leitura, a revisão e a manutenção do
sistema.
Também é importante evitar decisões
desnecessariamente complexas. Quando uma regra é muito grande, pode ser melhor
dividi-la em partes menores, organizando o raciocínio passo a passo. Essa
prática facilita a identificação de erros e torna o programa mais didático. Em
programação, clareza quase sempre é melhor do que excesso de compactação.
Ao estudar estruturas de decisão, o aluno
deve perceber que elas estão presentes em praticamente todos os sistemas. Sem
decisões, um programa apenas executaria sempre as mesmas ações,
independentemente dos dados recebidos. Com decisões, ele passa a responder às
diferentes situações que aparecem na prática. Isso torna o sistema mais útil,
mais inteligente e mais próximo das necessidades reais da organização.
No contexto do COBOL, as decisões ajudam a
transformar rotinas administrativas em programas confiáveis. Uma regra de
aprovação, uma verificação de saldo, uma análise de atraso ou uma classificação
de cadastro são exemplos de situações comuns que dependem desse recurso. Por
isso, dominar as estruturas de decisão é um passo fundamental para avançar no
estudo da linguagem.
Ao final desta aula, o aluno deve ser
capaz de compreender o que é uma condição, reconhecer decisões simples e
compostas, identificar comparações entre valores e perceber a relação entre
decisões e regras de negócio. Também deve compreender que uma boa decisão
depende de dados bem definidos, critérios claros e testes cuidadosos.
Mais do que aprender um recurso técnico,
estudar estruturas de decisão é aprender a pensar como um sistema precisa
pensar. O programa analisa informações, compara dados, verifica regras e
escolhe caminhos. Quando essa lógica é bem construída, o resultado é um sistema
mais seguro, mais coerente e mais alinhado às necessidades da empresa.
Portanto, as estruturas de decisão representam um dos pontos centrais da programação em COBOL. Elas permitem que o programa deixe de ser uma sequência rígida de comandos e passe a agir conforme as condições encontradas.
Para o iniciante, compreender esse funcionamento é
essencial, pois praticamente toda aplicação real envolve escolhas. E programar
bem essas escolhas é uma das habilidades mais importantes para criar sistemas
confiáveis.
Referências bibliográficas
ASCENCIO, Ana Fernanda Gomes; CAMPOS,
Edilene Aparecida Veneruchi de. Fundamentos da programação de computadores. São
Paulo: Pearson.
MANZANO, José Augusto N. G.; OLIVEIRA,
Jayr Figueiredo de. Algoritmos: lógica para desenvolvimento de programação de
computadores. São Paulo: Érica.
SEBESTA, Robert W. Conceitos de linguagens
de programação. Porto Alegre: Bookman.
TANENBAUM, Andrew S. Organização
estruturada de computadores. São Paulo: Pearson.
DATE, C. J. Introdução a sistemas de
bancos de dados. Rio de Janeiro: Elsevier.
WILSON, Leslie B. COBOL estruturado. São
Paulo: McGraw-Hill.
SAMMET, Jean E. Linguagens de programação:
história e fundamentos. São Paulo: McGraw-Hill.
Aula 3 — Estruturas de repetição e rotinas
de cálculo
Em programação, existem situações em que
uma ação precisa ser executada apenas uma vez. Por exemplo, exibir uma
mensagem, calcular o valor final de uma compra ou verificar se um cliente
possui saldo suficiente. No entanto, em muitos sistemas reais, especialmente
nos sistemas administrativos, financeiros e empresariais, as tarefas precisam
ser repetidas várias vezes. É nesse contexto que entram as estruturas de
repetição.
As estruturas de repetição permitem que um
programa execute o mesmo conjunto de instruções enquanto determinada condição
for atendida ou até que uma situação específica aconteça. Elas são fundamentais
porque os sistemas raramente trabalham com apenas um dado isolado. Uma empresa
não calcula o salário de apenas um funcionário. Um banco não processa apenas
uma conta. Um sistema de cobrança não verifica apenas uma parcela. Na prática,
os programas precisam lidar com listas, registros, arquivos e grandes volumes
de informações.
No COBOL, essa ideia é muito importante
porque a linguagem foi amplamente utilizada em sistemas que processam dados em
grande escala. Muitas rotinas feitas em COBOL envolvem leitura de arquivos,
processamento de registros e geração de relatórios. Isso significa que o
programa pode executar a mesma lógica para cada registro encontrado, repetindo
cálculos, verificações e atualizações até que todos os dados tenham sido
tratados.
Para compreender melhor, imagine uma empresa que possui mil funcionários e precisa calcular a folha de pagamento do
mês. Seria inviável escrever uma instrução separada para cada funcionário. O
correto é criar uma lógica que leia os dados de um funcionário, calcule seus
vencimentos e descontos, registre o resultado e depois repita o mesmo processo
para o próximo funcionário. Essa repetição continua até que todos os registros
tenham sido processados.
Essa lógica é simples de entender quando
pensamos em tarefas do cotidiano. Uma pessoa que confere uma pilha de
documentos faz algo parecido: pega o primeiro documento, verifica as
informações, faz uma anotação, separa o documento e passa para o próximo. Ela
repete a mesma sequência até terminar a pilha. O programa faz o mesmo, mas com
dados organizados em campos, registros e arquivos.
As estruturas de repetição são muito úteis
porque reduzem a repetição manual de comandos no código. Em vez de escrever
várias vezes a mesma lógica, o programador escreve uma estrutura capaz de
repetir as instruções de forma controlada. Isso torna o programa mais
organizado, mais curto, mais fácil de entender e menos sujeito a erros.
No COBOL, uma das ideias mais associadas à
repetição é o processamento de registros. Um registro pode representar um
cliente, um funcionário, uma conta, uma parcela, um produto ou qualquer
conjunto de informações relacionadas. O programa lê um registro, processa suas
informações e depois passa para o próximo. Esse ciclo se repete até que não
existam mais registros a serem tratados.
Esse tipo de processamento é bastante
comum em rotinas chamadas de processamento em lote. No processamento em lote,
um conjunto de dados é tratado de uma vez, geralmente sem a necessidade de
interação constante do usuário. Um exemplo é o fechamento mensal de uma folha
de pagamento. O sistema recebe os dados dos funcionários, processa todos eles e
gera arquivos ou relatórios finais. Outro exemplo é a atualização de saldos
bancários após um conjunto de movimentações.
Para que uma repetição funcione
corretamente, é necessário definir com clareza quando ela começa, o que será
repetido e quando deve terminar. Um dos erros mais comuns de iniciantes é criar
uma repetição sem uma condição adequada de parada. Quando isso acontece, o
programa pode continuar executando indefinidamente, gerando o chamado laço
infinito. Em sistemas reais, esse tipo de erro pode travar uma rotina, atrasar
processamentos e causar problemas operacionais.
Por isso, toda estrutura de repetição precisa ter controle. O programa deve saber exatamente qual condição
permite a
continuidade e qual condição encerra o processo. Em uma rotina de leitura de
arquivo, por exemplo, a repetição pode continuar enquanto houver registros
disponíveis. Quando o fim do arquivo for encontrado, o programa deve parar a
leitura e seguir para a próxima etapa, como emitir um relatório final ou
apresentar totais acumulados.
Além da condição de parada, outro elemento
muito usado em repetições é o contador. Um contador é um campo numérico usado
para contar quantas vezes determinada ação aconteceu. Em uma rotina de
cadastro, ele pode contar quantos clientes foram processados. Em uma folha de
pagamento, pode contar quantos funcionários tiveram salário calculado. Em um
relatório de estoque, pode contar quantos produtos foram analisados.
O contador geralmente começa com valor
zero e aumenta a cada repetição. Essa prática ajuda o sistema a acompanhar o
andamento do processamento. Ao final, o programa pode informar, por exemplo,
que foram processados 500 registros, 40 clientes estavam inadimplentes ou 25
produtos estavam abaixo do estoque mínimo. Essas informações são úteis para
conferência e controle.
Outro conceito importante é o acumulador.
Enquanto o contador registra quantidades, o acumulador soma valores. Em um
sistema de vendas, o acumulador pode guardar o total vendido no dia. Em uma
folha de pagamento, pode somar o total bruto, o total de descontos e o total
líquido. Em uma rotina de cobrança, pode acumular o valor total das parcelas em
atraso.
A diferença entre contador e acumulador é
simples, mas essencial. O contador normalmente aumenta de um em um, registrando
ocorrências. O acumulador soma valores que podem variar. Se um programa
processa várias vendas, o contador pode indicar quantas vendas foram
realizadas, enquanto o acumulador indica o valor total dessas vendas. Os dois
recursos costumam trabalhar juntos em relatórios e fechamentos.
As rotinas de cálculo, por sua vez, são
trechos do programa responsáveis por realizar operações matemáticas ou
financeiras. Elas podem calcular descontos, impostos, juros, totais, médias,
saldos, comissões, multas ou qualquer outro valor necessário ao sistema. Em
COBOL, essas rotinas são muito presentes porque a linguagem foi criada para
resolver problemas de negócios, nos quais os cálculos administrativos são
constantes.
Um exemplo simples é o cálculo de salário líquido. O programa pode receber o salário-base, somar adicionais, subtrair descontos e chegar ao valor final. Se essa lógica for
aplicada a vários
funcionários, ela será executada repetidamente. Assim, as estruturas de
repetição e as rotinas de cálculo se complementam: a repetição percorre os
registros, e a rotina de cálculo transforma os dados de cada registro em
resultado.
Outro exemplo é o cálculo de estoque. Para
cada produto, o programa pode verificar a quantidade atual, subtrair as vendas
realizadas, somar entradas de mercadoria e calcular a nova quantidade
disponível. Se a quantidade final ficar abaixo de um limite mínimo, o sistema
pode sinalizar a necessidade de reposição. Nesse caso, a rotina envolve
repetição, cálculo e decisão.
É importante notar que uma rotina de
cálculo deve ser clara e bem-organizada. Em sistemas empresariais, muitos
cálculos representam regras importantes. Um desconto aplicado incorretamente,
uma comissão calculada de forma errada ou um saldo atualizado sem precisão pode
causar prejuízos e retrabalho. Por isso, o programador precisa compreender a
regra antes de transformá-la em instrução.
Antes de criar uma rotina de cálculo, é
recomendável escrever a regra em linguagem comum. Por exemplo: “calcular o
desconto multiplicando o salário-base pelo percentual definido”. Depois disso,
o programador identifica quais campos serão usados, onde o resultado será
armazenado e em que momento o cálculo será executado. Essa preparação reduz
erros e torna a lógica mais compreensível.
Em COBOL, os campos numéricos precisam ser
definidos corretamente para que os cálculos funcionem de maneira adequada.
Valores financeiros, por exemplo, exigem atenção às casas decimais. Uma rotina
de cálculo que trabalha com salários, juros ou parcelas não pode ignorar
centavos. Pequenas falhas na definição dos campos podem gerar resultados
incorretos, principalmente quando o processamento envolve muitos registros.
Imagine uma empresa que calcula o desconto
de R$ 0,10 a menos para cada funcionário por erro de arredondamento. Em um
único caso, o valor pode parecer pequeno. Mas, se a empresa tiver milhares de
funcionários e o erro se repetir todos os meses, o problema se torna
significativo. Esse exemplo mostra por que cálculos em sistemas corporativos
exigem precisão e cuidado.
Outro erro comum em rotinas de cálculo é não inicializar corretamente os campos usados como contadores e acumuladores. Inicializar significa definir um valor inicial antes do processamento. Se um acumulador começa com um valor antigo ou indefinido, o total final pode sair errado. Por isso, antes de iniciar
uma repetição, o programa deve preparar os
campos que serão usados ao longo do processo.
Por exemplo, se um programa vai somar o
valor total de vendas do dia, o campo de total deve começar em zero. A cada
venda processada, o valor da venda é somado ao acumulador. Ao final, o
acumulador conterá o total correto. Se ele não for zerado no início, poderá
trazer lixo de memória, valor anterior ou resultado indevido, comprometendo
toda a saída do programa.
As estruturas de repetição também exigem
atenção à ordem das instruções. Em uma rotina que lê registros, processa dados
e depois lê o próximo registro, a sequência precisa estar bem-organizada. Se o
programa esquecer de avançar para o próximo registro, poderá processar sempre a
mesma informação. Se avançar antes de processar, poderá pular dados. Se
encerrar a repetição cedo demais, deixará registros sem tratamento.
Essa organização mostra que repetir não
significa simplesmente fazer a mesma coisa várias vezes. Significa controlar
cuidadosamente o fluxo do programa. O programador precisa saber onde a
repetição começa, quais ações pertencem ao ciclo, quais campos são alterados a
cada passagem e qual condição determina o fim do processo.
Em sistemas COBOL, a repetição costuma
estar relacionada à geração de relatórios. Um relatório pode listar todos os
funcionários de uma empresa, todos os clientes inadimplentes, todos os produtos
em estoque ou todas as movimentações de um período. Para gerar esse tipo de
saída, o programa precisa percorrer os registros, selecionar as informações
relevantes, calcular totais e organizar a apresentação.
Um relatório bem construído depende de
dados corretos e de processamento adequado. Se a repetição não percorrer todos
os registros, o relatório ficará incompleto. Se o acumulador não somar
corretamente, o total ficará errado. Se uma condição for mal aplicada,
registros indevidos poderão aparecer ou registros importantes poderão ser
omitidos. Por isso, repetição, cálculo e decisão trabalham juntos em muitas
rotinas.
Outro ponto importante é evitar duplicação
desnecessária de lógica. Quando uma mesma operação precisa ser realizada várias
vezes, é melhor organizá-la de forma reutilizável dentro do programa. Isso
facilita a manutenção. Se uma regra de cálculo mudar, o programador poderá
ajustar a lógica em um ponto mais claro, em vez de procurar várias cópias
espalhadas pelo código.
A manutenção é uma preocupação constante em sistemas COBOL. Muitos programas permanecem em uso por
anos e são alterados
por diferentes profissionais. Se uma rotina de repetição ou cálculo estiver
confusa, a chance de erro em futuras mudanças aumenta. Por isso, escrever de
forma clara é uma atitude de responsabilidade profissional.
Nomes bem escolhidos ajudam muito nesse
processo. Campos como TOTAL-VENDAS, QUANTIDADE-REGISTROS, VALOR-DESCONTO e
SALARIO-LIQUIDO tornam a lógica mais compreensível. Quando o nome do campo
indica sua finalidade, o programa se torna mais fácil de ler. Isso é
especialmente importante em repetições, nas quais vários campos podem ser
atualizados a cada ciclo.
Também é importante testar as repetições
com diferentes quantidades de dados. Um programa deve funcionar corretamente
quando houver muitos registros, poucos registros ou até nenhum registro a
processar. Esse último caso é frequentemente esquecido. Se um arquivo estiver
vazio, o programa deve saber lidar com a situação sem gerar erro, total
incorreto ou mensagem confusa.
Os testes ajudam a verificar se a
repetição inicia corretamente, se processa todos os dados esperados e se
encerra no momento certo. Também permitem conferir se contadores e acumuladores
estão apresentando valores coerentes. Em sistemas administrativos, essa
conferência é indispensável, pois relatórios e cálculos podem influenciar
decisões gerenciais e financeiras.
Para o aluno iniciante, uma boa forma de
praticar é criar pequenos exemplos. Um exercício pode pedir o cálculo da média
de notas de vários alunos. Outro pode simular a soma de vendas de uma loja.
Outro pode processar uma lista de produtos e identificar quais estão abaixo do
estoque mínimo. Esses exemplos ajudam a desenvolver o raciocínio sem exigir,
inicialmente, sistemas complexos.
Com o tempo, o estudante percebe que a
repetição é uma das ferramentas mais importantes da programação. Ela permite
que o computador faça justamente aquilo em que ele é muito eficiente: executar
tarefas repetitivas com velocidade e precisão. Porém, essa eficiência depende
de uma lógica bem construída. Um erro repetido muitas vezes pode causar um
grande problema. Por isso, o controle da repetição é tão importante quanto a
repetição em si.
No contexto do COBOL, esse aprendizado tem ainda mais valor porque muitos sistemas escritos nessa linguagem trabalham com grandes massas de dados. Folhas de pagamento, arquivos bancários, relatórios de clientes, controle de parcelas, fechamento de estoque e movimentações financeiras são exemplos de rotinas em que a repetição
aparece de forma
natural.
Ao final desta aula, o aluno deve
compreender que estruturas de repetição permitem processar vários dados de
forma organizada. Deve também reconhecer a função de contadores, acumuladores e
rotinas de cálculo. Além disso, precisa perceber que uma repetição segura
depende de inicialização correta, condição de parada bem definida, sequência
lógica adequada e testes cuidadosos.
Mais do que aprender uma técnica, estudar
repetição é aprender a pensar em escala. Um programa não deve funcionar apenas
para um caso isolado. Ele deve ser capaz de lidar com conjuntos de dados e
aplicar a mesma regra de forma consistente. Essa capacidade é essencial em
sistemas empresariais, nos quais o volume de informações costuma ser grande e a
precisão dos resultados é indispensável.
Portanto, as estruturas de repetição e as rotinas de cálculo formam uma base essencial para o desenvolvimento em COBOL. Elas permitem transformar dados repetidos em resultados organizados, cálculos confiáveis e relatórios úteis. Para o iniciante, dominar esses conceitos é um passo importante para compreender como sistemas reais processam informações de maneira contínua, segura e eficiente.
Referências bibliográficas
ASCENCIO, Ana Fernanda Gomes; CAMPOS,
Edilene Aparecida Veneruchi de. Fundamentos da programação de computadores. São
Paulo: Pearson.
MANZANO, José Augusto N. G.; OLIVEIRA,
Jayr Figueiredo de. Algoritmos: lógica para desenvolvimento de programação de
computadores. São Paulo: Érica.
SEBESTA, Robert W. Conceitos de linguagens
de programação. Porto Alegre: Bookman.
TANENBAUM, Andrew S. Organização
estruturada de computadores. São Paulo: Pearson.
DATE, C. J. Introdução a sistemas de
bancos de dados. Rio de Janeiro: Elsevier.
WILSON, Leslie B. COBOL estruturado. São
Paulo: McGraw-Hill.
SAMMET, Jean E. Linguagens de programação:
história e fundamentos. São Paulo: McGraw-Hill.
Estudo de caso — A folha de pagamento que
quase fechou com erros
Na empresa fictícia Aliança Serviços
Administrativos, o setor de tecnologia recebeu uma demanda urgente: criar
uma rotina simples em COBOL para calcular alguns descontos da folha de
pagamento. A regra parecia tranquila. O programa deveria ler os dados dos
funcionários, verificar se cada um utilizava vale-transporte, calcular o
desconto quando necessário e, ao final, apresentar um resumo com a quantidade
de funcionários processados e o total de descontos aplicados.
A tarefa parecia pequena, mas envolvia três pontos
fundamentais estudados no módulo 2: entrada, processamento e
saída de dados, estruturas de decisão e estruturas de repetição
com rotinas de cálculo. Como acontece em muitos sistemas administrativos,
um erro aparentemente simples poderia afetar vários registros de uma só vez.
A equipe iniciou o trabalho com os
seguintes dados para cada funcionário: nome, salário-base e indicação de uso do
vale-transporte. A regra era: se o funcionário utiliza vale-transporte, o
sistema deve calcular um desconto de 6% sobre o salário-base; caso contrário, o
desconto deve ser zero. Depois de processar todos os funcionários, o programa
deveria mostrar quantos registros foram analisados e qual foi o valor total dos
descontos.
O primeiro erro apareceu ainda na etapa de
entrada de dados. O programador iniciante criou os campos necessários, mas não
conferiu se todas as informações recebidas estavam completas. Em alguns
registros, a indicação de uso do vale-transporte estava vazia. Em outros,
aparecia escrita de formas diferentes, como “S”, “SIM”, “Sim” ou “sim”. O
programa esperava apenas uma forma específica e, por isso, alguns funcionários
foram tratados como se não utilizassem o benefício.
Esse erro mostra que a entrada de dados
precisa ser pensada com cuidado. Não basta receber informações; é necessário
garantir que elas estejam organizadas, padronizadas e compatíveis com o que o
programa espera. Quando um campo aceita valores variados sem controle, a
decisão pode falhar. Para evitar esse problema, a equipe definiu um padrão
único: o campo de vale-transporte deveria aceitar apenas “S” para sim e “N”
para não. Além disso, os registros incompletos passaram a ser sinalizados para
conferência antes do cálculo.
O segundo erro ocorreu no processamento. O
programa calculava corretamente o desconto de 6%, mas fazia isso para todos os
funcionários, mesmo para aqueles que não utilizavam vale-transporte. O
programador havia criado a fórmula do cálculo, mas esqueceu de aplicar a
condição antes dela. Assim, a rotina tratava todos os registros da mesma forma,
sem respeitar a regra de negócio.
Esse é um erro comum em programação: calcular antes de decidir. Em sistemas administrativos, nem toda regra deve ser aplicada a todos os casos. O programa precisa primeiro verificar a condição e só depois executar a ação adequada. Para corrigir a falha, a equipe reorganizou a lógica: primeiro o sistema analisaria se o funcionário utilizava vale-transporte; somente se a resposta fosse positiva o
desconto seria
calculado. Caso contrário, o desconto receberia valor zero.
O terceiro erro surgiu na estrutura de
decisão. A regra dizia que o desconto deveria ser de 6% sobre o salário-base,
mas alguns membros da equipe levantaram uma dúvida: e se o salário-base
estivesse zerado ou negativo por erro no cadastro? O programa não fazia nenhuma
verificação e poderia gerar um resultado sem sentido. Embora esse caso não
fosse esperado em uma folha correta, ele poderia acontecer por falha de
digitação, importação incorreta de arquivo ou cadastro incompleto.
A equipe percebeu, então, que uma boa
decisão não serve apenas para aplicar regras principais, mas também para evitar
processamentos inválidos. Foi acrescentada uma verificação antes do cálculo: se
o salário-base fosse menor ou igual a zero, o registro deveria ser marcado para
revisão e não deveria entrar no total final. Essa mudança tornou a rotina mais
segura e evitou que dados incorretos contaminassem o resultado.
O quarto erro apareceu na repetição. O
programa deveria processar vários funcionários, um por vez, até terminar a
lista. Porém, durante os testes, percebeu-se que o mesmo funcionário era
processado repetidamente. O problema estava no controle da leitura dos
registros: o sistema não avançava corretamente para o próximo funcionário. Com
isso, a repetição poderia se tornar infinita ou gerar totais duplicados.
Esse erro mostra a importância de
controlar bem o ciclo de repetição. Toda repetição precisa ter início,
sequência e fim. O programa deve saber quando ler o primeiro registro, quando
passar para o próximo e quando parar. Para evitar esse tipo de falha, a equipe
revisou o fluxo: ler registro, verificar dados, aplicar decisão, calcular se
necessário, acumular resultado e somente então avançar para o próximo registro.
O quinto erro envolveu o contador de
funcionários processados. O programa contava todos os registros lidos,
inclusive aqueles com erro de cadastro. No relatório final, aparecia a
quantidade total de registros, mas não ficava claro quantos haviam sido calculados
corretamente e quantos precisavam de revisão. O setor de Recursos Humanos, ao
receber o relatório, ficou confuso, pois não sabia se todos os funcionários
estavam realmente prontos para pagamento.
Para corrigir isso, a equipe criou dois controles separados: um contador para funcionários lidos e outro para funcionários processados com sucesso. Também foi criado um contador para registros com erro. Assim, a saída ficou mais
corrigir isso, a equipe criou dois
controles separados: um contador para funcionários lidos e outro para
funcionários processados com sucesso. Também foi criado um contador para
registros com erro. Assim, a saída ficou mais transparente. O relatório passou
a informar quantos registros foram encontrados, quantos foram calculados e
quantos precisavam de conferência.
O sexto erro apareceu no acumulador. O
campo responsável por guardar o total de descontos não foi inicializado
corretamente. Em alguns testes, o total final aparecia maior do que deveria,
porque o acumulador parecia carregar um valor anterior. Esse é um erro clássico
em rotinas de cálculo: usar um campo de soma sem garantir que ele comece em
zero.
Para evitar esse problema, a equipe
definiu que todos os contadores e acumuladores deveriam ser inicializados antes
do início da repetição. O total de descontos começaria em zero. A quantidade de
funcionários processados começaria em zero. A quantidade de registros com erro
também começaria em zero. Somente depois dessa preparação o programa iniciaria
a leitura dos dados.
Outro problema importante surgiu na saída
de dados. O sistema calculava as informações, mas apresentava apenas o valor
total dos descontos. Não informava quantos funcionários haviam utilizado
vale-transporte, quantos não utilizaram e quantos registros tinham
inconsistência. O relatório era tecnicamente correto em parte, mas pouco útil
para a equipe administrativa.
Esse erro mostra que a saída precisa ser
pensada conforme a necessidade de quem usará a informação. Um programa não deve
apenas produzir resultados; ele deve comunicar esses resultados de forma clara.
Depois da revisão, o relatório passou a apresentar o total de funcionários
lidos, o total de funcionários com desconto, o total de funcionários sem
desconto, o total de registros com erro e o valor total dos descontos
aplicados.
Durante a revisão, a equipe também
percebeu um risco relacionado às casas decimais. Como o desconto era calculado
sobre salário, era necessário tratar valores monetários com cuidado. Um campo
mal definido poderia cortar centavos, arredondar indevidamente ou apresentar
valores incorretos. Em uma única folha, o erro poderia parecer pequeno, mas,
repetido em muitos funcionários, causaria diferença no fechamento.
Para evitar esse problema, os campos financeiros foram revisados. O salário-base, o valor do desconto e o total acumulado passaram a ser tratados como valores numéricos adequados para
cálculos monetários. A equipe também incluiu testes com salários de diferentes
valores, inclusive com centavos, para conferir se o resultado permanecia
correto.
Ao final do processo, a rotina ficou muito
mais segura. O programa passou a seguir uma sequência lógica: receber os dados
do funcionário, verificar se as informações estavam válidas, decidir se o
desconto deveria ser aplicado, calcular o valor quando necessário, atualizar
contadores e acumuladores, repetir o processo para o próximo registro e
apresentar um relatório final claro.
O estudo de caso da Aliança Serviços
Administrativos mostra que os erros mais comuns do módulo 2 não estão apenas na
escrita dos comandos. Eles aparecem principalmente na falta de planejamento do
fluxo. Receber dados sem padronização, aplicar cálculo sem decisão, repetir sem
controle, acumular sem inicializar e apresentar saída incompleta são falhas que
podem comprometer o funcionamento de uma rotina simples.
Para evitar esses erros, o programador
iniciante deve pensar sempre em três perguntas: quais dados entram no sistema?
O que deve ser feito com eles? Que resultado precisa ser apresentado? Depois,
deve verificar quais decisões são necessárias, quais cálculos serão realizados
e como a repetição será controlada.
Também é importante testar situações
diferentes. Não basta testar apenas o funcionário que utiliza vale-transporte e
possui salário correto. É preciso testar quem não utiliza o benefício, quem tem
campo incompleto, quem possui salário inválido, quem aparece no primeiro
registro, quem aparece no último e até o caso em que não há funcionários a
processar. Esses testes ajudam a encontrar falhas antes que o sistema seja
usado em uma situação real.
Esse caso também ensina que o COBOL, por
ser muito usado em rotinas administrativas e financeiras, exige
responsabilidade no tratamento das informações. Uma regra simples, como
calcular 6% de desconto, pode afetar muitas pessoas quando aplicada em lote. Por
isso, o programa precisa ser claro, controlado e confiável.
Ao concluir o módulo 2, o aluno deve
perceber que entrada, processamento, saída, decisão e repetição não são
conteúdos isolados. Eles trabalham juntos. A entrada fornece os dados. A
decisão escolhe o caminho. O cálculo transforma valores. A repetição permite
processar vários registros. A saída apresenta o resultado de forma útil.
No caso da folha de pagamento, a equipe aprendeu que um sistema bem construído não é aquele que apenas “roda”, mas aquele que
trata os dados com cuidado, aplica as regras corretamente e permite conferência dos resultados. Essa é uma das principais lições para quem está começando a programar em COBOL: a lógica precisa ser tão organizada quanto os dados que ela processa.
Acesse materiais, apostilas e vídeos em mais de 3000 cursos, tudo isso gratuitamente!
Matricule-se AgoraAcesse materiais, apostilas e vídeos em mais de 3000 cursos, tudo isso gratuitamente!
Matricule-se Agora