Baixe o app para aproveitar ainda mais
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:RR f(x)=7 f:NN 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
Compartilhar