Funções Suponha um conjunto habitacional, com várias famílias...... imagina se todas elas morassem em uma única casa? Funções Introdução à Computação 1 de 28
Funções Na Programação, funções são conjuntos de instruções que realizam tarefas específicas do programa Foram criadas a partir das funções matemáticas Tem como objetivo: Produzir um valor para o programa principal ou para outras funções Reproduzir um trecho de código que possa ser repetido em vários locais de um ou mais programas Funções Introdução à Computação 2 de 28
Principais Vantagens Divide o programa em unidades menores, facilitando a compreensão, visualização e depuração Evita a repetição de trechos do código Reutilização de código já construído Construção de programas complexos a partir de módulos (bibliotecas) Funções Introdução à Computação 3 de 28
Você Sabia... Os principais comandos em C são funções: printf(), scanf(), gets(), puts(), system() O comando main() é uma função Aliás, é a principal função do código Sem ela, o programa não será executado Assim como as variáveis, as funções devem ser declaradas antes de serem utilizadas Devem ser construídas separadamente Funções Introdução à Computação 4 de 28
Construção de uma Função Uma função deve ser construída da seguinte maneira: Tipo estruturado de dados tipo nome (tipo1 argumento1, tipo2 argumento2,...) declaração de variáveis locais; Nome da função (único no programa) comandos executados pela função; Comandos a específicos a serem executados pela função Todos os comandos devem sempre ser colocados entre chaves Argumentos da função (os "dados de entrada") Declaração de variáveis que serão utilizadas APENAS na função Funções Introdução à Computação 5 de 28
O Comando return O comando return retornará ao programa um único valor calculado pela função Normalmente, é o último comando da função É sempre acompanhado por um valor De acordo com o tipo estruturado estabelecido para a função, que poderá ser Primitivo (int, char, float) Vetor ou matriz Definido pelo usuário (struct) Ponteiro Funções Introdução à Computação 6 de 28
Passagem de Argumentos Após o nome da função, são empregados os argumentos da mesma São utilizados como parâmetros de entrada da função Não é necessário fazer declarações da mesma no meio das variáveis Quando a função é chamada, ao ser inseridos os valores entre parênteses, a função trabalhará com os mesmos Devem obedecer o tipo estruturado estabelecido Funções Introdução à Computação 7 de 28
Exercício cio Definir o caractere e o tamanho para desenhar uma linha na tela ======================... Aqui as linhas resultantes dos comandos. *--------------------------------------------------* Funções Introdução à Computação 8 de 28
Exercício cio #include <stdio.h> #include <stdlib.h> void linha(int n, char c) int i; for (i = 0; i < n; i++) printf("%c", c); printf("\n"); //programa int main() linha(20, '='); linha(30, '.'); printf("aqui as linhas resultantes dos comandos.\n"); printf("*"); linha(50, '-'); printf("*\n"); system("pause"); Funções Introdução à Computação 9 de 28
Exemplo Construir um programa que calcule o valor de f(x) = x³ - 2x² + 5x 4 a partir de um valor inserido pelo usuário #include <stdio.h> #include <stdlib.h> float x, y; //variáveis globais //função f float f(float x) float val; //variável local val = x*x*x 2*x*x + 5*x 4; return val; //programa int main() printf("entre com o valor de x: "); scanf("%f", &x); y = f(x); //chamada da função printf("f(%f) = %f\n", x, y); system("pause"); Funções Introdução à Computação 10 de 28
Retorno de Funções com Ponteiros Podem ser feitos para vários tipos estruturados como ponteiros String char *residencia (...) char residencia[] (...) Vetor int *valores (...) int valores[] (...) Matriz float **inversa (...) float inversa[][] (...) Funções Introdução à Computação 11 de 28
O tipo void Quando a função não retorna nenhum tipo de valor para o programa, a função é classificada como o tipo void Assim como se fosse um outro tipo, como int, float... Pode ser utilizado em operações onde a própria função leia ou imprima valores envolvidos no programa O comando return não é utilizado Em outras linguagens, as funções deste tipo são denominadas procedimentos (procedures) Funções Introdução à Computação 12 de 28
Exemplo Criar um algoritmo onde tenha uma função que imprima em tela a tabuada de um dado número n. void tabuada(int x) for (i = 1; i <= 10; i++) printf("%3d x %3d = %3d\n", x, i, x*i); int main() printf("entre com um numero: "); scanf("%d", &n); tabuada(n); system("pause"); Funções Introdução à Computação 13 de 28
Exemplo Criar uma função que calcule o fatorial de um número inteiro n int fat(int n) int x = 1; for (i = n; i > 1; i--) x *= i; return x; int main() printf("entre com um numero: "); scanf("%d", &n); printf("%d! = %d\n", n, fat(n)); system("pause"); Funções Introdução à Computação 14 de 28
Exercícios cios 1. Crie funções em um mesmo programa para calcular: 1. PermutaçãoP(n) 2. ArranjoA(n, p) 3. CombinaçãoC(n, p) Funções Introdução à Computação 15 de 28
Exercícios cios 2. Crie um programa que tenha a função f(x) que contenha uma função polinomial a sua escolha. Dado como entrada um intervalo [a, b], crie na linguagem C uma outra função que calcule uma das raízes da função, obedecendo o seguinte algoritmo: repita m (a + b)/2; se f(a)*f(m) < 0 então b m; senão a m; enquanto a b > ε; raiz (a + b)/2; retorne (raiz); Funções Introdução à Computação 16 de 28
Escopo de Variáveis Em miúdos, os filósofos definem ética e moral da seguinte forma: Ética tica: conjunto de valores universais em que o homem deve seguir independentemente de onde estiver Moral: conjunto de valores sucursais em que o homem deve seguir em um determinado local Funções Introdução à Computação 17 de 28
Escopo de Variáveis Tal como é o conceito atrelado entre ética e moral...... pode-se também relacionar isto ao conceito de variáveis utilizadas em um programa As variáveis podem ser divididas em dois tipos: Globais Locais Funções Introdução à Computação 18 de 28
Variáveis Locais São definidas dentro de um bloco de função Existem somente durante a execução da função Apenas podem ser utilizadas dentro da função em que foi declarada Enquanto isso, outras funções não podem utilizá-las Nem mesmo a função main() Os argumentos também são variáveis locais Funções Introdução à Computação 19 de 28
Variáveis Globais São as variáveis definidas fora de qualquer bloco de função São visíveis por qualquer função Podendo ser utilizadas e/ou modificadas por qualquer função Existem durante toda a execução do programa Não são utilizadas quando existe uma variável local hom Funções Introdução à Computação 20 de 28
Exemplo int i; int f1(int n) // f1() tem uma variável local chamada n j = n; //erro: j não foi declarada como variável global ou local de f1()... float f2(int i) // f2() tem uma variável local chamada i int j; // f2() tem uma variável local chamada j i = 2*i; // alterando a variável local i j = f1(i);... int main() // COMECE AQUI float j; // j é variável local de main() i = 1; // alterando a variável global i j = f2(i);// j recebe o resultado retornado pela função f2()... Funções Introdução à Computação 21 de 28
Observação Se existirem variáveis locais e globais com o mesmo nome, a função levará em conta a variável local O valor da variável global não será alterado Variáveis globais permitem que os argumentos de funções sejam omitidos Funções Introdução à Computação 22 de 28
Exemplo Exibir o saldo de gols de uma partida char *time1, *time2; int p1, p2; void letimes() printf("time 1:\n"); gets(time1); //FUNÇÃO PRINCIPAL printf("time 2:\n"); int main() gets(time2); letimes(); void leplacar() leplacar(); mostraplacar(); printf("entre com o placar do jogo:\n"); system("pause"); scanf("%d %d", &p1, &p2); void mostraplacar() printf(" ---PLACAR ELETRONICO---\n"); printf("%s %d X %d %s\n", time1, p1, p2, time2); printf("saldo de gols do time da casa: %d\n", p1-p2); Funções Introdução à Computação 23 de 28
Chamada de Função Existem duas maneiras de se tratar os dados que passam pelos argumentos: Chamada por valor: É passado para o argumento da função o valor da variável As alterações na função não modificam o valor original da variável Chamada por referência: É passado para o argumento da função o endereço da variável As alterações na função modificam o valor original da variável Funções Introdução à Computação 24 de 28
Exemplo Teste como exercício cio e compare) Troca de valores (Teste como exerc //PASSAGEM POR VALOR void troca(int a, int b) //Variável primitiva como argumento int aux; aux = a; a = b; b = aux; printf("funcao: %d %d\n", a, b); int main() int i = 2, j = 5; printf("main: %d %d\n", i, j) //É passado o valor troca(i, j); printf("main: %d %d\n", i, j); system("pause"); //PASSAGEM POR REFERÊNCIA void troca(int *a, int *b) //Ponteiro como argumento int aux; aux = *a; *a = *b; *b = aux; printf("funcao: %d %d\n", *a, *b); int main() int i = 2, j = 5; printf("main: %d %d\n", i, j); //É passado o endereço troca(&i, &j); printf("main: %d %d\n", i, j); system("pause"); Funções Introdução à Computação 25 de 28
Recursividade A recursividade é uma estratégia muito utilizada em programação Uma função recursiva é toda aquela que chama a ela própria dentro do seu respectivo bloco Funções Introdução à Computação 26 de 28
Exemplo Calcular o fatorial de um número inteiro utilizando recursividade double fatorial(double x) double val; if ((x == 1) (x == 0)) return 1; else val = x * fatorial(x-1); return val; int main() double n; printf("entre com um numero inteiro:"); scanf("%d", &n); printf("%d! = %d\n", n, fatorial(n)); system("pause"); Funções Introdução à Computação 27 de 28
Exercícios cios 1. Sendo x n = xx n-1, faça uma função recursiva para o cálculo da potência. Assuma potência inteira positiva, e em uma segunda versão, considere também potências negativas. 2. Escreva uma função recursiva MDC() que retorna o máximo divisor comum entre x e y. O M.D.C. de x e y é definido de forma recursiva da seguinte forma: se y = 0 senão MDC(x, y) = x MDC(x, y) = MDC(x, x%y) Funções Introdução à Computação 28 de 28