Você está na página 1de 7

Aula 3º

FUNÇÕES
Nesta aula, vamos aprender a criar funções (ou subrotinas), que consistem
numa porção de código que resolve um problema muito específico ou parte
de um problema maior. É como se pegássemos um pedaço do programa
e separássemos. Fazemos isso quando temos uma parte do programa
responsável por uma tarefa em particular. Podemos remover esse pedaço de
dentro da main (da função principal) e colocar dentro de uma função específica
que execute tal tarefa.
Cada função dentro do programa tem que ter um nome diferente. Não
é possível, portanto, criar duas funções calcula dentro do mesmo programa,
porque é através do nome da função que fazemos a chamada a ela. Se
tivéssemos várias funções com o mesmo nome, o programa não saberia qual
delas executar.
Em muitas linguagens, função é diferente de procedimento, porque as
funções retornam um valor (resultado) para o local de onde ela foi chamada, e
os procedimentos não retornam valores. Em C e C++ trabalhamos somente
com funções que podem ou não retornar algum valor. Portanto, em C e C++
“não existe” procedimento.
Em outras palavras, uma função é uma subrotina ou um conjunto de
instruções escritas para realizar uma tarefa específica
Vantagens em usar funções
Usamos funções porque elas deixam o código mais organizado e de fácil entendimento.

Podemos dividir algumas operações muito grandes em várias operações pequenas.

Podemos usar uma função para realizar rotinas que podem ser executadas mais de uma
vez, assim evitamos ter que escrever as mesmas instruções várias vezes.
Bons estudos!

Objetivos de aprendizagem
Ao término desta aula, vocês serão capazes de:

• entender a necessidade de se criar uma função;


• compreender as principais vantagens do uso de funções;
• criar funções com e sem retorno;
• criar funções que aceitam parâmetros;
• entender os tipos de parâmetros possíveis e como eles devem ser enviados para as funções.
Linguagem de Programação II 16
impressas na tela de saída do programa! Essa é a ordem em
Seções de estudo que o programa é executado.

REGRA
1 – Chamada para função Se você não fizer a chamada para a função, seja em
2 – Função sem retorno qualquer parte do seu programa, ela não será executada
3 – Função com retorno
4 – Parâmetros de função Até aqui, vimos como é feita a chamada para a função;
agora vamos ver como criar uma função sem retorno.

1 - Chamada para função


2 - Função sem retorno
Uma função pode ser executada (chamada) de qualquer
parte do programa, pode ser chamada de dentro da main ou Esse tipo de função executa algo, mas não retorna nada
até mesmo de dentro de uma outra função. É aconselhável para o chamador (local onde foi realizada a chamada para ela).
que se coloque as funções sempre acima (antes) da main. Funções desse tipo são definidas com o tipo void antes do
Uma função, basicamente, executa uma série de seu nome.
instruções depois retorna ou não algum resultado para O void (como sua própria tradução sugere) é um tipo de
onde ela foi chamada. Algumas linguagens de programação dado vazio, ou seja, não contém um valor. Portanto, quando
(Delphi, Pascal, entre outras) chamam de funções somente definimos uma função como void, estamos definindo que ela
as que possuem retorno e as que não possuem retorno são não possui valor de retorno, ou seu retorno é nulo, o que dá
chamadas de procedimento. no mesmo resultado.
Sabendo-se que o programa é executado linha a linha,
de cima para baixo, ao encontrar uma chamada para uma Sintaxe:
função, o programa muda seu curso para o início da função,
executando-a completamente. Terminada a execução da void nome_função( )
função, o programa volta a ser executado uma linha abaixo de {
onde estava a chamada da função. instrução_1;
instrução_2;
FIGURA 3.1: FUNCIONAMENTO INTERNO DA }
CHAMADA DE UMA FUNÇÃO.
Onde:
void -> indica que a função não tem retorno.
nome_função() -> diz respeito ao nome que é dado a
ela ( ) -> toda função, em C, tem que ter parênteses depois do
seu nome.

REGRA
Depois do nome da função sempre há parênteses, mesmo que não
tenha nada dentro deles.

Fonte: criação nossa Vamos ver alguns exemplos de função sem retorno.

Veja na figura abaixo a tela de saída do programa FIGURA 3.3: CRIANDO UMA FUNÇÃO SEM
mostrado acima. RETORNO.

FIGURA 3.2: TELA DE SAÍDA DO PROGRAMA


REPRESENTADO PELA FIGURA 3.1.

Fonte: criação nossa

Fonte: criação nossa Veja a tela de saída deste programa na figura a seguir:
Veja que interessante a ordem em que as frases são
17
FIGURA 3.4: TELA DE SAÍDA DO PROGRAMA
REPRESENTADO PELA FIGURA 3.3. 3 - Função com retorno
Este tipo de função executa algo e retorna algum valor
para o chamador (local onde foi realizada a chamada para ela).
O tipo da função pode ser qualquer tipo reconhecido pela
linguagem, tanto os nativos a ela, como os tipos que criamos
(uma struct por exemplo).

Sintaxe:
tipo_de_retorno nome_função( )
{
Fonte: criação nossa
instrução_1; instrução_2; return valor;
}
No exemplo a seguir (figura 3.5), estamos criando um
programa que tem uma variável global (x), cujo valor 3 é Onde:
atribuído dentro da main. Feito isto é realizada a chamada para tipo_de_retorno -> indica que tipo de informação
a função calcula, que realiza um cálculo sobre essa variável. a função irá retornar para o seu chamador. Todos os tipos
Qual o valor que será impresso na linha 11? Veja a resposta presentes em C são possíveis de serem retornados, até mesmo
na figura 3.6. uma struct que pode ser criada no programa, é um tipo de
retorno aceito para uma função.
FIGURA 3.5: CRIANDO A FUNÇÃO, SEM RETORNO, nome_função() -> diz respeito ao nome que é dado a
CALCULA(). ela ( ) -> toda função, em C, tem que ter parênteses depois do
seu nome.
return valor -> esta instrução é responsável por enviar
para o chamador, um valor que pode ser gerado dentro da
função. Valor é o valor que está sendo retornado, podendo
ser uma constante ou uma variável, e tem que ser do mesmo
tipo da função.

REGRA
O valor retornado pela função TEM que ser do mesmo tipo definido para
a função.

Vamos ver alguns exemplos de função sem retorno.

Fonte: criação nossa FIGURA 3.7: CRIANDO A FUNÇÃO, COM RETORNO,


Se você respondeu que o valor impresso é 6, está certo. CALCULA().
Mas quem pensou que fosse 3, está enganado, pois o valor da
variável x é alterado dentro da função calcula, e como x é uma
variável global, em qualquer parte do programa que ela sofrer
algum tipo de alteração, esta será permanente.

FIGURA 3.6: TELA DE SAÍDA DO PROGRAMA


REPRESENTADO PELA FIGURA 3.5.

Fonte: criação nossa

No programa representado pela figura 3.7 podemos ver


Fonte: criação nossa que a função calcula está definida como sendo do tipo int,
então ela DEVE retornar um valor inteiro. A variável y foi
definida como sendo do tipo int, então podemos retornar o
Linguagem de Programação II 18
seu valor para o chamador sem problemas. FIGURA 3.10: TELA DE SAÍDA DO PROGRAMA
Dentro da função calcula, criamos a variável y. É REPRESENTADO PELA FIGURA 3.9.
importante lembrar que ela é uma variável local e não global,
portanto o seu valor não pode ser acessado de dentro da main
ou de qualquer outra função que o programa possa vir a ter.
Ela pode ser acessada apenas dentro da função calcula.
Agora, vamos entender o que foi feito dentro da main.
Criamos a variável z para receber o retorno da função calcula.
Também é muito importante observar que a variável que vai
receber o valor retornado da função tem que ser do mesmo
tipo do retorno da função, nesse caso o tipo int.
Na instrução z = calcula(); estamos realizando duas
operações ao mesmo tempo: a primeira é a chamada para a
função calcula que vai executar as instruções da função; e a
segunda é a atribuição do retorno da função à variável z.
Veja a saída desse programa na figura a seguir. Fonte: criação nossa

FIGURA 3.8: TELA DE SAÍDA DO PROGRAMA Vamos ver agora um exemplo em que uma constante
REPRESENTADO PELA FIGURA 3.7. é retornada. A constante é do tipo float, portanto o tipo da
função também tem que ser float, e a variável que vai receber
este retorno também deve ser float.

FIGURA 3.11: CRIANDO A FUNÇÃO RECEBE COM


RETORNO DE UMA CONSTANTE

Fonte: criação nossa

Agora, vamos ver um exemplo usando variáveis do tipo


float, e realizando um cálculo dentro da função calcula. Como
o valor a ser calculado é do tipo float, então: o retorno da
função deve ser float, o tipo da função deve ser float, e a
variável que recebe o retorno da função também tem que ser
Fonte: criação nossa
float.
FIGURA 3.9: CRIANDO A FUNÇÃO, COM RETORNO,
FIGURA 3.12: TELA DE SAÍDA DO PROGRAMA
CALCULA( ) - USANDO FLOAT.
REPRESENTADO PELA FIGURA 3.11.

Fonte: criação nossa

Fonte: criação nossa

4 - Parâmetros de função
Em alguns casos, necessitamos enviar valores de
uma função para outra. Isso é possível quando utilizamos
19
parâmetros. Parâmetros são constantes ou variáveis que FIGURA 3.14: TELA DE SAÍDA DO PROGRAMA
quando a função recebe, pode manipulá-los como se fossem REPRESENTADO PELA FIGURA 3.13.
variáveis locais.
Quando criamos funções que aceitam parâmetros,
precisamos ter, na declaração dela e na sua chamada, o
mesmo número de parâmetros, e eles precisam ser do mesmo
tipo.
a) Parâmetros por valor - com cópia
Segundo Deitel (2006):

Quando um parâmetro é passado por valor,


uma cópia do valor do argumento é feita e
passada para a função chamada. As alterações
na cópia não afetam o valor da variável
original no chamador. Isso previne os efeitos
colaterais acidentais que tanto impedem o
desenvolvimento de sistemas de software Fonte: criação nossa
confiáveis e corretos (DEITEL, 2006, p. 209)

Sintaxe: Vamos modificar o programa visto anteriormente e ao


tipo_funcao nome_funcao(tipo param_1, tipo param_2, invés de utilizar variáveis na chamada da função, vamos usar
tipo param_3) constantes. Veja o programa a seguir.

Onde: FIGURA 3.15: CRIANDO UMA FUNÇÃO COM


tipo_funcao -> diz respeito ao tipo de retorno da PARÂMETROS - USANDO CONSTANTES AO INVÉS DE
função. VARIÁVEIS, NA CHAMADA DA FUNÇÃO.
nome_funcao -> é o nome da função, utilizado para se
referir a ela no decorrer do programa.
tipo -> é o tipo do parâmetro, sendo aceitos todos os
tipos nativos na linguagem C, e os tipos definidos por structs.
param_1 -> é o nome do parâmetro, utilizado para se
referir a ele dentro da função. O nome dele na declaração
da função não precisa ser necessariamente igual ao nome
constante na função chamadora.
Observe, ainda, que temos vários parâmetros e cada um
deles tem o seu tipo e nome definidos individualmente.

Exemplo: Criar um programa que tenha uma função


que recebe dois números inteiros como parâmetros e retorne
o maior dentre os dois. O maior deve ser exibido dentro da Fonte: criação nossa
função main.
FIGURA 3.16: TELA DE SAÍDA DO PROGRAMA
FIGURA 3.13: CRIANDO UMA FUNÇÃO COM REPRESENTADO PELA FIGURA 3.15.
PARÂMETROS

Fonte: criação nossa Fonte: criação nossa


Depois de informar os valores 6 e 2, temos a seguinte a) Parâmetros por referência
saída: Segundo Schildt (1997).
Linguagem de Programação II 20
Nesse caso o endereço de um argumento é
copiado no parâmetro. Dentro da sub-rotina,
o endereço é usado para acessar o argumento
real utilizado na chamada. Isso significa que
alterações feitas no parâmetro afetam a variável
usada para chamar a rotina (SCHILDT, 1997,
p.140).

Sintaxe:
tipo_funcao nome_funcao(tipo *param_1, tipo
*param_2, *tipo param_3)
Fonte: criação nossa
Onde:
tipo_funcao -> diz respeito ao tipo de retorno da Até agora vimos como passar variáveis com cópia e
função. ponteiros para a função. Agora, vamos ver como enviar
nome_funcao -> é o nome da função, utilizado para se vetores para serem manipulados dentro dela.
referir a ela no decorrer do programa.
tipo -> é o tipo do parâmetro, sendo aceitos todos os c) Vetores como parâmetros
tipos nativos na linguagem C, e os tipos definidos por structs. Sabemos que vetores são estruturas diferentes de
param_1 -> é o nome do parâmetro, utilizado para variáveis, principalmente por sua formação. Vetores como
se referir a ele dentro da função. Observe que o nome do parâmetros também o são, visto que uma vez alterado dentro
parâmetro é precedido por asterisco, que indica que o da função, essa alteração será permanente, então não temos
parâmetro param_1 é um ponteiro para uma variável (que como enviar uma cópia do vetor para a função, ele sempre
consta na chamada da função). Assim que esta instrução for será enviado por referência.
executada, param_1 vai receber o endereço da variável que
consta na chamada na função e não o seu valor. Exemplo: Criar um programa que tenha um vetor de
cinco elementos de inteiros. O programa deverá ter uma
Exemplo: Criar um programa que tenha uma função função que calcule o quadrado de cada um dos valores do
sem retorno, que recebe um número inteiro como parâmetro, vetor.
e soma dez ao valor dele. O valor final deve ser exibido dentro
da função main. FIGURA 3.19: CRIANDO UMA FUNÇÃO COM VETOR
COMO PARÂMETRO
FIGURA 3.17: CRIANDO UMA FUNÇÃO COM
PARÂMETROS POR REFERÊNCIA

Fonte: criação nossa

Veja a saída do programa na figura a seguir, observe


que os números foram exibidos dentro da main e estão
Fonte: criação nossa ao quadrado mesmo sem termos enviado o vetor como
parâmetro por referência:
Depois de informar o número cinco, a saída do programa
será como na figura abaixo: FIGURA 3.20: TELA DE SAÍDA DO PROGRAMA
REPRESENTADO PELA FIGURA 3.19.
FIGURA 3.18: TELA DE SAÍDA DO PROGRAMA
REPRESENTADO PELA FIGURA 3.17.
21

Vale a pena acessar

• http://www.inf.pucrs.br/~pinho/LaproI/Funcoes/
AulaDeFuncoes.ht

Autoavaliação
Fonte: criação nossa
Veja se aprendeu a Aula 03 respondendo o questionário autoavaliativo.
Depois confira o resultado das respostas, disponível na ferramenta
Arquivos da plataforma.
Retomando a aula
1. Criamos função para que seja possível organizar
melhor o programa.
( ) Verdadeiro ( ) Falso
Vamos relembrar um pouco do que vimos na aula 3?

2. Uma função deve ser criada, quando uma tarefa


específica deve ser realizada.
1 - Chamada para a função ( ) Verdadeiro ( ) Falso
Vimos como realizar as chamadas para a função, que sem
ela, a função não será executada, e que a ordem da chamada
interfere diretamente no resultado do programa. Por isso, é 3. Variáveis criadas dentro de uma função podem ser
importante avaliar o local onde ela é realizada. acessadas dentro de outra função.
( ) Verdadeiro ( ) Falso
2 - Função sem retorno
Funções sem retorno são definidas pelo tipo void que
é vazio, então, elas não retornam nada. São mais usadas para 4. Na passagem de parâmetro por referência o valor da
imprimir resultados, ou textos, do que para realizar cálculos e variável é alterado
operações mais complexas. mesmo dentro da função chamadora.
( ) Verdadeiro ( ) Falso
3 - Função com retorno
Quando o resultado de um cálculo ou operação que é
realizado dentro da função, precisa ser manipulado dentro da 5. Podemos ter mais de uma função em um único
função chamadora, criamos uma função com retorno. Assim programa. ( ) Verdadeiro ( ) Falso
é possível enviar esse resultado para onde a chamada para a
função foi realizada. 6. Vetores sempre são passados como parâmetros por
referência.
4 - Parâmetros de função ( ) Verdadeiro ( ) Falso
Parâmetro ou argumento de função, é um mecanismo
criado para que seja possível enviar valores de uma função 7. Podemos enviar uma constante como parâmetro por
à outra. Quando surgir a necessidade de enviar alguma referência.
informação para uma função a ser calculada ou manipulada ( ) Verdadeiro ( ) Falso
dentro dela, enviamos essa informação como parâmetro.
8. Podemos ter mais de uma função com o mesmo nome
dentro de um mesmo programa.
( ) Verdadeiro ( ) Falso
Vale a pena
9. Variáveis globais não podem ser acessadas dentro de
uma função específica.
( ) Verdadeiro ( ) Falso
Vale a pena ler
Leia o capítulo 6 do livro C, Completo e Total.

Você também pode gostar