You are on page 1of 8

Universidade Veiga de Almeida

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.1. Mecanismo de Funcionamento


Um algoritmo completo dividido num algoritmo principal e diversos subalgoritmos (tantos quantos forem
necessrios e/ou convenientes). O algoritmo principal aquele por onde a execuo do algoritmo sempre se
inicia. Este pode eventualmente invocar os demais subalgoritmos.

Aula 12 - Prof. Cludio Marques - Pg. 1

Universidade Veiga de Almeida


Algoritmos e Linguagem I
O corpo do algoritmo principal sempre o ltimo trecho do pseudocdigo de um algoritmo. As definies
dos subalgoritmos esto sempre colocadas no trecho aps a definio das variveis globais e antes do corpo
do algoritmo principal:
Algoritmo <nome do algoritmo>
Var
<definio das variveis globais>
<definies dos subalgoritmos>
Inicio
<corpo do algoritmo principal>
Fim
Durante a execuo do algoritmo principal, quando se encontra um comando de invocao de um
subalgoritmo, a execuo do mesmo interrompida. A seguir, passa-se execuo dos comandos do corpo
do subalgoritmo. Ao seu trmino, retoma-se a execuo do algoritmo que o chamou (no caso, o algoritmo
principal) no ponto onde foi interrompida (comando de chamada do subalgoritmo) e prossegue-se pela
instruo imediatamente seguinte.
Note, tambm, que possvel que um subalgoritmo chame outro atravs do mesmo mecanismo.

16.2. Definio de Subalgoritmos


A definio de um subalgoritmo consta de:
um cabealho, onde esto definidos o nome e o tipo do subalgoritmo, bem como os seus
parmetros e variveis locais;
um corpo, onde se encontram as instrues (comandos) do subalgoritmo.
O nome de um subalgoritmo o nome simblico pelo qual ele chamado por outro algoritmo.
O corpo do subalgoritmo contm as instrues que so executadas cada vez que ele invocado.
Variveis locais so aquelas definidas dentro do prprio subalgoritmo e s podem ser utilizadas pelo
mesmo.
Parmetros so canais por onde os dados so transferidos pelo algoritmo chamador a um subalgoritmo, e
vice-versa. Para que possa iniciar a execuo das instrues em seu corpo, um subalgoritmo s vezes
precisa receber dados do algoritmo que o chamou e, ao terminar sua tarefa, o subalgoritmo deve fornecer ao
algoritmo chamador os resultados da mesma. Esta comunicao bidirecional pode ser feita de dois modos
que sero estudados mais frente: por meio de variveis globais ou por meio da passagem de parmetros.
O tipo de um subalgoritmo definido em funo do nmero de valores que o subalgoritmo retorna ao
algoritmo que o chamou. Segundo esta classificao, os algoritmos podem ser de dois tipos:
funes, que retornam um, e somente um, valor ao algoritmo chamador;
procedimentos, que retornam zero (nenhum) ou mais valores ao algoritmo chamador.
Na realidade, a tarefa desempenhada por um subalgoritmo do tipo funo pode perfeitamente ser feita por
outro do tipo procedimento (o primeiro um caso particular deste). Esta diferenciao feita por razes
histricas, ou, ento, pelo grande nmero de subalgoritmos que se encaixam na categoria de funes.

16.3. Funes

Aula 12 - Prof. Cludio Marques - Pg. 2

Universidade Veiga de Almeida


Algoritmos e Linguagem I
O conceito de Funo originrio da idia de funo matemtica (por exemplo, raiz quadrada, seno,
cosseno, tangente, logaritmo, entre outras), onde um valor calculado a partir de outro(s) fornecido(s)
funo.
A sintaxe da definio de uma funo dada a seguir:
FUNO <nome> ( <parmetros> ) <tipo_de_dado>
VAR
<variveis locais>
INCIO
<comando composto>
FIM
Temos que:
<nome> o nome simblico pelo qual a funo invocada por outros algoritmos;
<parmetros> so os parmetros da funo;
<tipo de dado> o tipo de dado da informao retornado pela funo ao algoritmo chamador;
<variveis locais> consiste na definio das variveis locais funo. Sua forma anloga da
definio de variveis num algoritmo;
<comando composto> o conjunto de instrues do corpo da funo.
Dentro de um algoritmo, o comando de invocao de um subalgoritmo do tipo funo sempre aparece
dentro de uma expresso do mesmo tipo que o do valor retornado pela funo.
A invocao de uma funo feita pelo simples aparecimento do nome da mesma, seguido pelos
respectivos parmetros entre parnteses, dentro de uma expresso. A funo executada e, ao seu trmino,
o trecho do comando que a invocou substitudo pelo valor retornado pela mesma dentro da expresso em
que se encontra, e a avaliao desta prossegue normalmente.
Dentro de uma funo, e somente neste caso, o comando Retorne <expresso> usado para retornar o valor
calculado pela mesma. Ao encontrar este comando, a expresso entre parnteses avaliada, a execuo da
funo terminada neste ponto e o valor da expresso retornado ao algoritmo chamador. Vale lembrar
que uma expresso pode ser uma simples constante, uma varivel ou uma combinao das duas por meio
de operadores. Esta expresso deve ser do mesmo tipo que o valor retornado pela funo.
O algoritmo a seguir um exemplo do emprego de funo para calcular o valor de um nmero elevado ao
quadrado.
Algoritmo Exemplo_de_funo
Var X, Y : real
Funo Quad(w : real) : real
Var Z : real
Inicio
Z := w * w
Retorne Z
Fim
Incio
Escreva "Digite um nmero
Leia X
Y := Quad(X)
Escreva X, " elevado ao quadrado = ", Y

Aula 12 - Prof. Cludio Marques - Pg. 3

Universidade Veiga de Almeida


Algoritmos e Linguagem I
Fim
Do exemplo anterior importante notar que:
a funo QUAD toma W como parmetro do tipo real, retorna um valor do tipo real e possui Z
como uma varivel local real;
o comando de invocao da funo QUAD aparece no meio de uma expresso, no comando de
atribuio dentro do algoritmo principal.

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

Aula 12 - Prof. Cludio Marques - Pg. 4

Universidade Veiga de Almeida


Algoritmos e Linguagem I
Inicio
Para i de 1 at 10 faa
Incio
Leia vet[i]
Fim
Fim
Inicio
LER_VETOR()
ESC_VETOR()
Fim
No exemplo conveniente observar:
a forma de definio dos procedimentos LER_VETOR( ) e ESC_VETOR( ), que no possuem
nenhum parmetro, e usam a varivel local i para varrer os componentes do vetor, lendo e
escrevendo um valor por vez; e
a forma de invocao dos procedimentos, por meio do seu nome, seguido de seus eventuais
parmetros (no caso, nenhum), num comando isolado dentro do algoritmo principal.

16.5. Variveis Globais e Locais


Variveis globais so aquelas declaradas no incio de um algoritmo. Estas variveis so visveis (isto ,
podem ser usadas) no algoritmo principal e por todos os demais subalgoritmos.
Variveis locais so aquelas definidas dentro de um subalgoritmo e, portanto, somente visveis (utilizveis)
dentro do mesmo. Outros subalgoritmos, ou mesmo o algoritmo principal, no podem utiliz-las.
No exemplo a seguir so aplicados estes conceitos.
Algoritmo Exemplo_variveis_locais_e_globais
Var
X : real
I : inteiro
Funo FUNC() : real
Var
X : matriz[1..5] de inteiro
Y : caracter[10]
Inicio
...
Fim
Procedimento PROC
Var Y : 1gico
Inicio
...
X := 4 * X
I := I + 1
...
Fim
Incio
...
X := 3.5
...
Aula 12 - Prof. Cludio Marques - Pg. 5

Universidade Veiga de Almeida


Algoritmos e Linguagem I
Fim
importante notar no exemplo anterior que:
as variveis X e I so globais e visveis a todos os subalgoritmos, exceo da funo FUNC, que
redefine a varivel X localmente;
as variveis X e Y locais ao procedimento FUNC no so visveis ao algoritmo principal ou ao
procedimento PROC. A redefinio local do nome simblico X como uma matriz[5] de inteiro
sobrepe (somente dentro da funo FUNC) a definio global de X como uma varivel do tipo
real;
a varivel Y dentro do procedimento PROC, que diferente daquela definida dentro da funo
FUNC, invisvel fora deste procedimento;
a instruo X := 8.5 no algoritmo principal, bem como as instrues X := 4 * X e I := I + 1 dentro
do procedimento PROC, atuam sobre as variveis globais X e I.

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.

16.7. Mecanismos de Passagem de Parmetros


Como foi visto anteriormente, os parmetros reais substituem os formais no ato da invocao de um
subalgoritmo. Esta substituio denominada passagem de parmetros e pode se dar segundo dois
mecanismos distintos: passagem por valor (ou por cpia) ou passagem por referncia.

16.7.1. Passagem de Parmetros por Valor

Aula 12 - Prof. Cludio Marques - Pg. 6

Universidade Veiga de Almeida


Algoritmos e Linguagem I
Na passagem de parmetros por valor (ou por cpia) o parmetro real calculado e uma cpia de seu valor
fornecida ao parmetro formal, no ato da invocao do subalgoritmo. A execuo do subalgoritmo
prossegue normalmente e todas as modificaes feitas no parmetro formal no afetam o parmetro real,
pois trabalha-se apenas com uma cpia do mesmo.
Algoritmo Exemplo_parametro_por_valor
Var X : inteiro
Procedimento PROC(Y : inteiro)
Incio
Y := Y + 1
Escreva "Durante Y = , Y
Fim
Incio
X := 1
Escreva "Antes X = , X
PROC(X)
Escreva "Depois X = ", X
Fim
O algoritmo anterior fornece o seguinte resultado:
Antes X = 1
Durante Y = 2
Depois X = 1
Isto certifica que o procedimento no alterou o valor do parmetro real X durante sua execuo.
Este tipo de ao possvel porque, neste mecanismo de passagem de parmetros, feita uma reserva de
espao em memria para os parmetros formais, para que neles seja armazenada uma cpia dos parmetros
reais.

16.7.2. Passagem de Parmetros por Referncia


Neste mecanismo de passagem de parmetros no feita uma reserva de espao em memria para os
parmetros formais. Quando um subalgoritmo com parmetros passados por referncia chamado, o
espao de memria ocupado pelos parmetros reais compartilhado pelos parmetros formais
correspondentes. Assim, as eventuais modificaes feitas nos parmetros formais tambm afetam os
parmetros reais correspondentes.
Um mesmo subalgoritmo pode utilizar diferentes mecanismos de passagem de parmetros, para parmetros
distintos. Para diferenciar uns dos outros, convencionou-se colocar o prefixo VAR antes da definio dos
parmetros formais passados por referncia. Se por exemplo um procedimento tem o seguinte cabealho:
Procedimento PROC( X, Y : inteiro; Var Z : real; J: real)
Ento:
X e Y so parmetros formais do tipo inteiro e so passados por valor;
Z um parmetro formal do tipo real passado por referncia;
J um parmetro formal do tipo real passado por valor.

Aula 12 - Prof. Cludio Marques - Pg. 7

Universidade Veiga de Almeida


Algoritmos e Linguagem I
O exemplo do item anterior, alterado para que o parmetro Y do procedimento seja passado por referncia,
torna-se:
Algoritmo Exemplo_parametro_por_referencia
Var X : inteiro
Procedimento PROC(Y : inteiro)
Incio
Y := Y + 1
Escreva "Durante Y = , Y
Fim
Incio
X := 1
Escreva "Antes X = , X
PROC(X)
Escreva "Depois X = ", X
Fim
O resultado do algoritmo modificado :
Antes X = 1
Durante Y = 2
Depois X = 2
Como podemos observar, depois de chamar o procedimento com o parmetro por referncia o valor
original da varivel foi alterado.

17. Refinamentos Sucessivos


De acordo com o modelo cascata, o ciclo de vida de um software consta das seguintes fases: Anlise de
requisitos, Arquitetura geral, Projeto detalhado, Programao, Integrao e testes, e manuteno.
O Mtodo de Refinamentos Sucessivos para a elaborao de algoritmos dita que um dado problema deve
ser subdividido em problemas menores repetidamente, at que seja possvel encontrar um algoritmo
(subalgoritmo ou comando composto) para resolver cada um destes subproblemas. Assim, o algoritmo
para resolver o problema original ser composto pela composio destes algoritmos.
O mtodo apresentado pode ser subdividido na fase de Anlise Top-Down, que procura resolver o
problema a nvel de subalgoritmos e comandos compostos, e na fase de Programao Estruturada, que
detalha os subalgoritmos e comandos compostos at o nvel das instrues primitivas e construes de
controle de fluxo.
Por fim, o uso do mtodo vantajoso devido ao seu estmulo modularizao de sistemas, que proporciona
a criao de programas claros, fceis de entender e, portanto, de manuteno mais barata.

Aula 12 - Prof. Cludio Marques - Pg. 8

You might also like