A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Funções Universidade Federal de Ouro Preto - UFOP

Apresentações semelhantes


Apresentação em tema: "Funções Universidade Federal de Ouro Preto - UFOP"— Transcrição da apresentação:

1 Funções Universidade Federal de Ouro Preto - UFOP
Departamento de Computação - DECOM Programação de Computadores I – BCC701 Funções

2 Para que servem funções?
Modularização do código: Divisão do problema em subproblemas Encapsulamento de detalhes de implementação Maior legibilidade do código Maior facilidade de depuração do código Reaproveitamento de código Desenvolvimento de programas top-down DCC

3 Scilab e funções Já usamos muitas funções pré-definidas
modulo(x,y) abs(x) plot2d(X,Y) gsort... E agora sabemos como definir novas funções!!!!

4 Funções e Reaproveitamento de Código
DCC

5 Cálculo do número de combinações
Defina uma função combinações que receba como parâmetros 2 inteiros n e k e retorne o número de combinações de n objetos em grupos de k objetos, dado pela fórmula DCC

6 Fatorial – Reaproveitamento do Código
Para reaproveitar o código devemos adaptá-lo para o cálculo dos fatoriais de n, n-k e k fat = 1; for i = 1:n fat = fat*i; end DCC

7 Combinações n/k - Monolítico
n=input("n="); k=input("k="); fat_n = 1; // Cálculo do fatorial de n for i = 1:n fat_n = fat_n * i; end fat_n_k = 1; // Cálculo do fatorial de n-k for i = 1:(n-k) fat_n_k = fat_n_k * i; fat_k = 1; // Cálculo do fatorial de k for i = 1:k fat_k = fat_k * i; nComb = fat_n/(fat_n_k * fat_k) DCC

8 Combinações n/k - Modularizado
Função combinacoes nComb = fatorial(n)/(fatorial(n-k) * fatorial(k)) Uso do Módulo Função Fatorial function fat = fatorial(n) fat = 1; for i = 1:n fat = fat*i; end endfunction Detalhes do Módulo DCC

9 Forma e Funcionamento DCC

10 function fat = fatorial(n) fat = 1; for i = 1:n fat = fat*i; end
Parâmetros Formais function fat = fatorial(n) fat = 1; for i = 1:n fat = fat*i; end endfunction DCC

11 function fat = fatorial(n) fat = 1; for i = 1:n fat = fat*i; end
Parâmetros Formais function fat = fatorial(n) fat = 1; for i = 1:n fat = fat*i; end endfunction Parâmetro de Entrada É fornecido na chamada da função Parâmetro de Saída É calculado pela função DCC

12 Funções com mais de um parâmetro de saída
function [r1, r2] = eq2g(a,b,c) delta = b^2 - 4*a*c r1 = (-b + sqrt(delta))/(2*a) r2 = (-b - sqrt(delta))/(2*a) endfunction Chamada da função eq2g [raiz1,raiz2] = eq2g(x,y,z) DCC

13 Chamada de Função Valores dos argumentos de entrada (que podem ser expressões) são copiados sobre os parâmetros da função O controle é transferido para a função, que opera sobre os valores dos parâmetros Os parâmetros da função somente têm existência como variáveis durante a execução da função DCC

14 Execução de Função Alterações feitas pela função sobreos valores dos parâmetros formais não afetam os argumentos passados para a função Variáveis utilizadas pela função não têm nada a ver com variáveis de mesmo nome existentes no programa que chama a função; Estas variáveis locais ganham existência somente durante a execução da função DCC

15 Retorno de Função Os parâmetros de saída (normalmente termos em uma expressão, como em y = 1 + sin(x) ) recebem os valores calculados pela função O controle é devolvido para o ponto de chamada DCC

16 Função Combinacoes com pausas
//Combinações de n k a k exec("fatorial.sci"); n = input("n = "); k = input("k = "); printf("\nAntes da chamada de fatorial(n)"); pause; fat_n = fatorial(n); printf("\nAntes da chamada de fatorial(k)"); fat_k = fatorial(k); printf("\nAntes da chamada de fatorial(n-k)"); pause fat_n_k = fatorial(n-k); Comb_n_k = fat_n/(fat_k * fat_n_k); printf("Comb(%d,%d) = %d",n,k,Comb_n_k) DCC

17 Função fatorial com pausas
function fat = fatorial(v) printf("\nIniciando fatorial(%d)",v); pause; fat = 1; for i = 1:v fat = fat*i end printf("\nTerminando fatorial(%d)",v); endfunction DCC

18 Evolução da pilha de variáveis
DCC

19 Encadeamento de Chamadas
function nComb = Combinacoes(n,k) nComb = fatorial(n)/... (fatorial(n-k) * fatorial(k)) endfunction Nosso programa transformado em função Programa principal exec("Combinacoes.sci") exec("fatorial.sci") n=input("n="); k=input("k="); printf("nComb(%d,%d) = %d",n,k,Combinacoes(n,k)) DCC

20 Encadeamento de Chamadas
Programa Principal Função nComb Função Fatorial DCC

21 Funções como Parâmetros de uma Função
Parâmetros de entrada e de saída de uma função podem ser qualquer coisa: números, strings, booleanos, matrizes de qualquer tipo, e até mesmo outra função! function plotaPontos(f,x) y = f(x); plot2d(x,y); endfunction DCC

22 Funções como Parâmetros de uma Função
function y = minhaFunc(x) y = exp(- x .^ 2); endfunction // Testador PlotaPontos exec(“plotaPontos.sci"); exec(“minhaFunc.sci"); x = 0:0.1:2*%pi; plotaPontos(sin,x); plotaPontos(minhaFunc,x); DCC

23 Funções, Arquivos Fonte e o Scilab
DCC

24 Arquivos com Código de Funções
Uma função é normalmente escrita em um arquivo separado do arquivo com o programa principal O arquivo com a função deve ter o mesmo nome da função a extensão .sci (um programa tem a extensão .sce) Para “incorporar” uma função ao Scilab, use exec(<nome do arquivo com a função>) no programa cliente DCC

25 Arquivo com uma Função DCC

26 O comando exec exec("fatorial.sci") n=input("n="); k=input("k=");
nComb = fatorial(n)/... fatorial(n-k)*fatorial(k) O Scilab só toma conhecimento da existência de uma função através do comando exec O arquivo com a função deve estar no mesmo diretório do programa que chama a função DCC

27 Funções e Desenvolvimento Top-Down
DCC

28 Funções e Desenvolvimento top-down
Técnica: chamada da função antes de seu desenvolvimento O programador deve especificar o resultado desejado da função, postergando o trabalho de determinar como obter este resultado DCC

29 Menor primo ≥ n Sabendo que o conjunto de números primos é infinito,
Construir um programa que lê uma série de números e, para cada número lido, encontra o menor primo que seja maior ou igual a ele Se, por exemplo, o número lido for 4, o programa deve encontrar o número primo 5; se for 11, o programa deve encontrar o próprio 11. O programa deve terminar quando o número lido for menor ou igual a 1 DCC

30 Menor primo ≥ n Programa principal Cuida da interação com o usuário
O problema de encontrar o menor primo ≥ n é “empurrado” para uma função n = input("n = "); while n >= 2 // Encontra o menor primo >= n // e imprime o resultado printf("O menor primo >= %d é %d",... n,menorPrimoMaiorOuIgual(n)) // Lê n n = input("n = (use n < 2 se quiser parar):"); end DCC

31 Menor primo ≥ n Função MenorPrimoMaiorOuIgual
Loop de procura por um primo Não interage com o usuário Empurra o problema de saber se um número é primo para outra função function p = menorPrimoMaiorOuIgual(n) p = n; while ~primo(p) p = p+1 end endfunction DCC

32 Menor primo ≥ n Função Primo function ehPrimo = primo(k)
Testa se um número é primo A saída é booleana: %t se for primo, %f senão Usa a função MenorFator(q) que calcula o menor divisor de q diferente de 1 function ehPrimo = primo(k) ehPrimo = (k == menorFator(k)); endfunction DCC

33 Menor primo >= n Função MenorFator function f = menorFator(q)
Encontra o menor fator de um número Usa a função modulo, que é fornecida pelo Scilab function f = menorFator(q) f = 2; while modulo(q,f) ~= 0 f = f + 1; end endfunction DCC

34 Conclusões Funções são uma ferramenta muito útil de modularização
Seu uso permite o reaproveitamento de código e o encapsulamento de detalhes O uso de funções permite o desenvolvimento gradual de programas por refinamentos sucessivos DCC

35 Exemplo 1 Escreva um programa que faça a leitura de n valores. Para cada valor x lido, o programa deve calcular o valor f(x), onde f é a função definida como f(x) = x – sqrt(x). Os valores f(a) calculados devem ser acumulados em um somatório. Ao final, o programa imprime o valor do somatório calculado.

36 Introdução Exemplo 1 function f = myF(x) f = x - sqrt(x); endfunction n = input("QUANTIDADE DE LEITURAS: "); soma = 0; for i = 1:n x = input("DIGITE UM VALOR: "); soma = soma + myF(x); end printf("\nSOMATÓRIO CALCULADO: %7.3f", soma);

37 Introdução Exemplo 2 Codifique um programa que calcule a série a seguir, onde n é o número de parcelas. Cada parcela contém um numerador e um denominador. O Cálculo de ambos deve ser feito por funções definidas pelo usuário. Ao final o programa imprime o valor da série.

38 Exemplo 2 function res = numerador(x) res = x - sin(x); endfunction
Introdução Exemplo 2 function res = numerador(x) res = x - sin(x); endfunction // function res = denominador(x) res = x^3 - cos(2 * x); // n = input("QUANTIDADE DE PARCELAS: "); soma = 0; for i = 1:n soma = soma + numerador(i) / ... denominador(i); end printf("\nSOMATÓRIO CALCULADO: %7.3f", soma);


Carregar ppt "Funções Universidade Federal de Ouro Preto - UFOP"

Apresentações semelhantes


Anúncios Google