1 / 30

Universidade Federal de Alagoas – UFAL Centro de Tecnologia – CTEC

Universidade Federal de Alagoas – UFAL Centro de Tecnologia – CTEC. Modularização e funções. Modularização. Uma técnica para resolver problemas complexos é decompor o problema em vários subproblemas. Modularização. Algumas vantagens são:

cicely
Download Presentation

Universidade Federal de Alagoas – UFAL Centro de Tecnologia – CTEC

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Universidade Federal de Alagoas – UFAL Centro de Tecnologia – CTEC Modularização e funções

  2. Modularização • Uma técnica para resolver problemas complexos é decompor o problema em vários subproblemas.

  3. Modularização Algumas vantagens são: • Dividir a complexidade do problema original, simplificando a sua resolução; • Direcionar a atenção a problemas menores em cada vez, permitindo uma melhor compreensão do todo.

  4. A rotina sugerida para modularização de programas é a seguinte: • Divida o problema em suas partes principais; • Analise a divisão; • Se alguma parte ainda estiver complexa, decompô-la também; • Analise o resultado, garantindo entendimento e coerência.

  5. Após a decomposição do problema, pode-se construir sub-algoritmos (scripts) ou módulos para cada subproblema obtido. Módulos (Scripts)

  6. Dividir o problema em suas partes principais; • Analisar a divisão; • Se alguma parte ainda estiver complexa, decompô-la também; • Analisar o resultado, garantindo entendimento e coerência.

  7. Quando temos um problema complexo, como visto, a idéia é, então, subdividí-lo (decompor) em vários subproblemas, utilizando módulos (scripts) para representar, no algoritmo, a decomposição do problema. Construir um módulo significa construir um algoritmo em instâncias menores. O problema do exemplo visto terá 3 módulos:

  8. Módulo 1  Entrada dos dados Módulo 2  a) Cálculo do Novo Sal.; b) Sal./Dia c) Sal./Mês d) Classe Social Módulo 3  saída dos dados

  9. Existe, então, a necessidade de “ligar” os vários scripts do programa. Isso pode ser feito no módulo principal do programa. A execução interna do programa segue as diretrizes abaixo: • Linha 1 – comentário • Linha 2 – chama (executa) o script entrada • Executa todos os comandos desse script • Linha 3 – chama (executa) o script calculos • Executa todos os comandos desse script • Linha 4 – chama o script imprime • Executa todos os comandos desse script Executar o script entrada Módulo Principal Executar o script calculos Executar o script imprime

  10. Para facilitar a troca e evitar uso indevido de informação entre os módulos, em vez de trabalhar a conexão de scripts, introduz-se o uso de funções. Com isso, osmódulospassam a ser funções. Módulos (Funções)

  11. Entrada de dados usando script Entrada de dados usando função Os dois programa desempenham papéis equivalentes. No segundo, apenas foi declarada uma função.

  12. Diferenças entre scripts e funções

  13. Alguns detalhes que devem ser observados no MATLAB: • Uma função é identificada pela palavra-chave function; • Todas as funções têm um nome associado. Neste exemplo, o nome é entrada; • Cada função deve ser armazenada em um arquivo .m separado (um arquivo para cada função); • O nome do arquivo deve ser igual ao nome da função armazenada nele. No exemplo acima, o arquivo deve se chamar entrada.m; • A variável f, que neste problema é um registro, só é válida dentro da função entrada. Dizemos que ela é uma variável local. • Assimcomonos scripts, todafunçãodevetersuasvariáveisestabelecidas antes daexecução de comandosdelasdependentes. • Valores de variáveispodem ser repassadaspormeiodadeclaraçãodafunção.

  14. Funções em MATLAB function [lista de variáveis de saída] = nome (lista de variáveis de entrada) {<instruções para inicialização de variáveis>} {<instruções de execução>} function retorno = nome (entrada) retorno = entrada+10; function W = G(Z) % Z é um vetor 1 x 2 x = Z(1); y = Z(2); W = [x^2-y^2, 2*x*y]; function y = f(x) y = exp(-x/10) + sin(x); function [x,y,z,w] = calcula_ssmd(a,b,c,d) x = a+b; y = a-b; z = c*d; w = c/d;

  15. Na modularização de funções, existe também a necessidade de “ligar” as várias funções do programa. Isso pode ser feito no módulo principal do programa. 1 - % modulo principal 2 - d= entrada; 3 - r=calculos(d); 4 - imprime(r); A execução interna do programa segue as diretrizes abaixo: • Linha 1 – comentário • Linha 2 – chama (executa) a função entrada • Executa todos os comandos dessa função • Linha 3 – chama (executa) a função calculos • Executa todos os comandos dessa função • Linha 4 – chama a função imprime • Executa todos os comandos dessa função

  16. Todas as variáveis criadas dentro de uma função só podem ser usadas na própria função. Elas não existem fora deste contexto. Exemplo: Uso de Variáveis Locais function imprime disp(x); disp(y); disp(z); function teste a=3; b=2; c=a*b; % modulo principal teste; imprime; Está correto??

  17. Como podemos resolver esse problema ?? A solução para resolver problemas como este é o uso de Argumentos de Funções e Valores de Retorno de Funções. Alguns comandos usados até agora são, na realidade, funções pré-definidas pelo próprio Matlab. Como exemplo, podemos citar as funções disp, input, sqrt, mod, sin, cos, log, etc.

  18. Argumentos de Funções • São as variáveis de entrada que as funções vão receber. É por meio delas que as funções recebem dados. Já podemos fazer um exemplo ?? Fazer um programa, usando funções, para ler, calcular e imprimir o produto de dois números.

  19. Exemplo: Fazer um programa, usando funções, para calcular e imprimir o produto de dois números

  20. Resumindo • a, b e c são variáveis locais na função produto; • Na primeira chamada da função produto, o valor 3 é copiado para a variável local a e o valor 5 para b; • As variáveis x e y são validas apenas no módulo principal. Elas não podem ser acessadas dentro da função produto; • Uma função pode ser chamada n vezes; • O número de argumentos de uma função deve ser compatível entre a sua definição e a sua execução.

  21. Mas é desejável que exista uma função especifica para imprimir separadamente o valor do produto. Como resolver ?? Erro: A variável c não está declarada no escopo da função em imprime.

  22. Valores de Retorno de Funções • São as variáveis de saída que as funções vão disponibilizar para outras aplicações. • A solução para resolver o problema acima é a utilização de Valores de Retorno de Funções.

  23. Resumindo • Notas: • x, y e z são variáveis locais no módulo principal; • z armazena uma cópia do valor de retorno da função produto; • a, b e c são variáveis locais na função produto; • a, b e c são variáveis locais na função imprime; • essas variáveis podem conter valores diferentes em ambas as funções.

  24. function [gerados]=nome (recebidos)gerados: lista de nomes de variáveis do programacujosvalorespermitoexportardo workspace da funçãorecebidos: lista de nomes de variáveisquecontémvaloresquenecessitoimportarpara o workspace da função g.m teste.m %modulo principal a=1;b=2;c=2*b; [w,x,y,z]=f(a,b,c); [h]=g(y,z^2); function [s1,s2,s3,s4]=f(e1,e2,e3) s1=e1+e2; s2=e2+10; s3=e3-e2; s4=e1*e3^2; function[c1,c2,c3]=g(i1,i2) c1=i1+1; c2=c1^2; c3=i2-i1; f.m %Workspace a b c

  25. function [gerados]=nome (recebidos)gerados: lista de nomes de variáveis do programacujosvalorespermitoexportardo workspace da funçãorecebidos: lista de nomes de variáveisquecontémvaloresquenecessitoimportarpara o workspace da função g.m teste.m %modulo principal a=1;b=2;c=2*b; [w,x,y,z]=f(a,b,c); [h]=g(y,z^2); function [s1,s2,s3,s4]=f(e1,e2,e3) s1=e1+e2; s2=e2+10; s3=e3-e2; s4=e1*e3^2; function[c1,c2,c3]=g(i1,i2) c1=i1+1; c2=c1^2; c3=i2-i1; f.m %Workspace a b c %Workspace f e1 e2 e3 s1 s2 s3 s4 w x y z

  26. function [gerados]=nome (recebidos)gerados: lista de nomes de variáveis do programacujosvalorespermitoexportardo workspace da funçãorecebidos: lista de nomes de variáveisquecontémvaloresquenecessitoimportarpara o workspace da função g.m teste.m %modulo principal a=1;b=2;c=2*b; [w,x,y,z]=f(a,b,c); [h]=g(y,z^2); function [s1,s2,s3,s4]=f(e1,e2,e3) s1=e1+e2; s2=e2+10; s3=e3-e2; s4=e1*e3^2; function[c1,c2,c3]=g(i1,i2) c1=i1+1; c2=c1^2; c3=i2-i1; f.m %Workspace a b c w x y z

  27. function [gerados]=nome (recebidos)gerados: lista de nomes de variáveis do programacujosvalorespermitoexportardo workspace da funçãorecebidos: lista de nomes de variáveisquecontémvaloresquenecessitoimportarpara o workspace da função g.m teste.m %modulo principal a=1;b=2;c=2*b; [w,x,y,z]=f(a,b,c); [h]=g(y,z^2); function [s1,s2,s3,s4]=f(e1,e2,e3) s1=e1+e2; s2=e2+10; s3=e3-e2; s4=e1*e3^2; function[c1,c2,c3]=g(i1,i2) c1=i1+1; c2=c1^2; c3=i2-i1; f.m %Workspace a b c %Workspace g c3 c2 c1 i1 i2 h w x y z

  28. function [gerados]=nome (recebidos)gerados: lista de nomes de variáveis do programacujosvalorespermitoexportardo workspace da funçãorecebidos: lista de nomes de variáveisquecontémvaloresquenecessitoimportarpara o workspace da função g.m teste.m %modulo principal a=1;b=2;c=2*b; [w,x,y,z]=f(a,b,c); [h]=g(y,z^2); function [s1,s2,s3,s4]=f(e1,e2,e3) s1=e1+e2; s2=e2+10; s3=e3-e2; s4=e1*e3^2; function[c1,c2,c3]=g(i1,i2) c1=i1+1; c2=c1^2; c3=i2-i1; f.m %Workspace a b c h w x y z

  29. function [gerados]=nome (recebidos)gerados: lista de nomes de variáveis do programacujosvalorespermitoexportardo workspace da funçãorecebidos: lista de nomes de variáveisquecontémvaloresquenecessitoimportarpara o workspace da função g.m teste.m %modulo principal a=1;b=2;c=2*b; [w,x,y,z]=f(a,b,c); [h]=g(y,z^2); function [s1,s2,s3,s4]=f(e1,e2,e3) s1=e1+e2; s2=e2+10; s3=e3-e2; s4=e1*e3^2; function[c1,c2,c3]=g(i1,i2) c1=i1+1; c2=c1^2; c3=i2-i1; f.m %Workspace a b c %Workspace f e1 e2 e3 s1 s2 s3 s4 %Workspace g c3 c2 c1 i1 i2 h w x y z

More Related