Quando o problema que pretendemos resolver atinge uma dimensão razoável, não é fácil (ou possível) escrever, de uma acentada, um algoritmo que o resolva. É mais fácil começar por dividir o problema em subproblemas mais pequenos e tentar resolver cada um deles em separado. Eventualmente, cada um desses subproblemas pode ser também subdividido em subproblemas ainda mais pequenos. Este processo repetir-se-á até termos um conjunto de subproblemas suficientemente pequenos e simples para os quais sabemos escrever algoritmos que os resolvam. Esses algoritmos são depois combinados para formar um algoritmo que resolve o problema inicial, sempre que se entenda conveniente podemos transforma-los em funções.
Consideremos o problema de ler dez valores reais e calcular quantos são superiores à sua média.
Primeiro temos que definir as estruturas de dados. Como estamos a tratar dez valores do mesmo tipo, podemos utilizar uma tabela. Definimos então o tipo Numeros:
= tab[10] de REAL;O primeiro passo para a escrita dos algoritmos é, como vimos, subdividir o problema. Vamos então identificar as etapas principais de resolução do nosso problema. Cada etapa será descrita por uma frase em protuguês. Cada frase será escrita entre parêntises rectos para indicar que ainda não se trata de uma ``verdadeira'' instrução algoritmica. Temos quatro grandes tarefas a executar:
Temos agora que resolver cada um deste subproblemas. Consideremos o segundo: [calcular a media dos dez valores]. Para resolver este problema temos que:
[somar os dez valores] já é um problema mais simples e pode ser resolvido do seguinte modo (t é a tabela com os valores):
[dividir a soma por dez para calcular a media] é ainda mais simples:
podemos agora juntar os dois subalgoritmos:
e podemos, finalmente escrever o algoritmo de [calcular a media dos dez valores] na forma de uma função:
Fica como exercício escrever uma função
_nums:para [ler os dez valores] e uma funçãoNumeros
_maiores: Numerospara [contar quantos valores são superiores à média]. Com estas três funções podemos reescrever o nosso algoritmo principal:REAL
REAL