Buscar

04. 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 43 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 43 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 43 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

Ju
d
so
n
 S
an
to
s 
S
an
ti
ag
o
FUNÇÕES
Programação de Computadores
 O que é uma função?
Visão matemática 
f : D  I
 É uma lei que associa elementos do conjunto D 
(domínio) a elementos do conjunto I (imagem)
 Exemplos:
 O domínio e a imagem definem uma interface para 
a função (sabemos o que fornecer e o que esperar 
dela, mesmo sem conhecermos a função)
Introdução
f(x)=2x+1 
f:RR
f(x)=7 
f:NN
1.1
2.0
2.5
3.2
5.0
6.0
D I
 O que é uma função?
Visão computacional
 Uma caixa preta que recebe uma entrada e 
retorna uma saída
Introdução
sqrt
Entrada 
Ex.: 64
Saída
Ex.: 8
Função da Linguagem C++
sqrt calcula a raiz quadrada de um número
Introdução
 Assim como na matemática, toda função em 
C++ tem uma interface
 No entanto a interface da função é definida 
através de tipos computacionais ao invés de 
conjuntos numéricos
 O tipo double é equivalente ao conjunto dos Reais
sqrt
Entrada 
Ex.: 64
Saída
Ex.: 8
sqrt: double  double
// exemplo do uso de funções
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
double area;
cout << "Digite a área da sua casa em metros quadrados: ";
cin >> area;
double lado;
lado = sqrt(area); // chamada da função sqrt
cout << "Isso é o equivalente a um quadrado com " << lado
<< "metros de lado." << endl;
system("pause"); // chamada da função system
return 0;
}
Introdução
Introdução
 Em C++ a interface de uma função é chamada 
de protótipo da função 
 Toda função deve ter seu protótipo definido por 
uma instrução de declaração
 O protótipo da função sqrt está definido no 
arquivo de inclusão cmath
#include <cmath>
// protótipo da função sqrt
double sqrt(double);
Introdução
 Para utilizar a função sqrt foi preciso:
 Incluir o arquivo de cabeçalho cmath
 Chamar a função dentro do programa:
lado = sqrt(area);
Argumento (valor) 
Passado para a função
Nome da função
Valor de retorno
é atribuído à variável
Introdução
 Uma chamada de função provoca um desvio 
na execução do programa
// retorna o valor 2.5 e o atribui para x
x = sqrt(6.25);
int main()
{
...
...
...
x = sqrt(6.25);
...
...
...
}
double sqrt(double)
{
...
...
...
...
...
...
return valor;
}
1
2
3
45
Função chamadora Função chamada
Introdução
 Além de um protótipo toda função precisa ter 
um corpo
 Para a função sqrt:
 O protótipo da função foi definido num arquivo de 
inclusão
 O corpo da função está num arquivo objeto/DLL 
previamente compilado e armazenado no sistema 
#include <cmath>
msvcr100d.dll
Introdução
 Ao contrário das funções matemáticas, em 
C++ as funções podem não retornar valor
system("pause");
Argumento (valor)
Passado para a função
Nome da função
system
Entrada 
"pause"
Introdução
 Uma função que não retorna valor executa 
uma tarefa sem retornar resultado
int main()
{
...
...
...
system("pause");
...
...
...
}
void system(char *)
{
...
...
...
...
...
...
...
}
1
2
3
45
Função chamadora Função chamada
Introdução
 Uma função que não retorna valor possui tipo 
de retorno void no seu protótipo
 Uma função com tipo de retorno void não pode ser 
atribuída a uma variável
x = system("pause"); // INVÁLIDO
void system(char *); // protótipo da função system
system
Entrada 
"pause"
Modularidade
 Para que servem as funções?
 Dividir o código em blocos
 A modularização de programas é a principal 
característica da programação estruturada
 Facilita a manutenção de programas grandes
 Encapsula a solução
 Cria uma interface 
double sqrt(double);
EntradaSaída
 Os programas em C++ são construídos a 
partir desses blocos chamados de funções
system
Modularidade
sqrt
main
Programa
Sistema 
Operacional
Modularidade
 Muitas funções já vem prontas em bibliotecas
fornecidas pela linguagem
 iostream: contém funções relacionadas a entrada 
e saída de dados como cout, cin e system
 cmath: contém funções matemáticas como sqrt
(raiz quadrada), pow (potência), sin (seno), cos 
(cosseno), tan (tangente), etc.
 Outras funções podem ser criadas pelo 
programador
Modularidade
 Para usar uma função é preciso:
 Fornecer um protótipo para a função
 Fornecer um corpo para a função
 Chamar a função
int main()
{
...
...
x = sqrt(6.25);
...
...
}
double sqrt(double)
{
...
...
...
...
...
...
return valor;
}
1
2
3
4
5
Função chamadora
Função chamada
Bibliotecas de Funções
 Ao usar uma função de biblioteca:
 O protótipo é obtido incluindo-se um arquivo de 
cabeçalho no programa
 O corpo da função já foi definido e pré-compilado 
num arquivo objeto/DLL 
 Resta apenas chamar a função
#include <iostream>
#include <cmath>
lado = sqrt(area);
system("pause");
Bibliotecas de Funções
 A biblioteca padrão da linguagem C/C++ 
possui mais de 140 funções predefinidas
 Não reinvente o que já existe
 Mesmo assim, muitas vezes é preciso 
escrever suas próprias funções
 Uma função definida pelo programador funciona 
da mesma forma que uma função de biblioteca
 A única diferença é que é preciso escrever o 
protótipo e o corpo da função
Criando Funções
 Para criar uma função é preciso:
Fornecer um protótipo para a função
 Definir a função (fornecer um corpo)
 Chamar a função
 Protótipo: define que informações a função 
recebe e que informações a função retorna
void simples(); // protótipo da função
Criando Funções
 Para criar uma função é preciso:
 Fornecer um protótipo para a função
Definir a função (fornecer um corpo)
 Chamar a função
 Definição: contém um conjunto de instruções que 
realiza a tarefa para a qual a função foi criada
// definição da função simples
void simples()
{
cout << "Eu sou uma função simples" << endl; 
}
Criando Funções
 Para criar uma função é preciso:
 Fornecer um protótipo para a função
 Definir a função (fornecer um corpo)
Chamar a função
 Chamada: invoca a execução da função a partir do 
programa principal, ou a partir de uma outra 
função
simples(); // chamada da função
Criando Funções
// simples.cpp – definindo, prototipando e chamando uma função
#include <iostream>
using namespace std;
void simples(); // protótipo da função
int main()
{
cout << "main() vai chamar a função simples():\n";
simples(); // chamada da função
system("pause"); 
return 0;
}
// definição da função
void simples()
{
cout << "Eu sou uma função simples" << endl; 
}
Definindo Funções
 A criação começa pela definição da função:
tipo nome(parâmetros)
{
instrução 1;
instrução 2;
...
instrução n;
return valor;
}
Corpo da função
Definição da função
Cabeçalho da função
Nome da função
Lista de parâmetros da funçãoTipo de retorno da função
Opcional (depende do tipo de retorno)
 Funções que não retornam valores são 
funções de tipo void:
 A lista de parâmetros especifica a quantidade 
e tipo dos dados passados para a função
void nome (parâmetros)
{ 
instruções;
return; // opcional
}
Definindo Funções
Tipo de retorno da função
Definindo Funções
 Funções sem valor de retorno são usadas 
para modularizar o programa:
 A chamada da função deve passar um valor inteiro
void tchau (int n)
{ 
cout << "Finalizando Sessão Número " << n;
cout << endl;
}
int main()
{
cout << "Encerrar sessão: ";
int sessao;
cin >> sessao;
tchau(sessao); // chamada da função
}
DefinindoFunções
 Funções que retornam valores têm a seguinte 
forma geral:
 O valor de retorno é obrigatório e pode ser uma 
constante, uma variável ou uma expressão
tipo nome (parâmetros)
{ 
instruções;
return valor; 
}
Tipo de retorno da função
Definindo Funções
 Funções com valor de retorno são muito 
usadas para encapsular cálculos:
 A chamada da função é substituída pelo retorno
double media(double a, double b)
{ 
// media aritmética entre a e b
double m = (a + b)/2;
return m;
}
int main()
{
double quant;
quant = media(12,8); // chamada da função
cout << "Resultado = " << quant << endl;
}
Definindo Funções
 Uma função pode ter vários return's mas 
apenas um valor de retorno
 Chamada da função:
int maior (int a, int b)
{ 
if (a > b)
return a;
else
return b;
}
int main()
{
cout << "Digite dois números: ";
int num1, num2;
cin >> num1 >> num2;
cout << "O maior deles = " << maior(num1,num2) << endl;
}
Múltiplas Chamadas
// flexao.cpp - definindo uma função
#include <iostream>
using namespace std;
void flexao(int); // protótipo da função flexao
int main()
{
flexao(3); // chama a função flexao
cout << "Escolha um número inteiro: ";
int cont;
cin >> cont;
flexao(cont); // chama flexao novamente
system("pause"); 
return 0;
}
void flexao(int n)
{
cout << "Faça " << n << " flexões." << endl;
}
Múltiplas Chamadas
 Saída do programa:
 Uma função pode ser chamada várias vezes 
 O exemplo chama flexao() duas vezes:
 Uma com o argumento sendo o valor 3
 Outra com o argumento sendo uma variável
Faça 3 flexões.
Escolha um número inteiro: 512
Faça 512 flexões.
Múltiplas Chamadas
 Na definição da função é preciso dar nome 
aos dados recebidos
 Os parâmetros de uma função são declarações de 
novas variáveis
void flexao(int n) // definição da função flexao
{
cout << "Faça " << n << " flexões." << endl;
}
void flexao(int); // protótipo da função flexao
...
Ainda Sobre Funções
 Ao contrário de linguagens como PASCAL, a 
linguagem C++ não permite a criação de uma 
função dentro de outra
int main()
{
void flexao(int n)
{
cout << "Faça " << n << " flexões." << endl;
}
flexao(3); // chama a função flexao
cout << "Escolha um número inteiro: ";
...
}
Ainda Sobre Funções
 A definição de várias funções é feita de forma 
seqüencial num arquivo
#include <iostream>
void flexao(int);
void abdominal(int);
int main()
{
...
return 0;
}
void flexao(int n) 
{
...
}
void abdominal(int n) 
{
...
}
Função Principal
Protótipos das funções
Função 1
Função 2
Ainda Sobre Funções
 Funções podem estar em arquivos diferentes
void flexao(int);
void abdominal(int);
#include <iostream>
#include "ginastica.h"
int main()
{
cout << "Fazendo Ginastica\n";
flexao(10);
abdominal(20);
return 0;
}
void flexao(int n)
{
...
}
void abdominal(int n)
{
...
}
// Arquivo principal:
// malhando.cpp
// Arquivo de inclusão:
// ginastica.h
// Arquivo fonte:
// ginastica.cpp
Ainda Sobre Funções
// converte metros em centímetros
#include <iostream>
using namespace std;
int converte(int); // protótipo da função
int main()
{
int num; 
cout << "Entre com a distância em metros: ";
cin >> num;
int centimetros = converte(num); // inicializando com uma função 
cout << num << " metros = ";
cout << centimetros << " centimetros." << endl; 
system("pause");
return 0;
}
int converte(int n) // definição da função
{ 
int val = 100 * n; 
return val; 
}
Ainda Sobre Funções
 Saída do programa:
 O programa usa cin para obter um valor para 
a variável val e este valor é passado para a 
função converte()
Entre com a distância em metros: 30
30 metros = 3000 centímetros.
cout << "Entre com a distância em metros: ";
cin >> val;
int centimetros = converte(val);
Ainda Sobre Funções
 Funções que tem retorno diferente de void
devem usar a instrução return para prover o 
valor de retorno e finalizar a função
int main() // definição da função main
{
... 
return 0;
}
int converte(int n) // definição da função converte
{
...
return val;
}
 Uma instrução de retorno pode conter uma 
expressão não trivial
 Pode-se usar uma função que retorna valor
no lugar de uma variável ou constante
int converte(int n)
{
return 100 * n;
}
int converte(int n)
{
int val = 100 * n;
return val;
}
Ainda Sobre Funções
int a = converte(10);
int b = 20 + converte(15);
cout << "O tamanho da mesa é " << converte(10) 
<< " centimetros." << endl;
Ainda Sobre Funções
 A diretiva using pode ser usada dentro ou 
fora da definição das funções
#include <iostream>
void flexao(int); 
int main() // definição da função main
{
using namespace std;
cout << "Escolha um número inteiro: ";
...
}
void flexao(int n) // definição da função flexao
{
using namespace std;
cout << "Faça " << n << " flexões." << endl;
}
Ainda Sobre Funções
 Programadores C++ tem muita flexibilidade 
na escolha de nomes para funções:
MinhaFuncao() minha_funcao() 
minhafuncao() minha_func() 
minhaFuncao() mf()
 Cada programador tem preferência por um 
estilo particular, todos estão corretos
 O importante é manter os nomes das funções 
padronizados no mesmo estilo
Ainda Sobre Funções
 Palavras-chave são o vocabulário de uma 
linguagem de programação
 Elas não podem ser usadas para dar nome a 
uma função ou variável
 Até o momento foram utilizadas as seguintes 
palavras chave: 
int void
double using
namespace return
Conclusão
 Um programa C++ consiste de um ou mais 
módulos chamados funções
 Programas começam a sua execução a partir 
da função main()
 Uma função consiste em:
 Um protótipo: define os tipos de valores recebidos 
e retornado pela função
 Um corpo: consiste em uma série de instruções 
entre um par de colchetes ({})
Conclusão
 Em C++ o programador pode:
 Usar funções pré-definidas de bibliotecas 
(como sqrt e system)
 Criar suas próprias funções
(como simples e converte)
 O uso de funções
 Facilita a manutenção de programas grandes
 Encapsula a solução
 Cria uma interface

Outros materiais