Modularização de Algoritmos
Rotinas – Procedimentos – Funções
Decomposição de problemas:
• A decomposição de um problema em problemas menores é fator determinante para redução da complexidade
• Quando se decompõe um problema em problemas menores divide-se a complexidade, e por conseqüência, simplifica-se a resolução
• Uma vantagem da decomposição é que permite focar a
atenção em um problema pequeno de cada vez, o que ao final produzirá uma melhor compreensão do todo
Critérios para decomposição:
• Dividir o problema em suas partes principais
• Analisar a divisão obtida para garantir coerência
• Se alguma parte ainda permanecer complexa, decompor novamente
• Analisar o resultado para garantir entendimento e coerência
• Técnica chamada Refinamentos Sucessivos – Top Down
Modularização dos algoritmos:
• Para resolver os problemas menores são definidas sub-
rotinas que implementam problemas menores independentes do problema maior
• Sub-rotinas são blocos de instruções que realizam tarefas específicas
• Para processar o problema completo é preciso unir todas as sub-rotinas em um programa que as relacionam de maneira a resolver o problema complexo – programa principal
Sub-rotinas:
• Conceitualmente as sub-rotinas podem ser procedimentos ou funções – algumas linguagens não diferenciam os dois
processos
• Vantagens no código:
• Maior legibilidade
• Desenvolvimento e teste independente
• Reuso – uma operação que é repetida muitas vezes pode ser definida uma única vez
Procedimentos:
• Um grupo de instruções (código) ao qual é atribuído um nome e vem no início do algoritmo
• A ativação ocorre através da referência ao nome dado ao procedimento (sob chamada), e ocorre em qualquer ponto do programa
• A execução é realizada como se o grupo de sentenças fosse copiado para o ponto onde foi ativado
• Ao final da execução do procedimento o processamento do programa volta ao ponto em que estava no momento da
chamado do procedimento
Sintaxe algorítmica de procedimento:
procedimento nome (lista de parâmetros)
<declaração de variáveis locais>
início
<comandos>
fim;
fim procedimento;
Exemplo procedimento:
• Algoritmo para somar dois números inteiros (sem passagem de parâmetros):
início
inteiro: n1, n2, resultado;
procedimento soma() inicio
leia (n1);
leia (n2);
resultado n1 + n2;
escreva (resultado);
fim;
fim procedimento;
soma(); // chama o procedimento soma
Exemplo procedimento com parâmetros:
• Algoritmo para somar dois números inteiros (com passagem de parâmetros):
início
inteiro: valor1, valor2;
procedimento soma(n1, n2) inteiro: resultado;
início
resultado n1 + n2;
escreva (resultado);
fim;
fim procedimento;
leia(valor1);
leia(valor2);
soma(valor1, valor2); // n1=valor1 e n2=valor2 fim.
Funções:
• Muito semelhante aos procedimentos, sendo também um grupo de instruções (código) ao qual é atribuído um nome
• A principal diferença está no fato da função poder ser utilizada nas expressões, como se fossem variáveis pois
retornam valores que são associados ao seu nome – é preciso declarar o tipo
• É preciso atribuir o resultado de uma função à uma variável ou comando que espera um parâmetro – sempre retorna um