Buscar

Aula 7 - FUNÇÕES

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 42 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 42 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 42 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

PROGRAMAÇÃO II 
AULA 7 – FUNÇÕES 
 
 
 
 
 
 
CIÊNCIA DA COMPUTAÇÃO 
 
A FUNÇÃO 
Funções são estruturas que permitem ao 
usuário separa seus programas em blocos; 
 
Para fazermos programas grandes e 
complexos temos de construí-los bloco a 
bloco. 
 
Forma geral: 
 2 
A FUNÇÃO 
O tipo de retorno é o tipo da variável 
que a função vai retornar; 
 Default é int; 
 
A declaração de parâmetros é uma 
lista com a seguinte forma geral: 
 
 
Repare que o tipo deve ser 
especificado para cada uma das N 
variáveis; 
3 
A FUNÇÃO 
Na declaração de parâmetros que 
informamos ao compilador quais 
serão as entradas da função; 
 
Assim como informamos a saída 
no tipo de retorno; 
4 
O COMANDO RETURN 
O comando return tem a seguinte forma 
geral: 
 
 
Quando se chega a uma declaração return a 
função é encerrada imediatamente; 
 
Valor de retorno == o tipo de retorno 
declarado; 5 
6 
PROTÓTIPOS DE FUNÇÕES 
Até agora nos exemplos apresentados, 
escrevemos as funções antes de 
escrevermos a função main(); 
 
Porque o compilador precisa saber com 
antecedência quais são os tipos de 
retorno e quais são os parâmetros das 
funções; 
 
Mas algumas vezes não poderemos nos 
dar ao luxo de escrever nesta ordem; 7 
PROTÓTIPOS DE FUNÇÕES 
Muitas vezes teremos o nosso programa 
espalhado em diversos arquivos; 
 
Ou seja, estaremos chamando funções 
em um arquivo que serão compiladas em 
um outro arquivo. Como manter a 
coerência? 
 
A solução são os protótipos de funções 
 
8 
PROTÓTIPOS DE FUNÇÕES 
Protótipos são nada mais, nada menos, 
que declarações de funções; 
 
Possui o seguinte formato: 
 
 
Onde o tipo-de-retorno, o nome-da-função 
e a declaração de parâmetros, são os 
mesmos que você pretende utilizar na 
função; 
9 
10 
PROTÓTIPOS DE FUNÇÕES 
TIPO VOID 
Em inglês void quer dizer vazio e é isto 
mesmo que o void é; 
 
Ele nos permite fazer funções que não 
retornam nada e também que não tem 
parâmetros! 
11 
ARQUIVOS CABEÇALHOS 
Arquivos cabeçalhos são aqueles que temos 
mandado o compilador incluir no início de 
nossos exemplos e que sempre terminam em 
.h 
 
Já vimos exemplos como stdio.h, math.h, etc; 
 
Estes arquivos na verdade, não possuem os 
códigos completos das funções. Eles só 
contém protótipos de funções; 
 
12 
ARQUIVOS CABEÇALHOS 
O corpo das funções cujos protótipos estão no 
arquivo cabeçalho, estão em um arquivo .c 
já previamente compilado e linkado ao arquivo 
.h; 
 
Se você criar algumas funções que queira 
aproveitar em vários programas futuros, você 
deve escrever arquivos cabeçalhos e 
incluí-los também. 
13 
ARQUIVOS CABEÇALHOS 
O código da função é escrito em um arquivo a parte. 
Vamos chamá-lo de funcoes.c 
14 
ARQUIVOS CABEÇALHOS 
Logo em seguida criamos o arquivo 
cabeçalho (salvar como .h): 
15 
Referenciar o arquivo funcoes.h no 
programa principal, entre “ ”: 
16 
EXERCÍCIO 1 
Escreva um programa que faça uso da função 
EDivisivel(int a, int b), que verifica se a é divisivel 
por b. Além desta função o programa deverá usar: 
Max(int a,int b), que retorna o maior dos parâmetros; 
VMedio(int a, int b), que retorna o valor médio 
(inteiro) entre a e b, você deverá escrever estas 
funções. Organize o seu programa em três arquivos: o 
arquivo exercicio.c, conterá o programa principal que 
deve se utilizar das funções descritas; o arquivo 
func.c conterá o corpo das funções; o arquivo func.h 
conterá os protótipos das funções. 
17 
ESCOPO DE VARIÁVEIS 
 
Escopo é o conjunto de 
regras que determinam o 
uso e a validade de 
variáveis nas diversas partes 
do programa; 
18 
ESCOPO DE VARIÁVEIS 
VARIÁVEIS LOCAIS 
São aquelas que só têm validade dentro 
do bloco no qual são declaradas; 
 
Podemos declarar variáveis dentro de 
qualquer bloco; 
 Um bloco começa  { , e termina } 
 
Poderemos ter quantos blocos quisermos 
com uma variável local chamada X, por 
exemplo; 19 
ESCOPO DE VARIÁVEIS 
VARIÁVEIS LOCAIS 
20 
ESCOPO DE VARIÁVEIS 
PARÂMETROS FORMAIS 
São declarados como sendo as entradas 
de uma função; 
 
Um parâmetro formal é uma variável 
local da função; 
 
Você pode também alterar o valor de um 
parâmetro formal, pois esta alteração não 
terá efeito na variável que foi passada à 
função; 21 
ESCOPO DE VARIÁVEIS 
PARÂMETROS FORMAIS 
Quando o C passa parâmetros para 
uma função, são passadas apenas 
cópias das variáveis; 
 
São realizadas apenas cópias 
dos valores passados para a 
função; 
22 
ESCOPO DE VARIÁVEIS 
VARIÁVEIS GLOBAIS 
São declaradas fora de todas as 
funções do programa; 
 
São conhecidas e podem ser alteradas por 
todas as funções do programa; 
 
Quando uma função tem uma variável 
local com o mesmo nome de uma variável 
global, a função dará preferência à 
variável local; 
 
23 
ESCOPO DE VARIÁVEIS 
VARIÁVEIS GLOBAIS 
 z e k são globais; 
 
No comando z=10; 
que receve o valor 10? 
24 
ESCOPO DE VARIÁVEIS 
VARIÁVEIS GLOBAIS 
Evite ao máximo o uso de 
variáveis globais. 
 
Elas ocupam memória o tempo 
todo (as locais só ocupam 
memória enquanto estão sendo 
usadas) e tornam o programa 
mais difícil de ser entendido e 
menos geral; 
25 
PASSAGEM DE PARÂMETRO POR VALOR E 
PASSAGEM DE PARÂMETRO POR REFERÊNCIA 
O que vimos até agora: Quando chamamos 
uma função, os parâmetros formais da 
função copiam os valores dos parâmetros 
que são passados para a função; 
 Não são alterados os valores; 
 
CHAMADA POR VALOR! 
 
Pois, são passados para a função apenas 
os valores dos parâmetros e não os 
próprios parâmetros 
26 
PASSAGEM DE PARÂMETRO POR VALOR E 
PASSAGEM DE PARÂMETRO POR REFERÊNCIA 
27 
PASSAGEM DE PARÂMETRO POR VALOR E 
PASSAGEM DE PARÂMETRO POR REFERÊNCIA 
Outro tipo: Alterações nos parâmetros 
formais, dentro da função, alteram os 
valores das variáveis passadas como 
parâmetros; 
 
CHAMADA POR REFERÊNCIA; 
 
Não se passa para a função os valores das 
variáveis, mas sim suas referências; 
 A função usa as referências para alterar os 
valores das variáveis fora da função; 28 
PASSAGEM DE PARÂMETRO POR VALOR E 
PASSAGEM DE PARÂMETRO POR REFERÊNCIA 
Para alterar as variáveis que são passadas 
para uma função nós podemos declarar seu 
parâmetros formais como sendo ponteiros; 
 
Os ponteiros são a referência que 
precisamos para poder alterar a variável 
fora da função; 
 
O único inconveniente: lembrar de 
colocar um & na frente das variáveis; 
 
 
29 
PASSAGEM DE PARÂMETRO POR VALOR E 
PASSAGEM DE PARÂMETRO POR REFERÊNCIA 
30 
PASSAGEM DE PARÂMETRO POR VALOR E 
PASSAGEM DE PARÂMETRO POR REFERÊNCIA 
 
A função scanf() é uma função 
com chamada por valor ou 
chamada por referência? Pq? 
31 
VETORES COMO ARGUMENTOS DE 
FUNÇÕES 
 Seja 
 
Podemos passar um vetor como 
parâmetro de três formas diferentes; 
 
 
 
 
Nos três casos, teremos dentro de func() um 
int* chamado matrx; 32 
VETORES COMO ARGUMENTOS DE 
FUNÇÕES 
Na realidade estamos passando um 
ponteiro; 
 
Neste ponteiro é armazenado o endereço 
do primeiro elemento do vetor 
 Isto significa que não é feita uma cópia, 
elemento a elemento do vetor; 
 
 Isto faz que possamos alterar o valor dos 
elementos do vetor dentro da função; 33 
VETORES COMO ARGUMENTOS DE 
FUNÇÕES 
34 
EXERCÍCIO 2 
 Faça um programa que contenha um arquivo 
cabeçalho manipulaVetor.h este arquivo deve 
referenciar as seguintes funções: 
 preecheAleatorio(int *vet, int tam)  preenche um 
vetor aleatoriamente com valores de 1 a 100; 
 ordenaVetor(int *vet,int tam)  ordena o vetor em 
ordem crescente; 
 imprimeVetor (int *vet)  imprime todos os valores 
do vetor; 
 O arquivo com a função main deve utilizar todas 
essas funções. Todas operações devem ser feitas 
somente com ponteiros; 35 
EXERCÍCIO 3 
Façaum programa que receba quatro 
valores e armazene-as nas variáveis 
primeiro, segundo, terceiro e quarto. Este 
programa deve conter uma função chamada 
swapOrdenado, em que os valores das 
variáveis serão ordenadas de forma 
crescente e atribuídas as respectivas de 
acordo com o nome e a posição na ordenação 
(utilize o conceito de chamada por 
referência). Os valores das variáveis devem 
ser impressos antes e depois que a função for 
chamada; 
36 
OS ARGUMENTOS ARGC E ARGV 
A função main() pode ter parâmetros formais. O 
programador não pode escolher quais são eles. A 
declaração mais completa é: 
 
Sendo argc um inteiro que possui o número de 
parâmetros que foi passado junto com 
executável; 
 
E argv uma matriz de Strings com os 
parâmetros passados; 37 
OS ARGUMENTOS ARGC E ARGV 
PROJETO 1 
 O programa deverá executar com os seguintes 
parâmetros: 11 05 2012 
38 
RECURSIVIDADE 
Uma função que pode chamar a si 
própria; 
 
CUIDADO. A primeira coisa a se 
providenciar é um critério de 
parada. 
 
Como seria uma função recursiva 
que calcule o fatorial de um número? 
39 
RECURSIVIDADE 
40 
RECURSIVIDADE 
A recursividade deve ser evitada sempre 
que possível; 
 
Pois se usada incorretamente, tende a 
consumir muita memória e ser lenta; 
 
Com funções recursivas a memória do 
computador pode se esgotar 
rapidamente; 41 
EXERCÍCIO 4 
 Faça um programa que contenha um arquivo 
cabeçalho calculaMatriz.h este arquivo deve 
referenciar as seguintes funções: 
 void preecheAleatorio(int matriz[ ][ ], int linhas, int 
colunas)  preenche uma matriz aleatoriamente com 
valores de 1 a 100 (Ex: uma matriz 10x10); 
 float* mediaMatriz(int matriz[ ][ ], int linhas, int colunas) 
 retorna um vetor com as médias de cada coluna da 
matriz; 
 int* maiorMatriz (int matriz[ ][ ], int linhas, int colunas) 
 retorna um vetor com os maiores valores de cada coluna; 
 O arquivo com a função main deve utilizar todas essas 
funções. Todas operações devem ser feitas somente 
com ponteiros; 
 
42

Outros materiais