Escolar Documentos
Profissional Documentos
Cultura Documentos
ECOI04
Algoritmos e Estrutura de Dados I
Funções
Sandro Izidoro
17 de agosto de 2022
Sumário
1 Funções
2 Referências
Funções
Introdução
Uma função é um conjunto de instruções projetadas para cumprir uma tarefa es-
pecí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 sequência de instruções
que se repita no programa é candidata a ser uma função.
Em C/C++, um programa pode conter uma ou mais funções, das quais uma delas
deve ser a função main ( ).
Chamar 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.
Definições de Funções
Definições de Funções
Existem 3 maneiras de retornar o controle para o ponto no qual uma função foi cha-
mada:
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 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.
Definições de Funções
Parâmetros da Função
Parâmetros por valor: Quando as funções criaram uma nova variável para rece-
ber o valor passado pela função chamadora. Uma característica importante deste
mecanismo é que, se for utilizado uma variável como argumento, a variável que
é utilizada como parâmetro não pode alterar o conteúdo da variável argumento,
mesmo que ela seja modificada dentro da função.
Parâmetros por referência: Quando a função pode acessar as variáveis da fun-
ção chamadora. Além deste benefício, este mecanismo possibilita que uma função
retorne mais de um valor para a função que chama. Os valores a serem retorna-
dos são colocados em referências de variáveis da função chamadora.
Parâmetros da Função
Parâmetros da Função
O operador de referência cria outro nome para uma variável já existente. Toda
referência deve ser obrigatoriamente inicializada.
É possível combinar a palavra-chave const com a declaração de uma variável re-
ferência (read-only). Dessa forma o conteúdo da variável não poderá ser alterado
com a utilização da variável referência.
O protótipo de uma função pode incluir valores padrão para um, alguns ou todos
os parâmetros. Se omitidos os argumentos correspondentes, os valores padrões
serão automaticamente utilizados.
1 / / Exemplo 07 − Funcao com v a l o r e s padrao
2
3 # include < iostream >
4
5 using namespace s t d ;
6
7 void Linha ( i n t = 20 , char = ’ * ’ ) ; / / p r o t o t i p o
8
9 i n t main ( ) {
10 Linha ( ) ; c o u t << " \ n " ;
11 Linha ( 3 4 ) ; c o u t << " \ n " ;
12 Linha ( 4 5 , ’ = ’ ) ; c o u t << " \ n " ;
13 return 0;
14 }
15
16 void Linha ( i n t n , char ch ) {
17 f o r ( i n t i =0; i <n ; i ++) c o u t << ch ;
18 }
Sobrecarga de Funções
Sobrecarregar funções significa criar uma família de funções com o mesmo nome,
mas com a lista de parâmetros diferentes (aridade ou tipo).
Funções inline
Para passar um vetor como argumento para uma função, é necessário especificar
o nome do vetor sem os colchetes.
Frequentemente, ao passar um vetor para uma função, o tamanho do vetor tam-
bém é passado, para que a função possa processar o número total de elementos
do vetor.
A linguagem C/C++ automaticamente passa os vetores às funções usando cha-
madas por referência simulada. Isso ocorre por motivos de desempenho. Se os
vetores fossem passados por chamadas por valor, seria passada uma cópia de
cada elemento. Para vetores grandes isso seria demorado e consumiria um es-
paço considerável de memória.
As funções chamadas podem modificar os valores dos elementos nos vetores ori-
ginais do chamador.
O nome do vetor é o endereço do primeiro elemento do vetor. Para uma função
receber um vetor por meio de uma chamada de função, sua lista de parâmetros
deve especificar que um vetor será recebido.
Podem existir situações nas quais não se deve permitir que uma função modifique
os elementos de um vetor.
Como os vetores são sempre passados por chamadas por referência, as modifica-
ções nos valores de um vetor são difíceis de controlar.
Entretanto, pode-se utilizar o qualificador de tipo const também com ponteiros.
Quando uma função especifica um parâmetro vetor que é precedido por const, os
elementos do vetor se tornam constantes no corpo da função e qualquer tentativa
de modificar um elemento resulta em um erro de compilação.
Um ponteiro para função é uma variável que armazena o endereço de uma função
na memória, permitindo a execução da função através deste ponteiro.
No Exemplo 11 (linha 12) tem a declaração de uma variável ponteiro, PtrFun. Os
parênteses envolvendo a variável são necessários para que o compilador consiga
distinguir a declaração de um ponteiro com o cabeçalho de uma função. O nome
da função sem os parênteses é o seu endereço. Caso contrário o compilador
entenderia como uma chamada da função.
A aritmética com ponteiros para funções não é definida, ou seja, não é possível
incrementar ou decrementar ponteiros para funções.
Sandro Izidoro UNIFEI - ICT ECOI04 17 de agosto de 2022 20 / 24
Funções Referências
Função Recursiva
Na linguagem C/C++, assim como em muitas outras linguagens de programação,
uma função pode chamar a si própria (função recursiva).
Há certos algoritmos que são mais eficientes quando feitos de maneira recursiva,
entretanto, o código gerado por uma função recursiva geralmente exige a utilização
de mais memória, o que pode tornar a execução mais lenta.
Todo cuidado é pouco ao se fazer funções recursivas.
A primeira coisa a se providenciar é um critério de parada. Este vai determinar
quando a função deverá parar de chamar a si mesma, impedindo uma recursivi-
dade sem fim.
1 / / Exemplo 13 − Funcao Recursiva
2
3 # include < iostream >
4
5 using namespace s t d ;
6
7 long f a t o r i a l ( i n t n ) {
8 r e t u r n ( ( n == 0 ) ? long ( 1 ) : long ( n ) * f a t o r i a l ( n −1) ) ;
9 }
10
11 i n t main ( ) {
12 f o r ( i n t x = 1 ; x <= 8 ; x ++)
13 c o u t << f a t o r i a l ( x ) << " \ n " ;
14 return 0;
15 }
Referências
Referências