Buscar

Aula11 - Funções

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 53 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 53 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 53 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

ECT1203 Linguagem de Programação 
2014.2 
Prof. Caroline Rocha 
 
Aula 11 – Funções 
Universidade Federal do Rio Grande do Norte 
Escola de Ciências e Tecnologia 
Hora de silenciar o celular 
• Manter o celular sempre desligado/silencioso quando 
estiver em sala de aula 
• Nunca atender o celular em sala de aula 
Objetivo da Aula 
• Introduzir o conceito de funções em C++ 
• Motivar o uso de funções 
 
 
 
Uma função é ... 
Um conjunto de comandos agrupados em um bloco, 
destinado a realizar uma tarefa particular, que 
recebe um nome e através deste pode ser ativado. 
Será que isso é tão novo assim? 
 
Exemplos de funções 
• sqrt(valor) 
• pow(x,2) 
• rand() 
• cos(ang) 
 
 
OBS: cin e cout são objetos, a compreensão de 
objetos está fora do escopo da nossa disciplina. 
 
Curiosidade: Alguém sabe como o computador 
calcula o cosseno de um ângulo? 
Exemplo: cos(68) 
Resposta: Polinômio de Mclaurin 
Pergunta: eu preciso conhecer o polinômio de Mclaurin 
para usar a função cos() nos meus programas? 
Para que servem as funções? 
• Dividir um problemas maior em vários menores, simplificando 
e organizando o código; 
• Reduzir o tamanho do programa; 
• Permitir reaproveitamento de código; 
• Permitir a alteração de um trecho de código de uma forma 
mais rápida; 
• Para que os blocos do programa não fiquem grandes demais e 
mais difíceis de entender; 
• Separar o programa em partes(blocos) que possam ser 
logicamente compreendidos de forma isolada; 
 ... 
 
A função pow(x,y) 
Como será o algoritmo da função pow()? 
 
pow(2,3) = 23 = 2*2*2 
pow(5,4) = 54 = 5*5*5*5 
pow(x,2) = x2 = x*x 
pow(a,b) = ab = a multiplicado por ele mesmo, uma 
quantidade b de vezes 
 
 
int prod = 1; 
for(int i=0; i<y; i++){ 
 prod *= x; 
} 
 
Como o compilador faz para executar o algoritmo acima 
quando encontra pow(x,y) no código?? 
A função pow(x,y) 
Como o compilador raciocina 
pow()? Não conheço esse 
comando... Depois dele tem 
algo entre parênteses, então 
é uma função!! 
#include <iostream> 
#include <cmath> 
 
using namespace std; 
 
int main ( ) 
{ 
 int a, b, result; 
 a = 2; 
 b = 3; 
 result = pow(a,b); 
 cout << result; 
 return 0; 
} 
Como o compilador raciocina 
Será uma função criada pelo 
usuário?? Não é. 
#include <iostream> 
#include <cmath> 
 
using namespace std; 
 
int main ( ) 
{ 
 int a, b, result; 
 a = 2; 
 b = 3; 
 result = pow(a,b); 
 cout << result; 
 return 0; 
} 
Como o compilador raciocina 
Será que está na biblioteca 
iostream? Não! 
#include <iostream> 
#include <cmath> 
 
using namespace std; 
 
int main ( ) 
{ 
 int a, b, result; 
 a = 2; 
 b = 3; 
 result = pow(a,b); 
 cout << result; 
 return 0; 
} 
Como o compilador raciocina 
Está na biblioteca cmath? 
Se não estiver lá, não tem 
em lugar nenhum e esse 
programa tem um erro. 
#include <iostream> 
#include <cmath> 
 
using namespace std; 
 
int main ( ) 
{ 
 int a, b, result; 
 a = 2; 
 b = 3; 
 result = pow(a,b); 
 cout << result; 
 return 0; 
} 
Como o compilador raciocina 
 
int pow(int x, int y){ 
 int prod = 1; 
 for(int i=0; i<y; i++) 
 prod = prod * x; 
 return prod; 
} 
Processamento Entrada Saída 
Qual é a entrada e 
a saída? 
Como o compilador raciocina 
 
int pow(int x, int y){ 
 int prod = 1; 
 for(int i=0; i<y; i++) 
 prod = prod * x; 
 return prod; 
} 
Quem são eles no 
programa? Processamento 
base 
expoente 
exponencial 
Como o compilador raciocina 
Quem são x e y? 
Onde devo armazenar 
prod? 
#include <iostream> 
#include <cmath> 
using namespace std; 
int main ( ){ 
 int a, b, result; 
 a = 2; 
 b = 3; 
 result = pow(a,b); 
 cout << result; 
 return 0; 
} int pow(int x, int y){ 
 int prod = 1; 
 for(int i=0; i<y; i++) 
 prod = prod * x; 
 return prod; 
} 
Como o compilador raciocina 
x é a 
y é b 
prod é result 
#include <iostream> 
#include <cmath> 
using namespace std; 
int main ( ){ 
 int a, b, result; 
 a = 2; 
 b = 3; 
 result = pow(a,b); 
 cout << result; 
 return 0; 
} int pow(int x, int y){ 
 int prod = 1; 
 for(int i=0; i<y; i++) 
 prod = prod * x; 
 return prod; 
} 
Chamando uma função 
Chamar uma função é o meio pelo qual solicitamos que 
o programa desvie o controle, passe a executar as 
instruções da função e, ao término desta, volte o 
controle para a posição seguinte à da chamada à função. 
• A chamada deve respeitar a definição da função: nome, 
entrada e saída. 
• A sintaxe da instrução de chamada é a mesma tanto para 
funções escritas por outros programadores como para as 
que escrevemos. 
Chamada a função e controle de fluxo 
#include <iostream> 
#include <cmath> 
using namespace std; 
int main ( ){ 
 int a, b, result; 
 a = 2; 
 b = 3; 
 result = pow(a,b); 
 cout << result; 
 return 0; 
} 
int pow(int x, int y){ 
 int prod = 1; 
 for(int i=0; i<y; i++) 
 prod = prod * x; 
 return prod; 
} 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
Definindo sua própria função 
• A primeira linha é o cabeçalho da definição da função. 
• tipo_da_função é o tipo do valor retornado por meio do 
comando return. 
tipo_da_função nome_da_função (lista de parâmetros) 
{ 
 corpo da função 
} 
int max(int a, int b){ 
 if(a > b) 
 return a; 
 else 
 return b; 
} 
Definindo sua própria função 
• A lista de parâmetros, também chamada de lista de 
argumentos, é opcional. A função pode não ter entrada 
(void). 
 
tipo_da_função nome_da_função (lista de parâmetros) 
{ 
 corpo da função 
} 
int max(int a, int b){ 
 if(a > b) 
 return a; 
 else 
 return b; 
} 
O comando return 
Sintaxe do 
comando return: 
A instrução return expressão; tem os seguintes 
efeitos: 
1) avaliação da expressão 
2) conversão automática do resultado da expressão para 
o tipo da função 
3) retorno do resultado 
4) término da execução da função e retorno do controle 
para a instrução seguinte do código de chamada 
• return; 
• return expressão; 
• return (expressão); 
O comando return 
Função com um 
comando return 
Função com mais 
de um comando 
return 
int le_numero(void){ 
 int numero; 
 cout <<"Digite um numero inteiro: "; 
 cin >> numero; 
 return numero; 
} 
 
 
 
int max(int a, int b){ 
 if(a > b) 
 return a; 
 else 
 return b; 
} 
O comando return 
• O valor de retorno é obtido através de uma chamada à 
 função. Por exemplo: 
x = le_numero(); 
y = le_numero(); 
O comando return 
• Existem funções que não retornam nenhum valor. 
• Essas funções possuem tipo de retorno void. 
 
void imprime(int inicio, int fim){ 
 for(int i=inicio; i<=fim; i++) 
 cout << i << endl; 
} 
O comando return 
• Funções do tipo void podem ter comando return sem 
expressão, servindo para terminar a execução da função. 
• Em funções do tipo void, o comando return não é 
obrigatório. 
• Uma função sem comando return termina quando 
encontra a chave de fechamento. 
• Uma função não pode ser chamada sem antes ter sido 
declarada. 
• No exemplo, temos a declaração das funções: 
Declaração de uma função 
A declaração de uma função, dita protótipo da função, 
é uma instrução, geralmente colocada no iníciodo 
programa, que estabelece o tipo da função e os 
argumentos que ela recebe. 
• a função le_numero() é do tipo int e 
não recebe argumentos 
• a função max() é do tipo int e recebe 
como argumento dois valores do tipo 
int 
int le_numero(void); 
 
int max(int a, int b); 
Funções definidas pelo programador 
• Em geral, o nome de uma função aparece em três 
lugares em um programa: 
1) na declaração (protótipo/assinatura) 
2) na definição 
3) na chamada 
 
Declaração de 
funções (protótipos) 
Chamadas de funções 
Definição de funções 
#include <iostream> 
using namespace std; 
 
int le_numero(void); 
int max(int a, int b); 
 
int main(){ 
 int x, y; 
 x = le_numero(); 
 y = le_numero(); 
 cout<<"Maior valor: “<< max(x,y); 
 return 0; 
} 
 
int le_numero(void){ 
 int numero; 
 cout<<"Digite um numero inteiro:"; 
 cin >> numero; 
 return numero; 
} 
 
int max(int a, int b){ 
 if(a > b) 
 return a; 
 else 
 return b; 
} 
Observações 
1) No protótipo de uma função, o seu tipo, o número e o 
tipo dos parâmetros devem corresponder àqueles do 
cabeçalho da definição. 
2) O nome dos parâmetros podem ser omitidos na 
declaração. 
3) Se uma função não tem parâmetros, pode-se declarar a 
lista de parâmetros como (void) ou simplesmente () 
Outras observações 
1) Se uma função é definida antes da sua primeira 
chamada, esta não precisa ser declarada. 
2) O comando return pode retornar somente um único 
valor. 
3) Se uma função não tem valor de retorno, deve-se 
indicar o tipo de retorno como void. 
4) Não se pode definir funções dentro de uma outra 
função. 
 
 
Parâmetros de uma função 
• São visíveis apenas dentro da função: são criadas na 
entrada e destruídas na saída da função. 
• No momento da chamada de uma função, o número e o 
tipo dos parâmetros devem corresponder à declaração 
da função. 
• Os parâmetros são convertidos automaticamente para os 
tipos da declaração antes de serem passados à função. 
Variáveis locais que são inicializadas pelos valores 
passados na chamada da função. 
Passagem de parâmetros 
• Em geral, pode-se passar parâmetros para funções de 
duas maneiras: 
1) Por valor: o valor do argumento é copiado para o 
parâmetro e as alterações feitas no parâmetro não 
tem efeito sobre a variável usada na chamada da 
função 
2) Por referência: o endereço de uma variável copiado 
para o parâmetro, assim as mudanças feitas no 
parâmetro afetam a variável usada na chamada da 
função 
Passagem de parâmetros por valor 
o valor de n é copiado 
para o parâmetro x da 
função quadrado() 
na atribuição, apenas 
a variável local x é 
modificada 
a variável n, usada para 
chamar quadrado(), 
ainda tem o valor 10 
Passagem de parâmetros por valor 
Passagem de parâmetros por referência 
A referencia de n é 
passado para o 
parâmetro x da função 
quadrado() 
na atribuição, a 
variável referenciada 
por x é modificada 
a variável n, usada para 
chamar quadrado(), 
teve seu valor 
modificado 
Operador unário de 
referência & 
Escopo de variáveis 
• As variáveis podem ser declaradas em três lugares: 
1) dentro de funções variáveis locais 
2) como parâmetros de funções parâmetros 
formais 
3) fora de todas as funções variáveis globais 
O escopo de uma variável é o bloco de código 
onde esta variável é válida (visível). 
Variáveis locais 
void funcao1(void){ 
 int x; 
 x = -10; 
} 
 
void funcao2(void){ 
 int x, y; 
 x = 2; 
 y = 18; 
} 
• São visíveis apenas dentro de seu 
próprio bloco de código. 
 Um bloco de código é 
delimitado por { }. 
 
• O espaço de memória usado pela 
variável é liberado na saída do 
bloco de código. 
 
Variáveis globais 
• São visíveis no programa inteiro. 
• O espaço de memória fica reservado 
durante toda a execução do 
programa. 
Variáveis globais 
 São úteis quando o mesmo dado é usado em 
muitas funções 
 Ocupam espaço de memória mesmo quando 
desnecessárias 
 Podem levar a erros no programa 
 
Variáveis globais x locais 
Qual a diferença entre as funções? 
int produto(int x, int y) 
{ 
 return (x * y); 
} int x, y; 
int produto(void) 
{ 
 return (x * y); 
} 
Variáveis globais x locais 
int produto(int x, int y) 
{ 
 return (x * y); 
} int x, y; 
int produto(void) 
{ 
 return (x * y); 
} 
Qual a diferença entre as funções? 
Tipos de variáveis 
• globais: são variáveis definidas fora de qualquer função. Por 
este motivo elas são visíveis por todas as funções do 
programa. A sua vida vai do início do programa até o fim dele. 
• estáticas: são variáveis definidas dentro de uma função com 
palavra static antes do tipo da variável. São visíveis apenas 
dentro da função em que foram definidas. A sua vida vai do 
início do programa até o fim dele 
• locais: são variáveis definidas dentro de uma função. Por este 
motivo, elas são visíveis apenas dentro da função em que 
foram definidas. Ao contrário das variáveis estáticas, as 
variáveis locais começam a existir quando uma função começa 
a ser executada e deixam de existir quando a função termina. 
Tipos de variáveis 
• globais: são variáveis definidas fora de qualquer função. Por 
este motivo elas são visíveis por todas as funções do 
programa. A sua vida vai do início do programa até o fim dele. 
• estáticas: são variáveis definidas dentro de uma função com 
palavra static antes do tipo da variável. São visíveis apenas 
dentro da função em que foram definidas. A sua vida vai do 
início do programa até o fim dele. 
• locais: são variáveis definidas dentro de uma função. Por este 
motivo, elas são visíveis apenas dentro da função em que 
foram definidas. Ao contrário das variáveis estáticas, as 
variáveis locais começam a existir quando uma função começa 
a ser executada e deixam de existir quando a função termina. 
Tipos de variáveis 
• globais: são variáveis definidas fora de qualquer função. Por 
este motivo elas são visíveis por todas as funções do 
programa. A sua vida vai do início do programa até o fim dele. 
• estáticas: são variáveis definidas dentro de uma função com 
palavra static antes do tipo da variável. São visíveis apenas 
dentro da função em que foram definidas. A sua vida vai do 
início do programa até o fim dele. 
• locais: são variáveis definidas dentro de uma função. Por este 
motivo, elas são visíveis apenas dentro da função em que 
foram definidas. Ao contrário das variáveis estáticas, as 
variáveis locais começam a existir quando uma função começa 
a ser executada e deixam de existir quando a função termina. 
Tipos de variáveis 
• parâmetros: funcionam exatamente como variáveis locais, 
tanto com relação a visibilidade como com relação a escopo. 
A única diferença é que elas recebem valores ou endereços 
do programa principal. 
• variáveis dinâmicas: dinâmicas são criadas no heap e têm 
sua vida determinada pela alocação e a desalocação de seu 
espaço. Sua visibilidade está relacionada com seu endereço 
de memória. 
Tipos de variáveis 
• parâmetros: funcionam exatamente como variáveis locais, 
tanto com relação a visibilidade como com relação a escopo. 
A única diferença é que elas recebem valores ou endereços 
do programa principal. 
• variáveis dinâmicas: dinâmicas são criadas no heap e têm 
sua vida determinada pela alocação e a desalocação de seu 
espaço. Sua visibilidade está relacionada com seu endereço 
de memória. 
LIVRE 
Gerenciamento de memória em C++ 
Código do 
programa 
Variáveis globais e 
estáticas 
Heap 
Pilha 
• Quando uma função é chamada, um 
espaço é alocado na pilha para esta 
função,espaço este serve para guardar 
as variáveis locais e parâmetros da 
função. 
• Quando uma função é terminada e o 
programa volta à função chamadora, a 
área de pilha desta função é 
desalocada. Assim, suas variáveis locais 
e parâmetros desaparecem. 
Exercício 
Faça um programa que calcula a soma do n primeiros 
números primos, onde n é fornecido pelo usuário. 
#include <iostream> 
#include <cmath> 
using namespace std; 
 
int primo(int); 
int soma_primos(int); 
 
int main(){ 
 int n; 
 cout << “Digite um número não-negativo: ”; 
 cin >> n; 
 cout << “Soma dos ” << n << “ primeiros primos: ” << soma_primos(n); 
 return 0; 
} 
 
int primo(int m){ 
 int n = (int) sqrt(m); 
 for(int i=2; i<=n; i++) 
 if(m%i == 0) return 1; 
 return 0; 
} 
 
int soma_primos(int n){ 
 int soma = 0, cont = 0, m = 2; 
 while(cont < n){ 
 if( primo(m) ){ 
 soma += m; cont++; 
 } 
 m++; 
 } 
 return soma; 
} 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
32 
Exercício 
Faça um programa que calcula as raízes de uma equação do 
segundo grau , onde a, b e c são números 
reais fornecidos pelo usuário. 
Observação: use funções para calcular e imprimir o 
resultado. 
)0( 2  cbxax

Outros materiais