Professional Documents
Culture Documents
Algoritmos e Linguagem I
Aula 12
Contedo:
16. Subalgoritmos
17. Refinamentos sucessivos
16. Subalgoritmos
A complexidade dos algoritmos est intimamente ligada da aplicao a que se destinam. Em geral,
problemas complicados exigem algoritmos extensos para sua soluo.
Sempre possvel dividir problemas grandes e complicados em problemas menores e de soluo mais
simples. Assim, pode-se solucionar cada um destes pequenos problemas separadamente, criando algoritmos
para tal (subalgoritmos). Posteriormente, pela justaposio destes subalgoritmos elabora-se
automaticamente um algoritmo mais complexo e que soluciona o problema original. Esta metodologia de
trabalho conhecida como Mtodo de Refinamentos Sucessivos, cujo estudo assunto de cursos avanados
sobre tcnicas de programao.
Um subalgoritmo um nome dado a um trecho de um algoritmo mais complexo e que, em geral, encerra
em si prprio um pedao da soluo de um problema maior o algoritmo a que ele est subordinado. Este
conceito essencial numa cincia bastante recente: a Engenharia de Software.
Em resumo, os subalgoritmos so importantes na:
subdiviso de algoritmos complexos, facilitando o seu entendimento;
estruturao de algoritmos, facilitando principalmente a deteco de erros e a documentao de
sistemas; e
modularizao de sistemas, que facilita a manuteno de softwares e a reutilizao de
subalgoritmos j implementados.
A idia da reutilizao de software tem sido adotada por muitos grupos de desenvolvimento de sistemas de
computador, devido economia de tempo e trabalho que proporcionam. Seu princpio o seguinte: um
conjunto de algoritmos destinado a solucionar uma srie de tarefas bastante corriqueiras desenvolvido e
vai sendo aumentado com o passar do tempo, com o acrscimo de novos algoritmos. A este conjunto d-se
o nome de biblioteca. No desenvolvimento de novos sistemas, procura-se ao mximo basear sua concepo
em subalgoritmos j existentes na biblioteca, de modo que a quantidade de software realmente novo que
deve ser desenvolvido minimizada.
Muitas vezes os subalgoritmos podem ser teis para encerrar em si uma certa seqncia de comandos que
repetida vrias vezes num algoritmo. Nestes casos, os subalgoritmos proporcionam uma diminuio do
tamanho de algoritmos maiores. Antigamente, esta propriedade era tida como a principal utilidade dos
subalgoritmos.
16.3. Funes
16.4. Procedimentos
Um procedimento um subalgoritmo que retorna zero (nenhum) ou mais valores ao (sub)algoritmo
chamador. Estes valores so sempre retornados por meio dos parmetros ou de variveis globais, mas
nunca explicitamente, como no caso de funes. Portanto, a chamada de um procedimento nunca surge no
meio de expresses, como no caso de funes. Pelo contrrio, a chamada de procedimentos s feita em
comandos isolados dentro de um algoritmo, como as instrues de entrada (Leia) e sada (Escreva) de
dados.
A sintaxe da definio de um procedimento :
PROCEDIMENTO <nome> ( <parmetros> )
Var <variveis locais>
Inicio
<comando composto>
Fim
Temos que:
<nome> o nome simblico pelo qual o procedimento invocado por outros algoritmos;
<parmetros> so os parmetros do procedimento;
<variveis locais> so as definies das variveis locais ao procedimento. Sua forma anloga
da definio de variveis num algoritmo;
<comando composto> o conjunto de instrues do corpo do procedimento, que executado toda
vez que o mesmo invocado.
O exemplo a seguir um exemplo simples, onde um procedimento usado para escrever o valor das
componentes de um vetor.
Algoritmo Exemplo_procedimento
Var vet : matriz[1..10] de real
Procedimento ESC_VETOR()
Var i : inteiro
Inicio
Para i de 1 at 10 faa
Incio
Escreva vet[i]
Fim
Fim
Procedimento LER_VETOR()
Var i : inteiro
16.6. Parmetros
Parmetros so canais pelos quais se estabelece uma comunicao bidirecional entre um subalgoritmo e o
algoritmo chamador (o algoritmo principal ou outro subalgoritmo). Dados so passados pelo algoritmo
chamador ao subalgoritmo, ou retornados por este ao primeiro por meio de parmetros.
Parmetros formais so os nomes simblicos introduzidos no cabealho de subalgoritmos, usados na
definio dos parmetros do mesmo. Dentro de um subalgoritmo trabalha-se com estes nomes da mesma
forma como se trabalha com variveis locais ou globais.
Funo Mdia(X, Y : real) : real
Inicio
Retorne (X + Y) / 2
Fim
No exemplo anterior, X e Y so parmetros formais da funo Mdia.
Parmetros reais so aqueles que substituem os parmetros formais quando da chamada de um
subalgoritmo. Por exemplo, o trecho seguinte de um algoritmo invoca a funo Mdia com os parmetros
reais 8 e 7 substituindo os parmetros formais X e Y.
Z := Mdia(8, 7)
Assim, os parmetros formais so teis somente na definio (formalizao) do subalgoritmo, ao passo que
os parmetros reais substituem-nos a cada invocao do subalgoritmo. Note que os parmetros reais podem
ser diferentes a cada invocao de um subalgoritmo.