O uso de uma técnica de refinamentos sucessivos nos possibilita, já nas etapas iniciais do desenvolvimento de uma solução para um problema computacional, certas abstrações sobre as tarefas a serem executadas no algoritmo. Estas abstrações são definidas apenas pelo seu efeito e constituem uma definição funcional da tarefa. Nas etapas posteriores, cada descrição funcional é substituída por trechos mais elaborados que especificam as etapas do processo: os módulos.
Identificado também por Programação top-down, temos nessa técnica uma estratégia que busca a solução de um problema a partir "do todo" observando em seguida as "particularidades" necessárias à resolução.
Quando desenvolvemos um algoritmo por refinamentos sucessivos procuramos dividir o algoritmo em unidades que representam as tarefas mais elementares, que se possa detectar e, para compor a solução do problema.
Um algoritmo projetado dessa forma será composto de módulos, que representam grupos de comandos que executam uma tarefa específica: no corpo do algoritmo ou espalhados em módulos independentes.
Vejamos um exemplo com a solução do problema em pseudocódigo e depois sua tradução para Linguagem C.
Problema: "elaborar um programa para cálculo da Folha de Pagamento de uma Empresa"
Solução:
1ª etapa: um algoritmo simples seria
PROGRAMA Folha
LEIA "dados do funcionário"
Determine o Salário
ESCREVA "Salário Calculado"
FIM
LEIA "dados do funcionário"
Determine o Salário
ESCREVA "Salário Calculado"
FIM
Precisamos refinar o comando "Determine o Salário", resultando:
PROGRAMA Determine o salário
Calcule os proventos
Calcule as deduções
Calcule o Salário Líquido
FIM
Ao elaborar o refinamento não houve preocupação de como o processo de cálculo dos proventos e das deduções seria efetuado. Essas ações constituem funções bem definidas no programa e serão executadas por módulos específicos. Nessa fase podemos optar pelo desenvolvimento de módulos para o cálculo dos proventos e das deduções. Obtemos:
PROGRAMA Determine o salário
proventos
deduções
Calcule o Salário Líquido
FIM
Correspondendo aos módulos:
PROGRAMA proventos
Determina o Salário Bruto
FIM
PROGRAMA deduções
Determina as deduções salariais
FIM
Vejamos como ficam esses módulos sabendo que:
- o cálculo dos proventos junta o salário bruto (horas trabalhadas * salário-hora) com o salário famíliaFIM
Vejamos como ficam esses módulos sabendo que:
- as deduções representam os descontos de INSS e IRPF a partir dos cálculos:
- desconto INSS = salário bruto * alíquota
- desconto IRPF = (salário bruto - desconto INSS) * alíquota - desconto tabela IRPF
- tabelas com alíquotas e descontos baseados nas faixas de salário:
PROGRAMA proventos
Salário Bruto ← horas trabalhadas * salário-hora
Salário Família ← número de filhos * valor referência de salário família
Proventos ← Salário Bruto + Salário Família
FIM
Salário Bruto ← horas trabalhadas * salário-hora
Salário Família ← número de filhos * valor referência de salário família
Proventos ← Salário Bruto + Salário Família
FIM
PROGRAMA deduções
INSS ← Salário Bruto * alíquota INSS
IRPF ← (Salário Bruto - INSS) * alíquota IRPF - desconto_IRPF
Deduções ← INSS + IRPF
FIM
FIM
detalhando os cálculos de alíquotas e descontos;
PROGRAMA alíquota INSS
SE Salário Bruto <= 1000
ENTÃO Alíquota ← 8%
SENÃO SE Salário Bruto <= 2500
ENTÃO Alíquota ← 10%
SENÃO Alíquota ← 12%
FIM
PROGRAMA alíquota IRPF
SE (Salário Bruto - INSS) <= 1000
ENTÃO Alíquota ← 0%
SENÃO SE (Salário Bruto - INSS) <= 2500
ENTÃO Alíquota ← 15%
SENÃO Alíquota ← 27%
FIM
PROGRAMA desconto_IRPF
SE (Salário Bruto - INSS) <= 1000
ENTÃO Desconto ← 0
SENÃO SE (Salário Bruto - INSS) <= 2500
ENTÃO Desconto ← 100
SENÃO Desconto ← 300
FIM
Assim, completamos nosso desenvolvimento obtendo:
- módulos para cálculo de alíquotas e descontos;
- módulos para cálculo de proventos e deduções.
PROGRAMA Determine o salário
proventos
deduções
Salário Líquido ← Proventos - Deduções
FIM
PROGRAMA Folha
LEIA "dados do funcionário"
Determine o Salário
ESCREVA "Salário Calculado"
FIM
0 comentários:
Postar um comentário