Reaproveitando algoritmos
Alguns exercícios pedem que se modifique um algoritmo feito anteriormente, para que ele
resolva um novo problema. Isto procura demonstrar uma prática corriqueira, chamada de
reaproveitamento de software. Assim, quem desenvolve software procura sempre reaproveitar
trabalhos já realizados, e com isto diminuir o tempo necessário para criar um novo programa. No
entanto, para que algoritmos possam ser reaproveitados, algumas adaptações podem vir a ser
necessárias. O ideal seria não precisar modificar o algoritmo, e apenas fornecer os dados de entrada
que ele necessita, e depois usar os dados de saída que ele gera. Futuramente no curso (em particular
na disciplina de Programação Orientada a Objeto, na 5a fase) se estudarão formas de fazer isto
sistematicamente. Em nossa disciplina, no entanto, teremos que usar mais da intuição para
reaproveitarmos os algoritmos que vão sendo criados.
Alguns exemplos ilustrarão como se podem reaproveitar algoritmos. Para começar, tomemos
o exercício da tabuada, cujo algoritmo segue abaixo.
Um exercício seguinte pede que se modifique esse algoritmo para que ele mostre as
tabuadas de todos os números de 1 a 10. Algumas modificações serão necessárias:
1. Não será mais necessário ler um número do teclado, pois os números cujas tabuadas devem
ser mostradas já são conhecidos.
2. Para cada número entre 1 e 10, deve-se executar a parte do algoritmo que mostra a tabuada.
Isto implica o uso de uma estrutura de repetição.
Abaixo segue o novo algoritmo, destacando-se o que foi reaproveitado do algoritmo
anterior. As poucas modificações dizem respeito à repetição do algoritmo da tabuada para cada
valor contido na variável base, sendo que esses valores iniciam com 1 e vão até 10. Observe que a
maior parte do algoritmo anterior foi aproveitada sem alterações.
Um outro exercício pede que seja feito um algoritmo para informar se um número lido pelo
teclado é primo. Uma possível solução é mostrada abaixo.
O exercício seguinte pede que se modifique o algoritmo anterior para que se informe todos
os números primos que sejam menores que um determinado número lido pelo teclado. Esse novo
algoritmo deve basicamente fazer o seguinte:
No fluxograma acima foi destacada a parte do algoritmo que deve testar se o valor da
variável numero é primo. Somente se esse teste for verdadeiro o novo algoritmo deve mostrar o
valor de numero. Mas justamente o que faz o algoritmo anterior é testar se um determinado número
é primo, o que leva a questão: seria possível reaproveitá-lo ? A resposta definitivamente é “sim”, e
abaixo se demonstra como isto é possível. Novamente se destacou o que foi reaproveitado do
algoritmo anterior. Observe que foi necessária uma pequena modificação (destacada em azul) para
que, ao invés de mostrar se um número é primo ou não, se mostre o valor do número quando ele for
primo (e somente nesse caso).
Um outro exercício é modificar o algoritmo anterior para que, ao invés de mostrar todos os
números primos menores que um determinado número, mostre todos os números primos que são
divisores de um número. Foi destacada a única modificação necessária, que diz respeito à decisão
sobre mostrar ou não o valor da variável numero: agora ele deve ser mostrado somente se for primo
e também se for divisor do número informado pelo teclado (contido na variável numerolimite).
Por fim, modificando-se levemente o algoritmo acima pode-se criar um algoritmo para
fatorar um número qualquer. A fatoração de um número é a operação em que se decompõe esse
número em fatores primos – por exemplo, a fatoração de 12 é {2, 2, 3}, a fatoração de 25 é {5, 5}, e
a fatoração de 126 é {2, 3, 3, 7}. O novo algoritmo está mostrado abaixo, com a modificação em
relação ao algoritmo anterior destacada em azul.
Por esses exemplos se pode ver que o reaproveitamento de algoritmos não só é possível,
como recomendável. Para facilitar o reaproveitamento, devem-se escrever algoritmos cujos dados
de entrada e de saída possibilitem que um mesmo algoritmo resolva todos os problemas de um
determinado tipo (ou ao menos a maioria deles). Claro que para isto a delimitação do tipo de
problema que um algoritmo deve ser capaz de resolver precisa ser bem definida, tornando-se uma
diretriz de projeto de grande relevância.
Download

Reaproveitando algoritmos Alguns exercícios pedem que se