Baixe o app para aproveitar ainda mais
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.
Compartilhar