Escolar Documentos
Profissional Documentos
Cultura Documentos
Estruturas de Dados I
Subalgoritmos:
Funções e Procedimentos
Profa. Márcia Cristina Moraes
Profa. Milene Selbach Silveira
Material para estudo:
Forbellone, A. e Eberspächer, H. (2005)
capítulo 6 (conceitos de modularização e escopo de
variáveis)
Subalgoritmos
Até o momento somente estávamos usando variáveis globais, agora vamos usar
variáveis locais.
Subalgoritmos: tipos
A maioria das linguagens possui 2 formas de
implementar e usar subalgoritmos
(módulos):
Função: calculam um único valor em função de
um ou mais parâmetros recebidos
Procedimento: podem calcular um número
qualquer de valores, calculados ou não em
função dos parâmetros recebidos
Função
tipo Função NomeF(tipo: Arg1, tipo: Arg2, ..., tipo: Argn)
Início
{Definição das variáveis locais}
.....
{conjunto de comandos}
NomeF Expressão Retorno para o programa principal
Retorne da expressão calculada na função
Fim
Função
Tipo: tipo de retorno da função (qualquer um dos
tipos existentes, por exemplo, inteiro, real, literal)
NomeF: nome da função
O número de argumentos depende do que se quer
fazer na função. O nome do argumento sempre vem
precedido do seu tipo
NomeF Expressão: indica o retorno da
expressão calculada na função para o programa
principal
Retorne: indica o término da execução do
subalgoritmo e o retorno do controle para o
programa principal
Exemplo
Inteiro Função Soma(inteiro: a, b)
Início a e b: argumentos de entrada
res: variável local, armazena o valor que
inteiro: res será retornado pela função
Pode retornar valores nos argumentos desde que eles sejam passados
por referência para o procedimento. Neste caso deve-se ter ao final do
procedimento uma atribuição para os argumentos que se deseja
retornar valores calculados dentro do procedimento.
Procedimento
Procedimento NomeP(tipo: Arg1, tipo: Arg2,..., tipo:Argn)
Início
{Definição das variáveis locais} Diferença para
a função??
.....
Fim
Pode retornar valores nos argumentos desde que eles sejam passados
por referência para o procedimento. Neste caso deve-se ter ao final do
procedimento uma atribuição para os argumentos que se deseja retornar
valores calculados dentro do procedimento.
Procedimento
NomeP: nome do procedimento
Da mesma forma que na função o
procedimento também deve ser chamado no
algoritmo principal
NomeP(parâmetros)
Na hora que o procedimento é chamado, os
valores (parâmetros) da chamada são
passados para os argumentos
correspondentes
Procedimento
Argumentos de definição e parâmetros de
chamada devem corresponder em número, e
tipo e estar na mesma ordem
Enquanto os argumentos de definição devem
ser obrigatoriamente variáveis, os
parâmetros de chamada podem ser
expressões.
Exemplo – Procedimento que
não retorna valor
Procedimento Soma(inteiro: a, b)
Início
inteiro: res
res a + b
Escreva (“Resultado da soma = ”, res)
Fim
Chamada do Procedimento
Soma
Algoritmo Principal
inteiro: x, y
Início
Leia(x, y)
Chamada do procedimento soma passando
Soma(x,y) os parâmetros x e y por valor
Procedimento Soma(inteiro: a, b)
Início
inteiro: res
res a + b
Escreva(res)
Fim
Passo a Passo (2/6)
Algoritmo Principal
inteiro: x, y
Início
leia(x, y)
Soma(x, y) Chama o procedimento soma passando o
escreva(x,y) valor de x que é 10 e o valor de y que é 3
Fim
Procedimento Soma(inteiro: a, b)
Início
inteiro: res
res recebe a soma de 10 e 3,
res a + b
ou seja, recebe 13
Escreva(res)
Fim
Passo a Passo (5/6)
Algoritmo Principal
inteiro: x, y
Início
leia(x, y)
Soma(x, y)
escreva(x,y)
Fim
Procedimento Soma(inteiro: a, b)
Início
inteiro: res
res a + b
Escreva(res) Escreve o resultado
Fim
Passo a Passo (6/6)
Algoritmo Principal
inteiro: x, y
Início
leia(x, y)
Soma(x, y)
escreva(x,y) Escreve o valor de x e y, ou seja, 10 e 3
Fim
Procedimento Soma(inteiro: a, b)
Início
inteiro: res
res a + b
Escreva(res)
Fim
Retomando...
Passagem por referência: passa o endereço
de memória da variável para o argumento
Procedimento Soma2(inteiro: ref a, inteiro: b)
a é um argumento passado por referência e b é um
argumento passado por valor
Isto significa que a recebe/armazena um endereço de
memória relacionada a uma variável e não o valor de
uma variável
O valor do argumento a retorna alterado para o
algoritmo principal
Exemplo – procedimento
retorna valor na variável a
Procedimento Soma2(inteiro: ref a, b)
Início
res: inteiro
res a + b
a res Passagem por Referência:
Recebe o endereço de memória da variável
Fim
Chamada do Procedimento
Soma2
Algoritmo Principal
inteiro: x, y
Início
Leia(x, y)
Chamada do procedimento Soma2 passando
Soma2(x,y) os parâmetros x e y
Valor de x retorna alterado, não é mais o
Escreva(x,y) valor que possuía antes da chamada
Valor de y volta inalterado, pois foi passado
Fim por valor
Passo a Passo - Soma2 (1/5)
Algoritmo Principal
inteiro: x, y
Início
leia(x, y) 10 3
Soma2(x, y)
escreva(x,y)
Fim
Passagem
por valor ou
por referência?
Exercício 2
Faça um procedimento que recebe 2
parâmetros do tipo inteiro e retorna os
valores dos parâmetros trocados para o
algoritmo principal. Construa o algoritmo
principal e faça uma chamada este
procedimento.
E
agora?
Exercício 3
Faça um procedimento que recebe 3 valores
inteiros por parâmetro e retorna-os ordenados
em ordem crescente. Use o procedimento
definido no exercício 2. Construa o algoritmo
principal e faça uma chamada a este
procedimento.
Bibliografia
Orth, Afonso Inácio. Algoritmos e
Programação. Editora AIO. 2001.
Forbellone, A. e Eberspacher, H. Lógica
de Programação: A Construção de
Algoritmos e Estruturas de Dados.
Makron Books, São Paulo, 3ª edição.
2005.