Você está na página 1de 30

SUBALGORITMOS

Dividir para conquistar


Algoritmo completo dividido em:
Um algoritmo (ou funo) principal
Um ou diversos subalgoritmos (funes e
procedimentos)
Subalgoritmos
um algoritmo que, geralmente, resolve um
pequeno problema, e que est subordinado a
um outro algoritmo.
Um subalgoritmo s ser acionado se
solicitado pelo algoritmo principal.
possvel que um subalgoritmo chame
outro subalgoritmo.
Por que subalgoritmos so
importantes?
Porque permitem:
a subdiviso de algoritmos complexos, facilitando
o seu entendimento;
a estruturao de algoritmos, facilitando,
principalmente, a deteco de erros e a
documentao de sistemas;
a modularizao de sistemas, facilitando a
manuteno de softwares e reutilizao de
subalgoritmos j implementados.
Elementos de um subalgoritmo
A definio de um subalgoritmo consta de:
CABEALHO, onde esto definidos o nome e o
tipo do subalgoritmo, bem como os seus
parmetros e suas variveis locais;
CORPO, onde se encontram as instrues, que
sero executadas cada vez que ele chamado.
Definio dos elementos de um
subalgoritmo
Nome um nome simblico pelo qual ele
chamado por outro algoritmo.
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.
Essa comunicao bidirecional chamada de:
passagem de parmetros
Tipos de subalgoritmo
O tipo de um subalgoritmo definido em
funo do nmero de valores que o
subalgoritmo retorna ao algoritmo que o
chamou.
So dois tipos:
Funes que retornam um, e somente um valor
ao algoritmo chamador;
Procedimentos que retornam vrios valores, ou
nenhum, ao algoritmo chamador.
Funes
O conceito de funes originrio da ideia de
funo matemtica, onde um valor
calculado a partir de outro(s) valor(es)
fornecidos(s) funo.
Sintaxe:
funo <nome> (<parmetros>) : <tipo de
retorno>
<declarao de variveis>
<bloco de instrues>
fimfuno
Instruo retorne
Comando simples usado apenas nas funes e
tem o efeito de parar a execuo da funo e
enviar um valor para o algoritmo principal ou
para outro subalgoritmo que o tenha
chamado.
Toda funo deve ter em seu corpo de
instrues, pelo menos, uma instruo
retorne.
Instruo retorne (continuao)
Sintaxe:
retorne (<expresso>)

Exemplos:
retorne (1)
retorne (area)
retorne (nome1)
retorne (falso)
retorne (3.0*x**2+4.0*x 1.5)

Utilizando funo
algoritmo exemplo
inteiro x, y
funo calcula ( inteiro w) : inteiro
inteiro z
z <- w * w + 2
retorne (z)
fimfuno
inicio
escreva (Digite um nmero: )
leia (x)
y <- calcula (x)
escreval ( y = , y)
fim
fimalgoritmo
Procedimentos
Um procedimento subalgoritmo que retorna
vrios valores, ou nenhum, ao algoritmo que o
chama.
Esses valores so sempre retornados por meio
dos parmetros, e nunca explicitamente como
no caso das funes que usa a instruo
retorne.
Forma geral de um procedimento
Sintaxe:
procedimento <nome> (<parmetros>)
<declarao de variveis>
<bloco de instrues>
fimprocedimento

Utilizando procedimento
algoritmo exemplo
inteiro a,w,x
procedimento calcula (inteiro x)
inteiro w
w <- x + 2
escreval (P_Calcula: x = , x, w = , w, e a = , a)
fimprocedimento
inicio
w <- 0
a <-1
escreva (Digite um nmero: )
leia (x)
calcula(x)
a <- x + w
escreval ( F_Principal: x = , x, w = , w, e a = , a)
fim
fimalgoritmo

Exerccios
Faa algoritmos modularizados, ou seja,que
tenham funes independentes para entrada
de dados, processamento dos dados
fornecidos e sada da informao para:
1. Calcular o mmc entre dois nmeros inteiros.
2. Calcular a soma dos elementos de um vetor.
3. Identificar se um vetor possui elementos
repetidos.

Exerccios (continuao)
Faa um algoritmo que leia n nmeros
inteiros e escreva o maior e o menor deles
informando se cada um deles par ou impar.
Para isso, voc dever criar procedimentos
independentes, sendo que um dever
calcular o maior e o menor nmero de um
conjunto de nmeros inteiros dados, e outro
procedimento para imprimir se um nmero
inteiro par ou impar.

Parmetros
Dados so passados pelo algoritmo principal
(ou outro subalgoritmo) ao subalgoritmo, ou
retornados por este ao primeiro, por meio de
parmetros.

Tipos de parmetros:
Formais
Reais

Parmetros formais
So os nomes simblicos (variveis)
introduzidos no cabealho dos subalgoritmos,
utilizados na definio dos parmetros do
mesmo.
Dentro do subalgoritmo trabalha-se com estes
nomes da mesma forma como se trabalha
com variveis locais.
Parmetros reais
So aqueles que substituem os parmetros
formais quando da chamada de um
subalgoritmo.
Os parmetros formais so teis somente na
definio do subalgoritmo. Os parmetros
reais podem ser diferentes a cada chamada de
um subalgoritmo.

So divididos em:
Parmetros de entrada
Parmetros de sada
Quando os parmetros formais
substituem os parmetros reais?
No ato da chamada de um subalgoritmo.
Esta substituio denominada passagem de
parmetros e pode se dar por dois mecanismos:
Passagem por valor (ou por cpia);
Passagem por referncia.
Passagem de parmetros por valor
O parmetro real calculado, e uma cpia de
seu valor fornecida ao parmetro formal, no
ato da chamada do subalgoritmo.
As modificaes feitas no parmetro formal
no afetam o parmetro real, durante a
execuo do subalgoritmo, pois trabalha-se
apenas com uma cpia do mesmo.
Os parmetros formais possuem locais de
memria exclusivos para que possam
armazenar os valores dos parmetros reais.
Passagem de parmetros por
referncia
No feita uma reserva de espao de
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.
Como vamos trabalhar com os
parmetros nessa disciplina?
Quando a passagem de parmetros for feita
com variveis simples, a passagem ser por
valor, e quando for feita com variveis
indexadas, a passagem de parmetros ser
por referncia.
Para manter intactos vetores ou matrizes aps a
chamada de subalgoritmos, que os utilizaram e os
modificaram como parmetros formais no ato da
chamada dos mesmos, ento devemos antes disso
guardar cpias dos seus valores.
Procedimentos em VisualG
procedimento <nome-de-procedimento>
[(<seqncia-de-declaraes-de-
parmetros>)]
// Seo de Declaraes Internas
inicio
// Seo de Comandos
fimprocedimento

Procedimantos em VisualG
Seqncia-de-declaraes-de-parmetros:

[var] <seqncia-de-parmetros>: <tipo-de-
dado>
As declaracoes de parametros so separadas por `;`
A seqncia-de-parmetros uma seqncia de
nomes de parmetros separados por vrgulas


Procedimantos em VisualG
procedimento soma
var aux: inteiro
inicio
// n, m e res so variveis globais
aux <- n + m
res <- aux
fimprocedimento

No algoritmo principal:
n <- 4
m <- -9
soma
escreva(res)

procedimento soma (x,y: inteiro)
inicio
// res varivel global
res <- x + y
fimprocedimento

No algoritmo principal:
n <- 4
m <- -9
soma(n,m)
escreva(res)

Passagem de parametros por
valor
Funcoes em VisualG
funcao <nome-de-funo> [(<seqncia-de-declaraes-de-parmetros>)]:
<tipo-de-dado>
// Seo de Declaraes Internas
inicio
// Seo de Comandos
fimfuncao
Seqncia-de-declaraes-de-parmetros:

[var] <seqncia-de-parmetros>: <tipo-de-dado>

O valor retornado pela funo atravs do comando retorne

Funcoes em VisualG
funcao soma: inteiro
var aux: inteiro
inicio
// n, m e res so variveis globais
aux <- n + m
retorne aux
fimfuncao

No algoritmo principal:
n <- 4
m <- -9
res <- soma
escreva(res)

funcao soma (x,y: inteiro): inteiro
inicio
retorne x + y
fimfuncao

No algoritmo principal:
n <- 4
m <- -9
res <- soma(n,m)
escreva(res)
Passagem de parametros por
valor
Funcoes Recursivas
funcao fatorial (v: inteiro): inteiro
inicio
se v <= 2 entao
retorne v
senao
retorne v * fatorial(v-1)
fimse
fimfuncao

No algoritmo principal:
n <- 14
escreva(o Fatorial de , n, = ,fatorial(n))

algoritmo "Procedimento triangulo"
var
altura, base, rea : real //declarao das variveis globais
procedimento ptriangulo (var h,b,ar : real) //declarao
inicio
ar <- (b*h)/2 //instrues
fimprocedimento
Procedimento criado
inicio
escreval ("Digite o valor da base: ")
leia (base)
escreval ("Digite o valor da altura: ")
leia (altura)
ptriangulo(altura,base, area) //chamada ao procedimento
escreval (area,"m")
fimalgoritmo