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

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

1 Universidade Federal de Ouro Preto - UFOP Departamento de Computação - DECOM Programação de Computadores I – BCC701 www.decom.ufop.br/moodle.

Apresentações semelhantes


Apresentação em tema: "1 Universidade Federal de Ouro Preto - UFOP Departamento de Computação - DECOM Programação de Computadores I – BCC701 www.decom.ufop.br/moodle."— Transcrição da apresentação:

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

2 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 Já usamos muitas funções pré-definidas modulo(x,y) abs(x) plot2d(X,Y) gsort... E agora sabemos como definir novas funções!!!! 3

4 DCC

5 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 5 DCC

6 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 6 DCC

7 7 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; end fat_k = 1; // Cálculo do fatorial de k for i = 1:k fat_k = fat_k * i; end nComb = fat_n/(fat_n_k * fat_k)

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

9 9

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

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

12 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 [raiz1,raiz2] = eq2g(x,y,z) Chamada da função eq2g 12 DCC

13 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 13 DCC

14 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 14 DCC

15 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 15 DCC

16 16 //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)"); pause; 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)

17 DCC 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); pause; endfunction

18 DCC

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

20 20 Programa Principal Função nComb Função Fatorial

21 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 21 DCC

22 22 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);

23 DCC

24 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( ) no programa cliente 24 DCC

25 25 DCC

26 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 exec("fatorial.sci") n=input("n="); k=input("k="); nComb = fatorial(n)/... fatorial(n-k)*fatorial(k) 26 DCC

27 27

28 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 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 29 DCC

30 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 30 DCC

31 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 31 DCC

32 Função Primo 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 32 DCC

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

34 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 34 DCC

35 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. 35

36 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); 36 Introdução

37 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. 37 Introdução

38 function res = numerador(x) res = x - sin(x); endfunction // function res = denominador(x) res = x^3 - cos(2 * x); endfunction // 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); 38 Introdução


Carregar ppt "1 Universidade Federal de Ouro Preto - UFOP Departamento de Computação - DECOM Programação de Computadores I – BCC701 www.decom.ufop.br/moodle."

Apresentações semelhantes


Anúncios Google