Baixe o app para aproveitar ainda mais
Prévia do material em texto
Funções Aula nº 11 Definição de Funções Protótipos de Funções 30/09/2008 Aula 08 - Funções(1) 2 - 29 Objetivos • Construir programas modularmente usando funções; • Ser capaz de criar novas funções; • Entender os mecanismos para passar informações entre funções; • Aprender técnicas de simulação com geração aleatória de números; 30/09/2008 Aula 08 - Funções(1) 3 - 29 Objetivos • Entender a visibilidade dos identificadores; • Entender e escrever funções que chamam a si mesmas. 30/09/2008 Aula 08 - Funções(1) 4 - 29 Introdução • Uma função é um componente capaz de executar uma ou mais tarefas; • Contribui para a resolução de um problema a ser resolvido por um programa; • Um programa pode chamar várias funções, cada uma das quais com um objetivo específico. • Biblioteca padrão C++; • Funções definidas pelo programador; 30/09/2008 Aula 08 - Funções(1) 5 - 29 Introdução main ajudante 1 ajudante 2 ajudante 3 ajudante 4 ajudante 5 30/09/2008 Aula 08 - Funções(1) 6 - 29 Introdução • Construir programas a partir de pequenas partes ou componentes – dividir para conquistar; • Uma função é invocada (ou chamada) por uma chamada de função; • A chamada especifica o nome da função e provê informações – argumentos. 30/09/2008 Aula 08 - Funções(1) 7 - 29 Biblioteca Matemática • <cmath> • Exemplo: cout << sqrt (900.0); • Calcula a raiz quadrada de 900.0 • Argumentos podem ser constantes, variáveis ou expressões; • Página 192 do livro texto – funções da biblioteca matemática. 30/09/2008 Aula 08 - Funções(1) 8 - 29 main Preciso calcular o lado de um quadrado conhecendo sua área... 30/09/2008 Aula 08 - Funções(1) 9 - 29 main Primeiro, preciso ler o valor da área. 30/09/2008 Aula 08 - Funções(1) 10 - 29 main OK, O valor da área é 900. 30/09/2008 Aula 08 - Funções(1) 11 - 29 main Ei! sqrt! 30/09/2008 Aula 08 - Funções(1) 12 - 29 main Ei! sqrt! sqrt 30/09/2008 Aula 08 - Funções(1) 13 - 29 main sqrt Me dá o valor da raiz quadrada de 900 ! 30/09/2008 Aula 08 - Funções(1) 14 - 29 main sqrt Estou calculando ... 30/09/2008 Aula 08 - Funções(1) 15 - 29 main sqrt Estou calculando ... 30 ! 30/09/2008 Aula 08 - Funções(1) 16 - 29 sqrt Estou calculando ... 30 ! Obrigada ! main 30/09/2008 Aula 08 - Funções(1) 17 - 29 main Ótimo! Agora só tenho que imprimir o resultado. 30/09/2008 Aula 08 - Funções(1) 18 - 29 int main() { ... cout << sqrt (900.0); ... } 30/09/2008 Aula 08 - Funções(1) 19 - 29 int main() { ... cout << sqrt (900.0); ... } chamada de função 30/09/2008 Aula 08 - Funções(1) 20 - 29 int main() { ... cout << sqrt (900.0); ... } Argumento 30/09/2008 Aula 08 - Funções(1) 21 - 29 int main() { ... cout << sqrt (900.0); ... } Neste ponto, a execução do programa pára, chama a função e aguarda o retorno dela 30/09/2008 Aula 08 - Funções(1) 22 - 29 int main() { ... cout << sqrt (900.0); ... } Neste ponto, a execução do programa pára, chama a função e aguarda o retorno dela A função sqrt calcula a raiz quadrada de 900.0 e retorna o resultado para main 30/09/2008 Aula 08 - Funções(1) 23 - 29 main ... cout << sqrt (900.0); ... sqrt 900.0 30.0 30/09/2008 Aula 08 - Funções(1) 24 - 29 Funções • Modularização – vantagens: –Código mais administrável; –Reutilização de software; –Evita repetição de código num programa. 30/09/2008 Aula 08 - Funções(1) 25 - 29 Funções definidas pelo programador • Funções podem ser definidas no programa; • Ao invés de usarmos funções da biblioteca C++, nós criamos as funções necessárias no nosso programa; • Inserimos, então, chamadas à função no nosso programa. 30/09/2008 Aula 08 - Funções(1) 26 - 29 Variáveis em funções • Variáveis declaradas nas funções – locais. • Parâmetros provêem um meio de passar informações para funções – locais. 30/09/2008 Aula 08 - Funções(1) 27 - 29 Funções • Cada função deve se limitar a realizar uma tarefa simples e bem definida; • Em um programa com muitas funções, main deveria ser implementada como um grupo de chamadas a funções que executam o “grosso” do trabalho do programa. 30/09/2008 Aula 08 - Funções(1) 28 - 29 Definição de função • Considere um programa que use a função quadrado para calcular quadrados dos números inteiros de 1 a 10. 30/09/2008 Aula 08 - Funções(1) 29 - 29 Exemplo #include <iostream> using namespace std; int quadrado (int); //protótipo int main( ) { for (int x=1; x<=10; x++) cout << quadrado(x) << “ ”; chamada de função Antes de começarmos a escrever main, vamos informar que usaremos a função quadrado 30/09/2008 Aula 08 - Funções(1) 30 - 29 int main( ) { for (int x=1; x<=10; x++) cout << quadrado(x) << “ ”; cout << endl; return 0; } // fim de main // Definição da função int quadrado( int y) { return (y * y); } 30/09/2008 Aula 08 - Funções(1) 31 - 29 int main( ) { for (int x=1; x<=10; x++) cout << quadrado(x) << “ ”; cout << endl; return 0; } // fim de main // Definição da função int quadrado( int y) { return (y * y); } 30/09/2008 Aula 08 - Funções(1) 32 - 29 int main( ) { for (int x=1; x<=10; x++) cout << quadrado(x) << “ ”; cout << endl; return 0; } // fim de main // Definição da função int quadrado( int y) { return (y * y); } 1 30/09/2008 Aula 08 - Funções(1) 33 - 29 int main( ) { for (int x=1; x<=10; x++) cout << quadrado(x) << “ ”; cout << endl; return 0; } // fim de main // Definição da função int quadrado( int y) { return (y * y); } 1 30/09/2008 Aula 08 - Funções(1) 34 - 29 int main( ) { for (int x=1; x<=10; x++) cout << quadrado(x) << “ ”; cout << endl; return 0; } // fim de main // Definição da função int quadrado( int y) { return (y * y); } 1 1 30/09/2008 Aula 08 - Funções(1) 35 - 29 int main( ) { for (int x=1; x<=10; x++) cout << quadrado(x) << “ ”; cout << endl; return 0; } // fim de main // Definição da função int quadrado( int y) { return (y * y); } 2 30/09/2008 Aula 08 - Funções(1) 36 - 29 int main( ) { for (int x=1; x<=10; x++) cout << quadrado(x) << “ ”; cout << endl; return 0; } // fim de main // Definição da função int quadrado( int y) { return (y * y); } 2 30/09/2008 Aula 08 - Funções(1) 37 - 29 int main( ) { for (int x=1; x<=10; x++) cout << quadrado(x) << “ ”; cout << endl; return 0; } // fim de main // Definição da função int quadrado( int y) { return (y * y); } 2 4 30/09/2008 Aula 08 - Funções(1) 38 - 29 int main( ) { for (int x=1; x<=10; x++) cout << quadrado(x) << “ ”; cout << endl; return 0; } // fim de main // Definição da função int quadrado( int y) { return (y * y); } O processo continua até ... 30/09/2008 Aula 08 - Funções(1) 39 - 29 int main( ) { for (int x=1; x<=10; x++) cout << quadrado(x) << “ ”; cout << endl; return 0; } // fim de main // Definição da função int quadrado( int y) { return (y * y); } 10 30/09/2008 Aula 08 - Funções(1) 40 - 29 int main( ) { for (int x=1; x<=10; x++) cout << quadrado(x) << “ ”; cout << endl; return 0; } // fim de main // Definição da função int quadrado( int y) { return (y * y); } 10 100 30/09/2008 Aula 08 - Funções(1) 41 - 29 Definição de funções tipo do valor de retorno nome da função (lista de parâmetros) { declarações e comandos } • retorno – chave } – return – return expressão int quadrado( int y) { return (y * y); } 30/09/2008 Aula 08 - Funções(1) 42 - 29 • Função definida pelo programador para calcular o máximo de três valores #include <iostream> using namespace std; int maximo (int, int, int); // Protótipo int main ( ) { Exemplo 2 30/09/2008 Aula 08 - Funções(1) 43 - 29 int main ( ) { int a, b, c; cout << “Forneça três inteiros: ” ; cin >> a >> b >> c; cout<<“O maior é:”<<maximo(a,b,c)<<endl; return 0; } 30/09/2008 Aula 08 - Funções(1) 44 - 29 Definição da Função int maximo (int x, int y, int z) { int max = x; if (y > max) max = y;if (z > max) max = z; return max; } 30/09/2008 Aula 08 - Funções(1) 45 - 29 Definição da Função int maximo (int x, int y, int z) { int max = x; if (y > max) max = y; if (z > max) max = z; return max; } a b c 30/09/2008 Aula 08 - Funções(1) 46 - 29 int main ( ) { int a, b, c; cout << “Forneça três inteiros: ” ; cin >> a >> b >> c; cout<<“O maior é:<<maximo(a,b,c)<<endl; return 0; } Exemplo de execução 3 8 5 30/09/2008 Aula 08 - Funções(1) 47 - 29 Definição da Função int maximo (int x, int y, int z) { int max = x; if (y > max) max = y; if (z > max) max = z; return max; } 3 8 5 30/09/2008 Aula 08 - Funções(1) 48 - 29 Definição da Função int maximo (int x, int y, int z) { int max = x; if (y > max) max = y; if (z > max) max = z; return max; } 3 8 5 3max 30/09/2008 Aula 08 - Funções(1) 49 - 29 Definição da Função int maximo (int x, int y, int z) { int max = x; if (y > max) max = y; if (z > max) max = z; return max; } 3 8 5 max 8 30/09/2008 Aula 08 - Funções(1) 50 - 29 Definição da Função int maximo (int x, int y, int z) { int max = x; if (y > max) max = y; if (z > max) max = z; return max; } 3 8 5 max 8 30/09/2008 Aula 08 - Funções(1) 51 - 29 Definição da Função int maximo (int x, int y, int z) { int max = x; if (y > max) max = y; if (z > max) max = z; return max; } 3 8 5 max 8 30/09/2008 Aula 08 - Funções(1) 52 - 29 int main ( ) { int a, b, c; cout << “Forneça três inteiros: ” ; cin >> a >> b >> c; cout<<“O maior é:”<<maximo(a,b,c)<<endl; return 0; } 30/09/2008 Aula 08 - Funções(1) 53 - 29 int main ( ) { int a, b, c; cout << “Forneça três inteiros: ” ; cin >> a >> b >> c; cout<<“O maior é:”<<maximo(a,b,c)<<endl; return 0; } 8 30/09/2008 Aula 08 - Funções(1) 54 - 29 Protótipo de funções • O protótipo diz ao compilador o nome da função, o tipo do dado retornado, número e tipo dos parâmetros e a ordem em que são esperados; • O compilador usa o protótipo para validar as chamadas; 30/09/2008 Aula 08 - Funções(1) 55 - 29 Protótipo de Funções • Se a função é definida antes do primeiro uso da função, o protótipo é dispensável; • A parte do protótipo que inclui o nome da função e os tipos dos argumentos é chamada assinatura da função (não inclui o tipo retornado). 30/09/2008 Aula 08 - Funções(1) 56 - 29 Protótipo de funções • Coerção de argumentos • cout << sqrt (4); O argumento inteiro 4 será convertido para o double 4.0 30/09/2008 Aula 08 - Funções(1) 57 - 29 Protótipo de funções • Coerção de argumentos • cout << sqrt (4); • Regras de promoção; • Expressões de tipo misto; • Cada valor é convertido (temporariamente no tipo máximo da expressão) 30/09/2008 Aula 08 - Funções(1) 58 - 29 Protótipo de funções • Quando o tipo de um argumento não corresponde ao tipo especificado na definição da função podem ocorrer erros indesejáveis. quadrado (4.5) retorna 16 int quadrado (int x) { return x*x; } 30/09/2008 Aula 08 - Funções(1) 59 - 29 Protótipo de funções • Escopo – um protótipo de função colocado fora de uma definição de função se aplica a todas as chamadas daquela função que aparecem depois do protótipo; • Se colocado dentro de uma função, se aplica somente às chamadas realizadas naquela função.
Compartilhar