Você está na página 1de 29

Aula 02 - Funções

UNIFAE
Prof.ª Luciana
Modularização
• Até o momento todos os programas que construímos
possuíam somente a função main(). Isso faz com que
tenhamos:
– Programas cada vez maiores
– Repetição de trechos de código
• Como atacar um problema de cada vez?
– "Dividir‐para‐conquistar": dividir problemas em subproblemas
menores e mais tratáveis, e se ainda for muito complexo, divide‐se
em subproblemas ainda menores e assim sucessivamente.
• Como evitar repetições?
– Modularização
Modularização
• Em C é possível criar módulos de código que
desempenham alguma tarefa específica. Esses
módulos são chamados de funções.
• Funções podem ou não retornar um valor.
• Um programa pode possuir várias funções, mas
todos os programas em C devem possuir a função
principal (main), pois é ela que controla a execução
de outras funções.
Vantagens da modularização
• Evitar a repetição do mesmo trecho de código.
• Reaproveitar código existente.
• Facilitar modificações.
• Organizar programas em partes que podem
ser compreendidas isoladamente.
• Melhorar a estruturação do programa.
• Facilitar o entendimento do programa.
Funções
• Uma função também é chamada de subprograma
– Um subprograma não pode ser executado
diretamente.
– Ele precisa ser "invocado" ou "chamado" pelo
programa principal.
– Esta chamada desvia o fluxo de controle para
o subprograma.
– Um subprograma pode invocar outro
subprograma e assim sucessivamente.
Funções: desvio de fluxo
Escopo de variáveis
• O escopo das variáveis determina quais funções devem
reconhecer certas variáveis.
• Se uma função reconhece uma variável, a variável é
visível a esta função.
• O escopo das variáveis as protege de serem alteradas
inadvertidamente por outras funções.
– Uma função não deve ver ou alterar uma variável a
que não tenha acesso.
• Uma variável local pode ser vista apenas no bloco
dentro da função na qual foi definida.
Escopo de variáveis
• A variável não pode ser usada, alterada ou
apagada a partir de nenhuma outra função sem
técnicas especiais de programação.
• As variáveis podem ser locais ou globais:
– As variáveis declaradas dentro de funções ou
blocos de comandos são chamadas de variáveis
locais.
– As variáveis declaradas fora de todas as
funções são chamadas de variáveis globais.
Variáveis locais
• Passam a existir quando do início da execução do bloco onde
foram definidas e são destruídas ao final da execução do bloco
(tempo de vida).
• Todas as variáveis que serão usadas dentro de um bloco de
comandos precisam ser declaradas antes do primeiro comando do
bloco.
– Um bloco se inicia em um "{" e termina em um "}".
– Uma variável local só pode ser referenciada, ou seja usada,
dentro do bloco onde foi declarada.
• Como as variáveis locais deixam de existir ao final da execução da
função ou bloco, elas são invisíveis para outras funções ou blocos do
mesmo programa.
Variáveis locais
• Declarações de variáveis, incluindo sua
inicialização, podem vir logo após o abre chaves
que inicia um bloco de comandos, não somente
o que começa uma função.
• Este código está correto?
Variáveis globais
• As variáveis globais são definidas fora de qualquer
bloco e são visíveis para qualquer função.
• O uso de variáveis globais pode prejudicar a
confiabilidade dos programas uma vez que a variável
fica acessível em qualquer ponto do programa
– Uma variável global pode ser modificada em
qualquer parte do programa.
– Uma variável global ocupará espaço na memória
até o fim da execução do programa.
Declaração de funções
• Toda função em C deve ser declarada (protótipo da
função) ou criada antes da função principal (main).
• A declaração da função deve conter o tipo do valor a
ser retornado pela função, o nome da função e os
tipos dos parâmetros que precisam ser fornecidos
em uma chamada da função.
• O corpo da função contém o cabeçalho completo da
função, bem como a implementação das tarefas da
função.
• Estrutura Geral:
tipo nome_da_funcao (lista de parametros);
Declaração de funções
• Exemplo
Declaração de funções
• Lista de parâmetros
– Após o nome da função e deve estar entre parênteses
– Na declaração basta indicar os tipos dos parâmetros
separados por vírgula
• Retorno
– Tipo do valor retornado especificado na definição
– Quando não indicado, assume‐se retorno do tipo inteiro
– O comando return indica o valor retornado pela função
– Este valor pode ser representado por uma constante, uma
variável ou por expressões, respeitando o tipo
– Uma função encerra assim que encontra o comando return
Passagem de parâmetros por valor
• Passagem de parâmetros por valor significa que, para a
execução da função, serão geradas cópias dos valores de
cada um dos parâmetros.
– Passagem do conteúdo da variável.
– Parâmetro do mesmo tipo da variável.
– Cada variável passada no momento da chamada
será copiada para o parâmetro correspondente da
função, na ordem da declaração.
– Independência entre variáveis e parâmetros.
– Mudanças em parâmetros não afetam as variáveis.
Passagem de parâmetros por valor
Passagem de parâmetros por valor
Tipos de Funções
1. Funções sem passagem de parâmetro e sem
retorno
• Quando a função não tem retorno ela é do tipo void
• Tipo mais simples
• Não recebe nenhum valor na chamada e não retorna
nenhum valor
Exemplo - Funções sem passagem de parâmetro e sem
retorno

void soma()
{
int num1, num2, res;
cout<<"\nDigite o primeiro numero: ";
cin>>num1;

cout<<"\nDigite o segundo numero: ";


cin>>num2;

res = num1+ num2;

cout<<"\nSoma = " << res;

int main(int argc, char** argv) {

soma();
return 0;
}
Tipos de Funções
2. Funções com passagem de parâmetro e sem
retorno
• Recebem valores no momento da chamada
• Não devolvem valores para quem as chamou
Exemplo - Funções com passagem de
parâmetro e sem retorno
void calcula_media(float num1, float num2)
{
float med;

med = (num1+ num2)/2;

printf("\nMedia = %f", med);

int main(int argc, char** argv) {

float n1, n2;

cout<<"\nDigite o primeiro numero: ";


cin>>n1;

cout<<"\nDigite o segundo numero: ";


cin>>n2;

calcula_media(n1,n2);

return 0;
}
Tipos de Funções
3. Funções sem passagem de parâmetros e com
retorno.
• Não recebem valores no momento da chamada
• Mas no final devolvem um valor para quem as chamou
Exemplo - Funções sem passagem de parâmetros e com
retorno.

float multiplica()
{
float num1, num2, produto;
cout<<"\nDigite o primeiro numero: ";
cin>>num1;

cout<<"\nDigite o segundo numero: ";


cin>>num2;

produto = num1*num2;
return produto;

int main(int argc, char** argv) {

float resposta;
resposta = multiplica();
cout<<resposta;

return 0;
}
Tipos de Funções
4. Funções com passagem de parâmetros e com
retorno
• Recebem valores no momento da chamada
• Devolvem valor para quem as chamou
Exemplo - Funções com passagem de parâmetros e com retorno

float divisao(float dividendo, float divisor)


{
float q;
q = dividendo/divisor;
return q;

int main(int argc, char** argv) {

float resposta, num1, num2;


cout<<"\nDigite o primeiro numero: ";
cin>>num1;

cout<<"\nDigite o segundo numero: ";


cin>>num2;

resposta = divisao(num1, num2);


cout<<"\nO resultado = "<<resposta;

return 0;
}
Passagem parâmetros por referência
• Passagem de parâmetros por referência significa que
os parâmetros passados para uma função correspondem a
endereços de memória ocupados por variáveis. Dessa
maneira, toda vez que for necessário acessar um determinado
valor, isso será feito por meio de referência ao seu endereço.
– Passagem do endereço da variável.
– Parâmetro do tipo ponteiro.
– Dependência entre variáveis e parâmetros.
– Parâmetros apontam para o conteúdo das variáveis.
– Mudanças em parâmetros refletem nas variáveis.
Passagem parâmetros por referência
Passagem parâmetros por referência

Você também pode gostar