IFSP Campus Guarulhos TLP Técnica e Linguagem de Programação Prof: Dennis Funções
Dividir para conquistar... René Descartes, em seu tratado O discurso sobre o método, diz que uma das regras para atacar um problema qualquer é: "dividir cada uma das dificuldades em tantas parcelas quantas forem possíveis Fonte: google imagens O uso de subrotinas (chamadas de funções em C) tem eatamente essa idéia: dividir o algoritmo em quantas partes forem possíveis, solucioná-lo em separado e então construir o algoritmo completo.
A função em linguagem C As subrotinas em C são chamadas de funções. A maioria das tarefas eecutas por programas em C são realizadas por funções já definidas em bibliotecas como: printf, scanf, getch, pow, etc... Cada função possui variáveis de entrada e de saída. As variáveis de entrada são dadas pelo programa principal e usadas pela função. As variáveis de saída são dadas pela função e usadas pelo programa principal.
Eemplo de função 2 O programa abaio encontra o quadrado de um número utilizando uma função criada pelo usuário para isso: Float a,b; float quadrado(float ); //prototipo da função printf("digite um numero"); scanf("%f",&a); printf("\n"); b=quadrado(a); printf("o quadrado de %0.2f vale: %0.2f \n",a,b); //função quadrado float quadrado(float )
Eemplo de função 2 : fluograma Quando se usa funções, o fluograma desta fica separado do principal: float,y; float quadrado(float ); //prototipo da função printf("digite um numero"); scanf("%f",&); printf("\n"); y=quadrado(); printf("o quadrado de %0.2f vale: %0.2f \n",,y); //função quadrado float quadrado(float ) INICIO Bem vindo Digite um numero Obtém y=quadrado() O quadrado de vale y Obtém um caractere do teclado FIM quadrado () saida = * retorna saida fim
Variáveis locais e globais Utilizando a idéia de funções podem entender a diferença entre variáveis locais e globais. Uma variável global é declarada fora de qualquer função, mesmo fora da função main. Estas variáveis podem ser utilizadas por qualquer função do programa. Uma variável local é declarada dentro de uma função e só pode ser utilizada dentro desta função.
Variáveis locais e globais float,y; float quadrado(float ); //prototipo da função printf("digite um numero"); scanf("%f",&); printf("\n"); y=quadrado(); printf("o quadrado de %0.2f vale: %0.2f \n",,y); //função quadrado float quadrado(float ) e y são variáveis globais, portanto podem ser utilizadas tanto pela função main quanto pela função quadrado. saida é uma variável local, portanto só pode ser utilizada pela função quadrado.
Variáveis locais e globais Como é uma variável global, os dois códigos são equivalentes. No entanto o recomendado é o código a esquerda, pois a função não depende de variáveis globais para funcionar e, consequentemente pode ser utilizada mais facilmente em outros códigos. float,y; float quadrado(float ); printf("digite um numero"); scanf("%f",&); printf("\n"); y=quadrado(); printf("o quadrado de %0.2f vale: %0.2f \n",,y); float quadrado(float ) float,y; float quadrado(); printf("digite um numero "); scanf("%f",&); printf("\n"); y=quadrado(); printf("o quadrado de %f vale: %f \n",,y); float quadrado()
Variáveis locais e globais No código abaio, como é uma variável local da função main, o programa não funciona pois a função quadrado não reconhece a variável. float quadrado(); float,y; printf("digite um numero "); scanf("%f",&); printf("\n"); y=quadrado(); printf("o quadrado de %f vale: %f \n",,y); float quadrado() Não funciona pois só eiste dentro da função main.
Variáveis locais e globais A partir deste ponto, recomenda-se sempre utilizar variáveis locais, a fim de evitar erros de interpretação da eecução do programa. Por eemplo, no código a seguir: float,y; float quadrado(float ); = 2; y=quadrado(4*); printf("o quadrado de %f vale: %f \n",,y); //função quadrado float quadrado(float ) Neste eemplo, a variável global vale 2 mas o parâmetro de entrada da função quadrado é 8. Qual será o valor de y? 4 ou 64?
Variáveis locais e globais A partir deste ponto, recomenda-se sempre utilizar variáveis locais, a fim de evitar erros de interpretação da eecução do programa. Por eemplo, no código a seguir: float,y; float quadrado(float ); = 2; y=quadrado(4*); printf("o quadrado de %f vale: %f \n",,y); //função quadrado float quadrado(float ) Neste eemplo, a variável global vale 2 mas o parâmetro de entrada da função quadrado é 8. Qual será o valor de y? 4 ou 64? Resposta: y irá valer 64. No entanto está claro que esse código dá margem a interpretações erradas e deve ser evitado.
Variáveis locais e globais O código adequado para programas com funções é, portanto aquele que não utiliza variáveis globais e todas as variáveis necessárias a cada função são passadas a ela através dos parâmetros de entrada. float quadrado(float ); float,y; printf("digite um numero "); scanf("%f",&); printf("\n"); y=quadrado(); printf("o quadrado de %f vale: %f \n",,y); float quadrado(float ) Note que é na verdade duas variáveis locais completamente diferentes, ocupando posições diferentes na memória! Esta variável apenas eiste e ocupa espaço na memória durante a eecução da função quadrado.
#include<stdio.h> #include<conio.h> #include<math.h> float delta(float v1,float v2,float v3); int main() float a, b, c, 1, 2; printf("este programa calcula a equacao do segundo grau com funcoes"); printf("digite os valores de a, b e c \n"); scanf("%f",&a); scanf("%f",&b); scanf("%f",&c); if (a==0) printf("equacao de 1 grau com = %f",-c/b); else printf("delta = %f",delta(a,b,c)); if (delta(a,b,c)<0) printf("nao eistem solucoes reais"); else 1 = (-b+sqrt(delta(a,b,c)))/(2*a); 2 = (-b-sqrt(delta(a,b,c)))/(2*a); printf ("As solucoes sao: 1 = %f e 2 = %f",1,2); float delta(float v1,float v2,float v3) float d; d=v2*v2-4*v1*v3; return d; Eemplo 2: Eq 2º grau
Eercícios: 1 Faça um programa com fluograma que, utilizando uma função calcula ^y, sendo y um numero inteiro positivo qualquer. Obs. Não utilize a função pow. 2 Utilizando a função do eercício anterior, faça um programa, com fluograma que calcula o valor de z dado : z 4 3 2 3- Faça um programa com fluograma que, utilizando uma função calcula o fatorial de um número dado pelo usuário. 4 Utilizando a função fatorial do eercício anterior, faça um programa, com fluograma que descobre o resultado da seguinte epressão com 9 casas decimais de precisão. Qual o resultado? 1 1 0! 1! 1 2! 1 3! 1 4! 1... 5! Etra Faça um programa com fluograma que calcula o seno de um numero real dado pelo usuário utilizando a epressão abaio. Não use funções matemáticas prontas, cries as funções de potencia e fatorial. 3 5 7 9 11 seno( ) 3! 5! 7! 9!... 11!