Baixe o app para aproveitar ainda mais
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
Compartilhar