Procedimentos e
Funções
Motivação

Procedimentos e Funções promovem o
reuso de código eliminando a necessidade
de replicação

Facilitam a manutenção, legibilidade
extensão dos programas
Motivação Exemplo 1
Algoritmo testeSemFunção ()
início
inteiro base=0
ler base
inteiro fat=1
inteiro cont=1
para (cont<base;cont=cont+1) faça
fat = fat*cont
fimpara
base=fat
Motivação Exemplo 1
inteiro expoente =0
ler expoente
fat=1
cont=1
para (cont<expoente;cont=cont+1) faça
fat = fat*cont
fimpara
expoente=fat
Motivação Exemplo 1
inteiro divisor =0
ler divisor
fat=1
cont=1
para (cont<divisor;cont=cont+1) faça
fat = fat*cont
fimpara
divisor=fat
Motivação Exemplo 1
inteiro x =0
ler x
fat=1
cont=1
para (cont<x;cont=cont+1) faça
fat = fat*cont
fimpara
x=fat
Motivação Exemplo 1
imprimir "fatorial base:"+base
imprimir "fatorial expoente:"+expoente
imprimir "fatorial fatorial:"+fatorial
imprimir "fatorial x:"+x
Fim
Motivação

Foi necessário replicar o código para
calcular o fatorial quatro vezes dentro do
código
Será preciso replicar este código sempre
que quisermos calcular o fatorial de um
número?
 Há alguma maneira mais eficiente e
elegante de se fazer isso?

Motivação

Uso de Procedimentos/Funções

Evitam replicação desnecessária de
código promovendo assim o reuso
Motivação Exemplo 2
Algoritmo testeComFunção ()
início
inteiro base=0
ler base
base = fatorial(base)
inteiro expoente =0
ler expoente
expoente = fatorial (expoente)
Motivação Exemplo 2
inteiro fatorial =0
ler fatorial
fatorial = móddulo (fatorial)
inteiro x =0
ler x
x=fatorial(x)
imprimir "fatorial base:"+base
imprimir "fatorial expoente:"+expoente
imprimir "fatorial fatorial:"+fatorial
imprimir "fatorial x:"+x
Fim
Motivação Exemplo 2
inteiro fatorial(inteiro x)
início
inteiro result=1
inteiro cont=1
para (cont<x;cont=cont+1) faça
resut = result*cont
fimpara
retorne result
fim
Motivação

Redução clara no tamanho do código
 Exemplo
1 = 5 slides
 Exemplo 2 = 3 slides

Aumento da legibilidade – todas as
funcionalidades do programa estão em um
único slide
Motivação

Possível Manutenção - o uso de
procedimentos e funções facilitam a
manutenção do código

Imagine que houvesse um erro no
exemplo 1 no trecho de atualização dos
contadores. A correção teria que ser
propagada por todo o código
Motivação

No exemplo 2 a manutenção só teria que
ser feita em um ponto, ou seja, no função
fatorial
Motivação - Reuso

No exemplo 1, sempre que necessário
calcular um fatorial de um número uma
nova réplica do código de cálculo deverá
ser feita

No exemplo 2, é necessário apenas uma
chamada à função
Sintaxe

Procedimentos
Procedimento nome(<lista parâmetros>)
início corpo fim

Funções
tipo nome(<lista de parâmetros>)
início corpo fim
Sintaxe – lista de parâmetros

Pode ser uma lista vazia – nesse caso, a
função não recebe dados de entrada

Pode um ou mais elementos seguindo a
sintaxe
tipo par1, tipo par2, ..., tipo parFinal
Sintaxe - Tipos

Qualquer tipo básico da linguagem –
Inteiro, Real, Texto, etc

Qualquer tipo definido na linguagem,
string, vector, iterator, etc

Qualquer tipo definido pelo programador
Sintaxe - Nomes

Os nomes, tanto de funções como de
parâmetros devem ser identificadores
válidos

Eles devem começar por um caractere (az, A-Z) e podem ser seguidos de um ou
mais caractere ou dígitos(a-z,A-Z,0-9,_)
Sintaxe - Nomes
Não podem conter espaços em branco
Inteiro calcular fatorial(Inteiro x )

 Erro
de compilação
Inteiro calcular_fatorial(Inteiro x )
 Correto
Inteiro calcularFatorial(Inteiro x )
 Correto
Dicas

O nome de uma função deve expressar
claramente o que ela faz

A dificuldade em definir o nome de uma
função pode indicar que ela deve ser
dividida em mais de uma função
Sintaxe - Corpo

Corpo de um procedimento é um conjunto de comandos
válidos na linguagem

Podemos declarar variáveis, fazer comandos de entrada
e saída

Funções e procedimentos podem usar outras funções e
procedimentos previamente declarados

Funções e procedimentos não podem declarar dentro de
seu corpo outras funções e procedimentos
Sintaxe

Procedimentos
Procedimento nome(<lista parâmetros>)
início corpo fim

Funções
tipo nome(<lista de parâmetros>)
início corpo fim
Sintaxe - Retorno

Procedimentos não possuem em sua
assinatura nenhum tipo, que significa que
esta função não retorna nenhum valor

Funções necessariamente possuem um
tipo de retorno, que pode ser qualquer um
dos mencionados anteriormente
Sintaxe - Retorno
Inteiro calcularAreaRetangulo (Inteiro base,
Inteiro alt)

Esta assinatura indica que a função
calcularAreaRetangulo recebe dois
parâmetros Inteiros e retorna um valor
inteiro.
Sintaxe - Retorno

A presença de um tipo de retorno indica
que ao terminar sua execução uma função
deve retornar um valor do tipo de retorno
especificado

Assim, uma função que possui um tipo de
retorno Inteiro deve retornar um valor
Inteiro, Lógico um valor lógico e assim
sucessivamente
Sintaxe - Retorno
Inteiro calcularAreaRetangulo(Inteiro base, Inteiro alt)
início
Inteiro area=base * alt
retorne area
fim
Sintaxe - Assinatura

Em algumas linguagens de programação,
entre elas c++, não é possível fazer uma
chamada para uma função antes da
declaração dela

No entanto, por questões organizacionais,
pode não ser Interessante definir uma
função em um determinado ponto do
código
Sintaxe - Assinatura

Suponha que você quer manter suas
funções em ordem alfabética

Suponha que, por clareza, você quer que
duas funções fiquem próximas, por
exemplo funções de entrada e saída
Sintaxe - Assinatura

Como resolver situações como as
expostas anteriormente?

A resposta é a declaração da assinatura
da função

A assinatura permite que se utilize uma
função antes de sua declaração
Sintaxe - Assinatura
Inteiro fatorial(inteiro x);
Algoritmo principal()
Início
Inteiro base=0
ler base
base = fatorial(base)
Sintaxe - Assinatura
Inteiro fatorial(inteiro x);
Algoritmo principal()
Início
Inteiro base=0
ler base
base = fatorial(base)
Assinatura
Uso

Como usar uma função?

Basta apenas fazer uma chamada para
função
Uso
Inteiro calcularAreaRetangulo(Inteiro base, Inteiro alt);
Procedimento main()
início
Inteiro base =2
Inteiro alt = 3
Inteiro result = calcularAreaRetangulo(base, alt)
imprimir “o resultado é ” + result
fim
Uso
Inteiro calcularAreaRetangulo(Inteiro base, Inteiro alt);
Procedimento main()
início
Inteiro b =2
Inteiro t = 3
Inteiro result = calcularAreaRetangulo(b, t)
imprimir “o resultado é ” + result
fim
Uso
Inteiro calcularAreaRetangulo(Inteiro base, Inteiro alt);
Procedimento main()
início
Inteiro base =2
Real alt = 3
Inteiro result = calcularAreaRetangulo(base, alt)
imprimir “o resultado é ” + result
fim
Uso
Inteiro calcularAreaRetangulo(Inteiro base, Inteiro alt);
Procedimento main()
início
Inteiro base =2
Real alt = 3
Inteiro intAlt=(Inteiro)alt
Inteiro result = calcularAreaRetangulo(base, intAlt)
imprimir “o resultado é ” + result
fim
Como Funciona?

Ao iniciar o programa, o SO tem o endereço de
todas as funções definidas

Ao encontrar uma chamada de
função/procedimento, o fluxo do programa é
desviado para o a função

Ao terminar a execução da função, o fluxo
retorna para o ponto imediatamente após o
ponto onde a função foi chamada
Como Funciona?
Algoritmo testeComFunção ()
início
inteiro base=0
ler base
base = fatorial(base)
inteiro expoente =0
ler expoente
expoente = fatorial (expoente)
Como Funciona?
Algoritmo testeComFunção ()
início
inteiro base=0
ler base
base = fatorial(base)
inteiro expoente =0
ler expoente
expoente = fatorial (expoente)
Como Funciona?
Algoritmo testeComFunção ()
início
inteiro base=0
ler base
base = fatorial(base)
inteiro expoente =0
ler expoente
expoente = fatorial (expoente)
Como Funciona?
Algoritmo testeComFunção ()
início
inteiro base=0
ler base
base = fatorial(base)
inteiro expoente =0
ler expoente
expoente = fatorial (expoente)
inteiro fatorial(inteiro x)
início
inteiro result=1
inteiro cont=1
para (cont<x;cont=cont+1) faça
resut = result*cont
fimpara
retorne result
fim
Como Funciona?
Algoritmo testeComFunção ()
início
inteiro base=0
ler base
base = fatorial(base)
inteiro expoente =0
ler expoente
expoente = fatorial (expoente)
inteiro fatorial(inteiro x)
início
inteiro result=1
inteiro cont=1
para (cont<x;cont=cont+1) faça
resut = result*cont
fimpara
retorne result
fim
Como Funciona?
Algoritmo testeComFunção ()
início
inteiro base=0
ler base
base = fatorial(base)
inteiro expoente =0
ler expoente
expoente = fatorial (expoente)
inteiro fatorial(inteiro x)
início
inteiro result=1
inteiro cont=1
para (cont<x;cont=cont+1) faça
resut = result*cont
fimpara
retorne result
fim
Como Funciona?
Algoritmo testeComFunção ()
início
inteiro base=0
ler base
base = fatorial(base)
inteiro expoente =0
ler expoente
expoente = fatorial (expoente)
Variáveis Locais

Funções permitem a definição de
variáveis
Variáveis Locais

Funções permitem a definição de
variáveis
Inteiro calcularAreaRetangulo(Inteiro base, Inteiro alt)
Início
Inteiro area=base * alt;
return area;
Fim
Variáveis Locais

Funções permitem a definição de
variáveis

As variáveis declaradas dentro das
funções só tem validade dentro destas
funções
Variáveis Locais

Funções permitem a definição de variáveis

As variáveis declaradas dentro das funções só
tem validade dentro destas funções

Variáveis declaradas dentro de funções são
chamadas variáveis automáticas pois são
criadas e destruídas sempre que a função para
executada
Como Funciona?

Mecanismo é chamado pilha de execução
 A pilha
de execução está vazia
 Ao iniciar a execução de um bloco (início...
fim), as variáveis são empilhadas à medida
em que são criadas;
 Ao final de um bloco, essas variáveis são
desempilhadas, liberando espaço na
memória.
Exemplo
Inteiro calcularAreaRetangulo(Inteiro base, Inteiro alt)
Início
Inteiro area=base * alt;
return area;
Fim
area
Início da função
Durante a Função
Depois da Função
Variáveis Locais x Globais

É possível declarar variáveis locais com o
mesmo nome de variáveis globais

Nestes caso, a variável local “esconde” a
variável global
Inteiro nota
procedimento funcao()
Início
Inteiro nota;
/* Neste ponto, nota é variável local*/
Fim
Revisão
Porquê usar funções
 Sintaxe
 Como usar funções
 Como funciona a chamada de funções
 Definição de variáveis locais
 Execução da pilha de execução

Próximos Passos

Variações nas passagens de parâmetro
(valor, referência, limitações)

Recursão
Exercícios
Criar uma função que receba as
coordenadas x,y e z de dois vetores e
calcule o produto escalar destes 2 vetores
 Criar uma função que calcule a área de
um circulo que receba o raio como
parâmetro
 Criar funções que calculem a área de um
triangulo( parâmetros a serem definidos)

Download

Procedimentos e Funções