BAC004-Informática-Teórica-Fabiana C Guedes 1
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
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.
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.
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
01/25/13
Funções
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 é
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
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
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.
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
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
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
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
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
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
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 comando return; 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
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).
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
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.
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.
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
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
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
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.
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.
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.
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âmetros por valor Parâmetros por 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
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
01/25/13
Tópicos para Discussão
Funções
Modularização Retorno
Parâmetros
Passagem por Valor
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.