Buscar

Bac004 - Parte 5 (Funções)

Prévia do material em texto

BAC004-Informática-Teórica-Fabiana C Guedes 1
Funções
BAC004-Informática-Teórica-Fabiana C Guedes 2
Funções
� Uma função é um conjunto de instruções 
projetadas para cumprir uma tarefa específica e 
agrupadas numa unidade com um identificador 
próprio.
� A principal razão para usar funções é a de dividir a 
tarefa original em módulos que simplificam e 
organizam o programa como um todo.
� Outra razão é reduzir o tamanho do programa. 
� Qualquer seqüência de instruções que se repita no 
programa é candidata a ser uma função.
BAC004-Informática-Teórica-Fabiana C Guedes 3
Funções
� Benefícios:
� Manutenção simples – módulos independentes;
� Elaboração e testes em separado;
� Reutilização do módulo em outros programas.
� Objetivos:
� Repetição de código;
� Dividir e estruturar melhor um programa;
� Aumentar a legibilidade de um programa.
BAC004-Informática-Teórica-Fabiana C Guedes 4
Funções
� Em C++, um programa pode conter uma ou 
mais funções, das quais uma delas deve ser 
main().
� Chamar (ou ativar) uma função é o meio 
pelo qual é solicitado ao programa que 
desvie o fluxo de controle de execução para 
a função, execute suas instruções e depois 
volte à instrução seguinte à da chamada a 
função.
BAC004-Informática-Teórica-Fabiana C Guedes 5
Funções
� As funções permitem ao programador 
modularizar um programa. 
� As funções são módulos que podem 
receber valores externos, 
chamados parâmetros ou 
argumentos, e também podem 
retornar um valor produzido por ela 
chamado retorno. 
BAC004-Informática-Teórica-Fabiana C Guedes 6
Funções
� Cada função deve se limitar a realizar 
uma tarefa simples e bem-definida e o 
nome da função deve expressar 
efetivamente aquela tarefa. 
� Isto promove a reutilização do 
software.
01/25/13
Funções
• Sintaxe de Definição de uma função
01/25/13
Passagem de 
Parâmetros e Sem 
Retorno
• Tipo mais simples de função em C/C++ 
possui a sintaxe representada na figura:
01/25/13
Passagem de 
Parâmetros e Sem 
Retorno
• Esta função é simples pois não recebe 
nenhuma informação no momento de 
sua chamada (parâmetros) e também 
não retorna nenhum valor para quem a 
chamou. 
• A forma de identificar que a função não 
retorna nenhuma informação é 
utilizando o tipo de retorno como void. 
01/25/13
Passagem de 
Parâmetros e Sem 
Retorno
• A chamada de uma função é o meio pelo 
qual o programa é solicitado que desvie o 
controle e passe para a definição da função, 
execute suas instruções e depois volte à 
instrução seguinte a da chamada.
• Chama-se uma função pelo seu nome 
seguido de abertura de parênteses, nenhum 
ou mais parâmetros sem os tipos, e o 
fechamento de parêntese. 
Introdução à Computação - Aulas Laboratório -
Fabiana Costa Guedes
11
Funções Sem Passagem de 
Parâmetros e Sem Retorno
� Os () em uma chamada de função são 
um operador de C++. 
� Eles fazem com que a função seja 
chamada. 
� Esquecer os () em uma chamada de 
função que não aceita argumentos não 
é um erro de sintaxe, mas a função 
não será invocada.
01/25/13
Passagem de 
Parâmetros e Sem 
Retorno
//PrgC023.cpp - Programa Exemplo Função Soma
#include<iostream>
using namespace std;
void soma(){
int n1,n2, s;
cout<<"Digite o primeiro numero: "<<endl;
cin>>n1;
cout<<"Digite o segundo numero: "<<endl;
cin>>n2;
s = n1 + n2;
cout<<"\n Soma = "<<s;
}
int main(){
soma(); 
return 0;
}
Função Soma
Sem 
Retorno
Declaração de Variáveis – Só existem dentro da função soma.
Chamada da 
Função.
BAC004-Informática-Teórica-Fabiana C Guedes 13
Funções Sem Passagem de 
Parâmetros e Sem Retorno
� Todas as variáveis declaradas em 
definições de função são variáveis 
locais – elas só são conhecidas na 
função na qual são definidas. 
� No teste de mesa, faz um teste para 
cada função, mostrando o escopo das 
variáveis, ou seja, o local onde cada 
variável existe durante a execução.
01/25/13
Passagem de 
Parâmetros e Sem 
Retorno
• No ProgC023.cpp o código da função foi 
definido antes da função main. 
• Em C/C++ também é possível escrever 
funções depois da função main, desde que 
se defina o protótipo da função antes da 
função main.
• O protótipo da função tem a mesma forma 
de definição da função, exceto por terminar 
com ponto-e-vírgula após o fechamento do 
parêntese.
01/25/13
Passagem de 
Parâmetros e Sem 
Retorno
//ProgC024.cpp - Uso do Protótipo em funções
#include<iostream>
using namespace std;
void soma(); 
int main(){
soma();
return 0;
}
void soma(){
int n1,n2, s;
cout<<"Digite o primeiro numero: "<<endl;
cin>>n1;
cout<<"Digite o segundo numero: "<<endl;
cin>>n2;
s = n1 + n2;
cout<<"\n Soma = "<<s;
}
Protótipo da Função Soma
Função Principal
Chamada da Função Soma
Função Soma
01/25/13
Passagem de 
Parâmetros e Sem 
Retorno
• O segundo tipo de função é 
representado por aquelas que recebem 
valores no momento em que são 
chamadas (parâmetros) e não retorna 
valor para quem as chamou (void). 
� As comunicações entre os módulos 
deverá ser realizada por meio de 
vínculos, utilizando-se objetos globais 
ou transferência de parâmetros.
01/25/13
Passagem de 
Parâmetros e Sem 
Retorno
01/25/13
Passagem de 
Parâmetros e Sem 
Retorno
• Os parâmetros da função são variáveis 
locais, portanto, podem ser usados dentro 
da função. 
• Eles são usados como um meio para 
comunicação entre as funções pois recebem 
(ou retornam) valores de outras funções. 
• A lista de parâmetros é uma lista separada 
por vírgulas, contendo as declarações dos 
parâmetros recebidos pela função quando 
ela é executada.
Introdução à Computação - Aulas Laboratório -
Fabiana Costa Guedes
19
Funções Com Passagem de 
Parâmetros e Sem Retorno
� É um erro de sintaxe não declarar o 
tipo para cada parâmetro da função, 
mesmo que sejam do mesmo tipo. 
� Por exemplo, declarar int A, B em vez 
de int A, int B geraria um erro, porque 
os tipos são obrigatórios para cada 
parâmetro da lista de parâmetros.
01/25/13
Passagem de 
Parâmetros e Sem 
Retorno
//ProgC25.cpp - Função com passagem de parâmetros
#include<iostream>
using namespace std;
void soma(int n1, int n2){
int s;
s = n1 + n2;
cout<<"\n Soma = "<<s;
}
int main(){
int numero1, numero2;
cout<<"Digite o primeiro numero: "<<endl;
cin>>numero1;
cout<<"Digite o segundo numero: "<<endl;
cin>>numero2;
soma(numero1,numero2); 
return 0;
}
Função Soma – com passagem de parâmetros
Parâmetros da Função Soma
Variável local da função soma. Só é 
reconhecido dentro de Soma
Variáveis locais à função main. 
Só reconhecidos dentro da main
Chamada da Função Soma
01/25/13
Passagem de 
Parâmetros e Sem 
Retorno
• Observações:
– Caso a função fosse definida após a 
função main o protótipo seria void
soma(int n1, int n2);.
– Na chamada da função, pode-se invocar a 
função passando valores do tipo dos 
parâmetros. Exemplo soma(7,8);.
– A ordem e o tipo dos parâmetros devem 
ser respeitados na chamada da função.
01/25/13
Passagem de 
Parâmetros e Com 
Retorno
• O terceiro tipo de função não recebe 
valores no momento em que são 
chamadas mas retornam um valor para 
quem a chamou (retorno).
01/25/13
Passagem de 
Parâmetros e Com 
Retorno
01/25/13
Passagem de 
Parâmetros e Com 
Retorno
• O tipo de retorno pode ser qualquer tipo de dado 
(int, float, char, string , …).
• O retorno da função é feito por meio do 
comando return. 
• Este comando ao ser processado termina a 
execução da função e retorna o controle para a 
instrução seguinte do código da chamada. 
• Nas funções onde o tipo de retorno é void pode-se 
utilizar o comandoreturn; e nas demais funções o 
comando return tipodeRetorno;.
01/25/13
Passagem de 
Parâmetros e Com 
Retorno
//ProgC026.cpp - Função com retorno e sem passagem de parâmetros
#include<iostream>
using namespace std;
int soma(){
int n1,n2,s;
cout<<"Digite o primeiro numero: "<<endl; cin>>n1;
cout<<"Digite o segundo numero: "<<endl; cin>>n2;
s = n1 + n2;
return s;
}
int main(){
int resultado;
resultado=soma();
cout<<"\n Soma = "<<resultado;
return 0;
}
Função Soma
Variáveis locais da Função Soma
Retorna o valor da soma para 
quem realizou a chamada da 
Função Soma
Chamada da Função Soma. 
Deve ser atribuída a uma 
variável do tipo int
Apresenta o resultado da soma
01/25/13
Passagem de 
Parâmetros e Com 
Retorno
• Observações:
– Podemos utilizar mais de um 
comando return na mesma função.
–O informação retornada pelo 
comando returndeve ser do mesmo 
tipo definido na função
01/25/13
Passagem de 
Parâmetros e Com 
Retorno
• O quarto tipo de função é representado 
por aquelas que recebem valores no 
momento em que são chamadas 
(parâmetros) e retornam um valor 
para quem a chamou (retorno). 
01/25/13
Passagem de 
Parâmetros e Com 
Retorno
01/25/13
Passagem de 
Parâmetros e Com 
Retorno
//ProgC027.cpp - Função com retorno e passagem de parâmetro
#include<iostream>
using namespace std;
int soma(int n1, int n2){
int s;
s = n1 + n2;
return s;
}
int main(){
int numero1, numero2, resultado;
cout<<"Digite o primeiro numero: "<<endl; cin>>numero1;
cout<<"Digite o segundo numero: "<<endl; cin>>numero2;
resultado=soma(numero1,numero2);
cout<<"\n Soma = "<<resultado;
return 0;
}
Função Soma – com retorno e passagem de parâmetros
Parâmetros da Função Soma – int n1 e int n2
Retorno da Função Soma do tipo inteiro
Chamada da Função Soma atribuída a uma variável do 
tipo do retorno. Tem que passar os parâmetros
Introdução à Computação - Aulas Laboratório -
Fabiana Costa Guedes
30
Funções Com Passagem de 
Parâmetros e Com Retorno
/*ProgC029 - Programa que mostra um exemplo de uma 
função*/
#include <iostream> // para entrada e saída
#include <cstdlib>
int quadrado( int );
int main(){
for (int x=1; x<=50; x++)
std::cout << quadrado( x ) << " ";
std::cout << "\n\n";
system ("PAUSE");
return 0;
}
int quadrado ( int y ){
return y * y;
}
Protótipo da função quadrado.
Definição da função quadrado. Aqui é colocado o que realmente a função realiza.
Tipo da função quadrado. Toda função em C deve possuir 
um tipo. Quando não é necessário o tipo, coloca-se void.
Retorno da função quadrado. Toda função em C que não for definida como void deve possuir um retorno.
Parâmetro da função quadrado. Aqui é passado o valor que será calculado.
Chamada da função quadrado.
Introdução à Computação - Aulas Laboratório -
Fabiana Costa Guedes
31
Funções Com Passagem de 
Parâmetros e Com Retorno
/*ProgC030 - Exemplo de função que converte graus Fahrenheit em graus 
Celsius*/
#include <iostream>
#include <cstdlib>
int Celsius(int);
int main(){
int C, F;
std::cout << "\nDigite a temperatura em Fahrenheit: ";
std::cin >> F;
C = Celsius(F);
std::cout << "\nCelsius: " << C << "\n\n";
system ("PAUSE");
}
int Celsius(int fahr){
int C;
C = (fahr - 32) * 5 / 9;
return C;
}
Protótipo da função.
Chamada da função com atribuição a 
uma variável do mesmo tipo da função.
Definição da função.
01/25/13
Passagem de 
Parâmetros e Com 
Retorno
//ProgC034.cpp - Valor absoluto
#include <iostream>
#include <cstdlib>
using namespace std;
int abs(int n);
int main(){
int x=10;
cout << abs(0) << '\t' << abs(-3) << '\t' << abs(x) << endl;
system("PAUSE");
return 0;
}
int abs( int n){
if (n>=0)
return n;
else return -n;
}
Protótipo da função.
Definição da função.
Dois retornos, mas 
apenas um será
executado
Chamadas da função.
01/25/13
Parâmetros Por 
Valor e Por 
Referência
• A passagem de parâmetros por 
valor significa que a função trabalhará 
com cópias dos valores passados no 
momento de sua chamada, desta forma, 
qualquer alteração dos valores nas variáveis 
correspondentes dentro da função não 
afetam os valores das variáveis utilizadas 
como parâmetros. 
• Até este momento todas as 
funções apresentadas utilizam a passagem 
de parâmetros por valor. 
Introdução à Computação - Aulas Laboratório -
Fabiana Costa Guedes
34
Parâmetros de Função – por 
valor
/*Prog031 - Exemplo de função com passagem de parâmetro por valor*/
#include <iostream>
#include <cstdlib>
void Somar(int X){
X++;
std::cout << "Valor de X dentro da funcao: " << X << "\n";
}
int main(){
int Y=0;
Somar(Y);
std::cout << "Valor de Y fora da funcao: " << Y << "\n\n";
system ("PAUSE");
return 0;
}
Definição. Como está antes não 
precisa de protótipo.
Parâmetro por valor.
Não retorna tipo. Chamada de sub-rotina.
Chamada sem necessidade de atribuição a uma 
variável, por ser void.
01/25/13
Parâmetros Por 
Valor e Por 
Referência
• A passagem de parâmetros por 
referência significa que a função 
trabalhará com as próprias 
variáveis passadas no momento de 
sua chamada. 
• Assim, qualquer alteração nos valores 
das variáveis correspondentes dentro 
da função afetam as variáveis 
passadas como parâmetros. 
01/25/13
Passagem de 
parâmetro por 
referência
• Este mecanismo permite que a função 
retorne mais de um valor para a função que 
chama.
• Para definir que um parâmetro será passado 
como referência para uma função, utilizamos 
o símbolo & antes do nome da variável no 
cabeçalho da função, indicando que ela é 
um alias (apelido, referência, outro nome) 
para a variável passada como parâmetro.
Introdução à Computação - Aulas Laboratório -
Fabiana Costa Guedes
37
Passagem de parâmetro por 
referência
� O operador de referência & cria outro 
nome para uma variável já existente.
� Uma referência não é uma cópia da 
variável a quem se refere. É a mesma 
variável sob nomes diferentes.
Introdução à Computação - Aulas Laboratório -
Fabiana Costa Guedes
38
Parâmetros de Função – por 
referência
/*Prog032 - Programa para mostrar passagem de parâmetro por referência*/
#include <iostream> // para entrada e saída
#include <cstdlib>
void Somar(int& X){
X++;
std::cout << "Valor de X dentro da funcao: " << X << "\n";
}
int main(){
int Y=0;
Somar(Y);
std::cout << "Valor de Y fora da funcao: " << Y << "\n\n";
system ("PAUSE");
return 0;
}
Parâmetro por referência.
Chamada da sub-rotina.
Introdução à Computação - Aulas Laboratório -
Fabiana Costa Guedes
39
Parâmetros de Função – por 
referência
/*ProgC033.cpp - passagem por referência de mais de um argumento*/
#include <iostream>
#include <cstdlib>
void Troca(int& X, int& Y){
int temp=X;
X = Y;
Y = temp;
}
int main(){
int A, B, C;
std::cout << "\nDigite 3 numeros: ";
std::cin >> A >> B >> C;
if (A > B) Troca(A, B);
if (A > C) Troca(A, C);
if (B > C) Troca(B, C);
std::cout << A << " " << B << " " << C << " \n";
system("PAUSE");
return 0;
}
Parâmetros por referência.
Chamadas.
01/25/13
Passagem de 
parâmetro por 
referência
//ProgC028.cpp - Exemplo de passagem de 
//parâmetro por referência
#include<iostream>
using namespace std;
void nao_muda(int a, double b) {
a+=2; // significa a=a+2;
b+=5; // significa b=b+5;
}
void muda(int &a, double &b) {
a+=2;
b+=5;
}
int main(){
int n1=5;
double n2=6.0;
cout<<"n1 = "<<n1<<" n2 = "<<n2<<endl;
nao_muda(n1,n2);
cout<<"Valores apos a funcao nao_muda n1 = “ << n1 
<< " n2 = "<<n2<<endl;
muda(n1,n2);
cout<<"Valores apos a funcao muda n1 = “ 
<<n1<<" n2 = "<<n2<<endl;
return 0;
}
Parâmetrospor 
valor
Parâmetros por 
referência
Chamada de 
não-muda
Chamada de muda
01/25/13
Exemplo - Várias 
Funções
//ProgC035 - Varias Funções sendo chamadas
#include <iostream>
#include <cstdlib>
using namespace std;
float somasqr(float m, float n); 
float sqr(float z); 
float soma(float m, float n); 
int main() {
float a,b; cout << "Digite dois numeros ";
cin >> a >> b;
cout << "A soma dos quadrados e " << somasqr(a,b) << endl;
system("PAUSE"); return 0;
}
float somasqr(float m, float n) {return soma( sqr(m), sqr(n) );}
float sqr(float z){ return z*z; }
float soma(float m, float n) { return m+n; }
Protótipos das 
Funções
Chamada da Função 
somasqr
Chamada da Função 
sqr
Chamada da Função 
soma
Introdução à Computação - Aulas Laboratório -
Fabiana Costa Guedes
42
Função - Observações
� Há 3 maneiras de retornar o controle para o 
ponto no qual uma função foi chamada. 
� Se a função não fornecer um valor como 
resultado, o controle é retornado quando a 
chave que indica o término da função é 
alcançada 
� Ao se executar o comando return;
� Se a função fornecer um valor como resultado, o 
comando return expressão; retorna o valor da 
expressão para a função que realizou a 
chamada.
01/25/13
Tópicos para Discussão
� Funções
� Modularização
� Retorno
� Parâmetros
� Passagem por Valor
� Passagem por referência
BAC004-Informática-Teórica-Fabiana C Guedes 44
Exercícios
� Faça Programas para:
� Faça uma sub-rotina que forneça 1 se o número 
digitado for positivo ou 0 se for número negativo.
� Faça uma sub-rotina que transforme e mostre 
segundos em horas, minutos e segundos. Na 
função principal entre com valores de segundos.
� Escreva uma função que receba como 
argumento o ano e retorne true se for um ano 
bissexto e false se não for. Um ano é bissexto 
se for divisível por 4, mas não por 100. Um ano 
também é bissexto se for divisível por 400.

Continue navegando