Baixe o app para aproveitar ainda mais
Prévia do material em texto
Linguagem C Funções e Procedimentos Aula 10 Funções matemáticas Fornece um conjunto de funções para operações matemáticas, tais como funções trigonométricas, hiperbólicas, logaritmos, potência e arredondamentos. Todas as funções da biblioteca math.h retornam um valor do tipo double. abs: Valor absoluto de um número inteiro. Definida na biblioteca stdlib.h abs(<número>); abs(-4); abs(4); abs(num); abs(num/2); abs(-num); Valor absoluto fabs: Valor absoluto de um número real. Definida na biblioteca math.h fabs(<número real>); fabs(-4.123); fabs(4./9.); fabs(num); fabs(num/.2); fabs(-num); Valor absoluto pow(base, expoente); // base^(expoente) exp(num); // e^(num) Potenciação pow: operação de potenciação. exp: número neperiano elevado ao argumento. Definidas na biblioteca math.h log(valor); log10(valor); log2_10 = log(10)/log(2); Logaritmo Definidas na biblioteca math.h log: logaritmo natural (base neperiana). log10: logaritmo na base 10. sqrt(número); Raiz quadrada sqrt: raiz quadrada (square root). Definida na biblioteca math.h sin(angulo); cos(angulo); tan(angulo); Funções Trigonométricas Definidas na biblioteca math.h sin: seno de um ângulo. cos: cosseno de um ângulo. tan: tangente de um ângulo. asin(valor); acos(valor); atan(valor); Funções Trigonométricas Definidas na biblioteca math.h asin: arco-seno de um valor. acos: arco-cosseno de um valor. atan: arco-tangente de um valor. sinh(valor); cosh(valor); tanh(valor); Funções Trigonométricas Hiperbólicas Definidas na biblioteca math.h sinh: seno hiperbólico de um valor. cosh: cosseno hiperbólico de um valor. tanh: tangente hiperbólica de um valor. Arredondamento round: arredonda para o inteiro mais próximo. ceil: arredonda para o menor inteiro maior que o número. floor: arredonda para o maior inteiro menor que o número. srand(valor inteiro); rand(); Criar números aleatórios Para criar números aleatórios, pode-se utilizar as funções srand() e rand(), definidas na biblioteca stdlib.h. A função rand criar um número aleatório entre zero e RAND_MAX, definido no própria biblioteca stdlib.h. A função srand especifica o valor inicial (semente) do criador de números aleatórios. srand(time(NULL)); num_aleat = rand() % 101; Criar números aleatórios Para criar números aleatórios entre 0 e N-1, basta obter o resto da divisão do resultado de rand() por N. Para criar diferentes sequências de números a cada execução do programa, pode-se utilizar a hora do sistema como semente. A hora do sistema é obtida pela função time() (definida na biblioteca time.h). Procedimentos – são estruturas que agrupam um conjunto de comandos, que são executados quando o procedimento é chamado. Funções – são procedimentos que retornam um valor ao seu término. Procedimentos e Funções Porque utilizar procedimentos e funções? Evitam que os blocos do programa fiquem grandes demais e mais difíceis de ler e entender. Ajudam a organizar o programa. Permitem reaproveitamento de códigos construídos anteriormente. Evitam repetição de trechos de códigos, minimizando erros e facilitando alterações. Funções e Procedimentos A escolha de nome de uma função obedece às regras apresentadas para a designação de variáveis. O nome de uma função deve ser único (não pode ser igual ao nome de outra função. O nome de uma função deve especificar aquilo que a função na realidade faz e deve ser de fácil leitura e interpretação. <tipo> nome_da_função (<tipo> arg1, <tipo> arg2, ..., <tipo> argN) { <corpo da função> return valor_de_retorno; } Funções :: Como declarar int soma(int a, int b) { int c; c = a + b; return c; } Exemplo de uma função: Funções :: Como declarar int soma(int a, int b) { int c; c = a + b; return c; } Funções :: Como declarar Toda função deve ter um tipo (char, int, float), o qual indicará o tipo de seu valor de retorno (saída). Os argumentos (ou parâmetros) indicam o tipo e quais valores são esperados para serem manipulados pela função (entrada). Corpo da função int random() { srand(time(NULL)); return (rand() % 100); } Uma função pode não ter argumentos, basta não informá-los. Exemplo: Funções :: Como declarar A expressão contida no comando return é chamado de valor de retorno da função. Esse comando é sempre o último a ser executado por uma função. Nada após ele será executado. As funções só podem ser declaradas fora de outras funções. Lembre-se que o corpo do programa principal (main()) é uma função! Funções :: Como declarar O código de uma função só é executado quando é invocada algures no programa a que está de algum modo ligada. Sempre que uma função é invocada, o programa que o invoca é “suspenso” temporariamente. Em seguida são executadas as instruções presentes no corpo da função. O programa que invoca uma função pode enviar argumentos, que são recebidos pela função. Funções :: Invocar A forma clássica de realizarmos a invocação (ou chamada) de uma função é atribuindo o seu valor a uma variável: Na verdade, o resultado da chamada de uma função é uma expressão, que pode ser utilizada em qualquer lugar que aceite uma expressão: resultado = soma(x,y); printf("Soma: %d\n", soma(a,b) ); Ou if(soma(a,b)>0) Funções :: Invocar int x, y, resultado; int soma(int a, int b){ return (a + b); } int main(){ x = 3; y = 5; resultado = soma(x, y); printf("%d\n", resultado); } Funções :: Invocar Função que calcula a soma dos valores de x e y: As variáveis x e y no exemplo anterior são chamadas de parâmetros reais. Conforme exemplo anterior, os argumentos não possuem necessariamente os mesmos nomes que os parâmetros que a função espera. Seus valores são apenas copiados para a função chamada, sem ser afectados pelas alterações nos parâmetros dentro da função. Funções :: Invocar Exercício Escreva um programa que calcule a medida da hipotenusa de um triângulo retângulo a partir dos comprimentos dos respetivos catetos. Explicações: A função hipotenusa tem dois argumentos reais. Repare como se definem os argumentos: para cada um deles é preciso indicar o seu tipo, separadamente. Dentro da função main definem-se duas variáveis. A forma de definir variáveis é um pouco diferente da forma de definir argumentos e já se permite indicar o tipo apenas uma vez. A segunda diretiva include permite que este programa tenha acesso às funções da biblioteca matemática do C, uma biblioteca chamada math. O nosso programa precisa de usar a função sqrt(squareroot). O tipo void É utilizado em procedimentos. É um tipo que representa o “nada”, ou seja: uma variável desse tipo armazena conteúdo indeterminado, uma função desse tipo retorna um conteúdo indeterminado. Indica que uma função não retorna nenhum valor, ou seja, é um procedimento. void nome_do_procedimento (<tipo> parâmetro1, <tipo> parâmetro2, ..., <tipo> parâmetroN) { <corpo do procedimento> } Procedimentos :: Como declarar void calcula_dobro(int x) { printf("Dobro de x: %d", 2*x); } Exemplo de procedimento: Procedimentos :: Como declarar Para invocarmos um procedimento, devemos utilizá-lo como qualquer outro comando: Verifique a diferença da invocação de uma função: procedimento(parâmetros); resultado = função(parâmetros); Procedimentos :: Invocar Exercício Crie uma função que receba um valor diferente de 0 e informe se ele é positivo ou não. Escreva um programa de teste da função. É uma função especial invocada automaticamente pelo sistema operativo (SO) ao iniciar o programa. Quando utilizado, o comando return informa o SO que programa funcionou corretamente ou não. Por defeito uma função devolve: = zero – caso tenha funcionado corretamente , ≠ zero – caso contrário. A função main() Funções e procedimentos podem ser definidosantes ou depois da função main(). Em ambos os casos, as funções e/ou procedimentos devem ser declarados antes da função main(). O conjunto de comandos que constituem uma função ou procedimento pode ser definido em qualquer lugar do programa. Declaração de funções e procedimentos sem defini-los <tipo> nome (<tipo> parâmetro1, <tipo> parâmetro2, ..., <tipo> parâmetroN); Para declarar uma função sem defini-la (especificar seu código), substituímos as chaves e seu conteúdo por ponto-e-vírgula. Declaração de funções e procedimentos sem defini-los A declaração da função também é chamado de Protótipo da função Uma variável é chamada local quando é declarada dentro de uma função. Nesse caso: Ela existe apenas dentro da função que a contém. Após o término da execução da função, ela deixa de existir. Uma variável é chamada global quando é declarada fora de qualquer função. Nesse caso: Pode ser acedida em qualquer parte do programa. Ela existe durante toda a execução do programa. Variáveis locais e globais Boa prática de programação: Deve-se evitar a utilização de variáveis globais. As funções devem modificar apenas as suas variáveis locais e as variáveis passadas a elas como parâmetros. Variáveis locais e globais O escopo de uma variável determina de que partes do código a variável pode ser acedida. A regra de escopo em C é simples: As variáveis globais são visíveis por todas as funções. As variáveis locais são visíveis apenas na função onde foram declaradas. Escopo de variáveis int nota; void funcao() { int nota; // Neste ponto, nota é variável local. } Escopo de variáveis É possível declarar variáveis locais com o mesmo nome de variáveis globais. Nesta situação, a variável local “Cobre” a variável global. Questões
Compartilhar