quinta-feira, 13 de abril de 2023
1
Instituto Federal do Rio Grande do Norte – IFRNCâmpus Natal – Zona Norte
Funções
Odair Soares / Melquisedeque Vieira
quinta-feira, 13 de abril de 2023
2
Funções
• Uma função é um conjunto de instruções desenhadas para cumprir determinada tarefa e agrupadas em uma unidade com um nome para referi-la.
• Qualquer sequência de instruções que apareça mais de uma vez no programa é candidata a ser uma função;
• O código de uma função é agregado ao programa uma única vez e pode ser executado muitas vezes no decorrer do programa.
O que é?
quinta-feira, 13 de abril de 2023
3
Funções
tipo nome (parâmetros) { instrução 1; ...........; ...........; instrução n;
return; }
Sintaxe
quinta-feira, 13 de abril de 2023
4
Funções
• Para dar um nome a uma função você deve seguir as mesmas orientações determinadas para os nomes de variáveis;
• O nome de uma função pode ser qualquer um, com exceção de main, reservado para a função que inicia a execução do programa;
• Em todo programa deve existir uma e uma única função chamada de main;
• O programa termina quando for encerrada a execução da função main.
O nome das funções
quinta-feira, 13 de abril de 2023
5
FunçõesA função main()
quinta-feira, 13 de abril de 2023
6
Funções
• Permite que o compilador saiba que se trata de uma função;
• Podem estar vazios ou não. Trataremos deste assunto nos próximos slides.
Os parênteses após o nome das funções
quinta-feira, 13 de abril de 2023
7
Funções
• Toda função C++ deve começar com uma chave de abertura de bloco { e terminar com uma chave de fechamento de bloco }. As chaves delimitam o corpo da função.
Chaves
quinta-feira, 13 de abril de 2023
8
• Permite que outros programadores utilizem em seus programas;
• É como contratar uma mão-de-obra externa para executar uma certa tarefa;
• Reduz o tamanho do programa;
FunçõesPor que usar funções?
quinta-feira, 13 de abril de 2023
9
• quando o controle do programa encontra uma instrução que inclui o nome de uma função, a função é chamada.
• Chamar uma função é o meio pelo qual solicitamos que o programa desvie o controle e passe a executar as instruções da função e, ao término desta, volte o controle para a posição seguinte à da chamada à função;
FunçõesChamando uma função
quinta-feira, 13 de abril de 2023
10
Vária funções são desenvolvidas por programadores e fornecidas gratuitamente pela linguagem C++.
Ex.:
Getche(), system(), printf(), setw(),
FunçõesChamando uma função
quinta-feira, 13 de abril de 2023
11
celsius()
Vamos começar mostrando uma função que converte a temperatura de graus Fahrenheit para graus Celsius:
FunçõesPrimeira função
quinta-feira, 13 de abril de 2023
12
Funções
Função que converte a
temperatura de graus
Fahrenheit para graus
Celsius.
quinta-feira, 13 de abril de 2023
13
O propósito principal de escrita de protótipos de funções é o de fornecer ao compilador as informações necessárias sobre o tipo da função, o número e o tipo dos argumentos.
FunçõesO protótipo de funções
Tipo_retorno nome_Função (lista_de_parâmetros);
Cuidado para não esquecer o ponto
e vírgula!!
quinta-feira, 13 de abril de 2023
14
• Deve preceder sua definição e sua chamada;
• É a declaração de uma função;
• É colocado, em geral, no início do programa;
• Estabelece o tipo da função e os argumentos que ela recebe.
FunçõesO protótipo de funções
Tipo_retorno nome_Função (lista_de_parâmetros);
quinta-feira, 13 de abril de 2023
15
•Externo: Escrito antes de qualquer função. É feita uma única vez e é visível para todas as funções que a chamam.
•Local:É escrita no corpo da função que a chama e
antes da sua chamada.
FunçõesProtótipo externo e local
quinta-feira, 13 de abril de 2023
16
FunçõesProtótipo externo e local
quinta-feira, 13 de abril de 2023
17
FunçõesEliminando o protótipo de funções
• Se a função for escrita antes da instrução de sua chamada, seu protótipo não será obrigatório.
• O exemplo anterior poderia ser escrito da seguinte maneira:
quinta-feira, 13 de abril de 2023
18
Funções
quinta-feira, 13 de abril de 2023
19
FunçõesTipos de funções
• É definido pelo valor que ela retorna por meio do comando return.
• Uma função é do tipo int quando retorna um valor do tipo int.
• Em C++, os tipos de funções são os mesmos de variáveis, exceto quando a função não retorna nada. Nesse caso, ela é do tipo void.
quinta-feira, 13 de abril de 2023
20
FunçõesO comando return
• Em funções do tipo void, o comando return não é obrigatório;
• O valor de retorno de uma função é acessado na instrução de chamada por meio do nome da função seguido de parênteses contendo ou não argumentos. Ex.:
c = celsius(f); //Chamada à função
• Esse valor poder ser atribuído a uma variável ou fazer parte de alguma expressão;
• Várias instruções return podem fazer parte de uma função, mas apenas uma será executada.
quinta-feira, 13 de abril de 2023
21
Funções
quinta-feira, 13 de abril de 2023
22
FunçõesLimitações do comando return
• O comando return pode retornar somente um único valor para a função que chama.
quinta-feira, 13 de abril de 2023
23
FunçõesDefinição da função
O código C++ que descreve o que a função faz é chamado de definição da função. Sua forma geral é a seguinte:
tipo nome (declaração dos parâmetros){
Instruções;}
• Cabeçalho
• Corpo
quinta-feira, 13 de abril de 2023
24
FunçõesParâmetros da função
• As variáveis que receberão as informações enviadas a uma função são chamadas de parâmetros;
• Devem ser declaradas entre parênteses, no cabeçalho de sua definição;
• Podem se utilizados livremente no corpo da função;
• São acessados somente pela função onde foram declarados.
quinta-feira, 13 de abril de 2023
25
FunçõesPassagem por valor
• A função recebe apenas uma cópia do valor passado para ela e o guarda em uma variável local existente no seu corpo;
• O valor da variável original não é alterado porque a função não tem acesso a mesma.
quinta-feira, 13 de abril de 2023
26
FunçõesPassagem por valor
quinta-feira, 13 de abril de 2023
27
FunçõesFunções que não retornam nada: Tipo void
• Uma função que não retorna nada é do tipo void. Como exemplo, escreveremos uma função que desenha uma linha com um certo número de asteriscos:
quinta-feira, 13 de abril de 2023
28
FunçõesFunções que não retornam nada: Tipo void
quinta-feira, 13 de abril de 2023
29
FunçõesFunções que não recebem e não retornam nada
• Quando uma função não recebe nenhum argumento, devemos especificar no seu protótipo, entre parênteses, com void.
• A função seguinte usa o caractere ‘\a’, chamado de BELL, para tocar o alto-falante. Observe que ela não recebe e não retorna nada.
quinta-feira, 13 de abril de 2023
30
FunçõesFunções que não recebem e não retornam nada
quinta-feira, 13 de abril de 2023
31
FunçõesPassando vários argumentos
• Vários argumentos podem ser passados entre parênteses separados por vírgula, na chamada da função;
• A seguir, temos um exemplo de programa que passa dois argumentos para uma função:
quinta-feira, 13 de abril de 2023
32
FunçõesPassando vários argumentos Argumento 1
Argumento 2
quinta-feira, 13 de abril de 2023
33
FunçõesEscrevendo várias funções no mesmo programa
• Você pode escrever quantas funções quiser no mesmo programa;
• Qualquer função poder chamar uma outra função;
• Em C++, não é permitido definir uma função dentro de outra função.
quinta-feira, 13 de abril de 2023
34
Funções
quinta-feira, 13 de abril de 2023
35
FunçõesChamadas a funções usadas como argumentos de
outras funções
• Podemos também chamar uma função como argumento para outra função.
• A sintaxe é a mesma utilizada na chamada de variáveis como argumentos para funções.
• Exemplo:
quinta-feira, 13 de abril de 2023
36
Funções
Usando outras funções como argumentos
quinta-feira, 13 de abril de 2023
37
FunçõesO operador Unário de referência: &
• Com o operador de referência, podemos montar novos tipos de dados chamados de referências;
• Referência é um outro nome para uma variável já existente;
• Como usar: int n;int& A = n;
Se o valor de A for alterado, o valor de n também será alterado.
Se o valor de n for alterado, o valor de A também será alterado.
Indica que A é um outro nome para n.
quinta-feira, 13 de abril de 2023
38
FunçõesO operador Unário de referência: &
Não é um cópia da variável a que se refere, é a mesma variável sob nomes diferentes.
int n;int& A = n;N = 5;cout << A;A = 8;cout << n;
Nas instruções:
Que valores são impressos?
quinta-feira, 13 de abril de 2023
39
FunçõesO operador Unário de referência: &
Toda referência deve obrigatoriamente ser inicializada.
int n;int& A;int& A = n;
ERRADO!
CERTO!
quinta-feira, 13 de abril de 2023
40
FunçõesPassagem por referência
• Um dos usos de referências é na passagem de argumentos para funções;
• A principal vantagem da passagem por referência, é a de que a função pode acessar as variáveis da função que chamou;
• Isso possibilita que uma função retorne mais de um valor para a função que chama;
• Os valores a serem retornados são colocados em referências de variáveis da função chamadora.
quinta-feira, 13 de abril de 2023
41
FunçõesPassagem por referência
Exemplo:
void reajusta20(float& p, const float& r);
quinta-feira, 13 de abril de 2023
42
FunçõesOperador Unário
quinta-feira, 13 de abril de 2023
43
FunçõesReferências constantes
• Você pode combinar a palavra-chave const com a declaração de uma referência;
• Essas declarações fazem de A um nome “read-only” para n;
int n = 456;const int& A = n;
quinta-feira, 13 de abril de 2023
44
FunçõesReferências constantes
• Utilizamos referências constantes quando não precisamos alterar o valor das variáveis enviadas como argumentos;
• O uso de referências constantes é um meio de economia de memória.
Exemplo:
void imprime_Quadrado(const double& n, const double& m);
quinta-feira, 13 de abril de 2023
45
FunçõesReferências constantes
quinta-feira, 13 de abril de 2023
46
FunçõesValores default para os argumentos de uma função
• Uma função pode ser chamada sem serem especificados nenhum de seus argumentos;
• O protótipo de uma função pode fornecer valores default para esses argumentos não especificados;
• Se forem omitidos os argumentos correspondentes na chamada à função, os valores default serão automaticamente usados;
• Se forem especificados, estes serão respeitados e usados;
quinta-feira, 13 de abril de 2023
47
FunçõesValores default para os argumentos de uma função
Exemplo:
void linha(int n = 20, char ch = ‘*’);
quinta-feira, 13 de abril de 2023
48
FunçõesValores default para os argumentos de uma função
quinta-feira, 13 de abril de 2023
49
FunçõesValores default para os argumentos de uma função
Se um argumento for omitido, todos os subsequentes deverão sê-lo:
linha(,‘*’); //ERRO
Após a primeira especificação com valor default, todos os parâmetros seguintes devem ser especificados com valor default:
linha(int n = 20, char ch); //ERRO
linha(int n, char ch = ‘*’); //CORRETO
quinta-feira, 13 de abril de 2023
50
FunçõesSobrecarga de funções
• Significa criar uma família de funções com o mesmo nome;
• Mas devem ter a lista de argumentos diferentes ou em número ou em tipo;
• É por meio dos argumentos que o sistema reconhece qual função deverá ser chamada;
quinta-feira, 13 de abril de 2023
51
Funções
Exemplo 1
quinta-feira, 13 de abril de 2023
52
Funções
Exemplo 2
quinta-feira, 13 de abril de 2023
53
FunçõesFunções inline
• Escrevemos funções inline exatamente da mesma maneira como escrevemos funções comuns, exceto pela inclusão do qualificador inline no início da definição da função.
• A palavra chave inline, quando colocada no início do cabeçalho da definição de uma função, causa a inserção de uma nova cópia da função em todo lugar onde ela é chamada;
• A definição de uma função inline deve preceder a primeira chamada a ela.
quinta-feira, 13 de abril de 2023
54
FunçõesFunções inline: quando usar?
• Quando escrevemos funções pequenas, podemos poupar tempo de execução colocando o código da função diretamente no programa. Se a função é muito pequena (uma ou duas instruções), as instruções necessárias à sua chamada podem ocupar mais espaço de memória que as instruções do seu próprio código. Em casos semelhantes, é aconselhável criar funções inline.
quinta-feira, 13 de abril de 2023
55
FunçõesFunções recursivas
• Uma função é recursiva quando dentro dela está presente uma instrução de chamada a ela própria.
• Três pontos devem ser lembrados quando queremos escrever uma função recursiva:
1. Definir o problema em termos recursivos;
2. Encontrar a condição básica;
3. Toda vez que a função é chamada recursivamente, deve estar mais próxima de satisfazer a condição básica.
quinta-feira, 13 de abril de 2023
56
FunçõesFunções recursivas
1. Definir o problema em termos recursivos
Isso significa definir o problema usando ele mesmo na definição. O fatorial de um número n qualquer pode ser definido por meio da seguinte expressão:
n! = n * (n - 1)!
quinta-feira, 13 de abril de 2023
57
FunçõesFunções recursivas
2. Encontrar a condição básica:
Toda função recursiva deve ter uma condição de término chamada de condição básica. A função fatorial(), quando chamada, verifica se n é zero. Se essa condição for satisfeita, interrompe a recursão.
quinta-feira, 13 de abril de 2023
58
FunçõesFunções recursivas
3. Cada vez que a função é chamada recursivamente, deve estar mais próxima de satisfazer a condição básica:
Isso garante que o programa não girará em uma sequência infindável de chamadas. Em nossa função, a cada chamada a função, o valor de n estará mais próximo de zero.
quinta-feira, 13 de abril de 2023
59
Funções
quinta-feira, 13 de abril de 2023
60
Funções
Dúvidas?