Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Introdução Programação Em Maple

5,730 views

Published on

Published in: Education, Technology
  • Be the first to comment

  • Be the first to like this

Introdução Programação Em Maple

  1. 1. PROGRAMAÇÃO EM MAPLE ∗ Jeandson correa neves I SEMANA DE MATEMÁTICA
  2. 2. O que é programação? <ul><li>A programação é a arte de fazer com que o computador faça exatamente o que desejamos que ele faça. </li></ul>I SEMANA DE MATEMÁTICA
  3. 3. Tipos de programação no Maple <ul><li>Programação funcional; </li></ul><ul><li>Programação através de procedimentos; </li></ul><ul><li>Programação recursiva. </li></ul>I SEMANA DE MATEMÁTICA
  4. 4. Tópicos de programação <ul><li>Todo procedimento no Maple tem basicamente a seguinte configuração: </li></ul>I SEMANA DE MATEMÁTICA > nome:=proc(...) local x 1 , x 2 , ............. , x n ; global x 1 , x 2 , ........... , x n ; .......................................... .......................................... > end;
  5. 5. <ul><li>Todo procedimento deve iniciar com o comando proc(...) e finalizar com end . </li></ul><ul><li>Para se utilizar um procedimento é conveniente dar-lhe um nome, e isso é feito de maneira usual de atribuição de nomes no Maple. </li></ul>I SEMANA DE MATEMÁTICA
  6. 6. Exemplo <ul><li>> metade:= proc(x) </li></ul><ul><li>> evalf(x/2); </li></ul><ul><li>> end; </li></ul><ul><li>> metade(1/2); </li></ul><ul><li>> metade (10); </li></ul>I SEMANA DE MATEMÁTICA
  7. 7. Exemplo <ul><li>> val_e:= proc(); </li></ul><ul><li>> a:=exp(1); </li></ul><ul><li>> evalf(a); </li></ul><ul><li>End; </li></ul><ul><li>Note que neste procedimento nenhuma entrada de dados é necessária. Dentro de um procedimento os comandos devem terminar com ponto e vírgula. </li></ul>I SEMANA DE MATEMÁTICA
  8. 8. Variáveis local e global <ul><li>>b:=2; </li></ul><ul><li>> val_e:=proc() </li></ul><ul><li>> local b; </li></ul><ul><li>> b:=exp(1); </li></ul><ul><li>> evalf(b); </li></ul><ul><li>>end; </li></ul>I SEMANA DE MATEMÁTICA >b:=2; > val_e:proc(); > global b; > b:=exp(1); > evalf(b); >end;
  9. 9. Estruturas de programação <ul><li>O sistema de programação do Maple inclui estruturas usuais de programação, tais como o “ loops ” e afirmações condicionais que podem ser utilizadas dentro ou fora de um procedimento. </li></ul>I SEMANA DE MATEMÁTICA
  10. 10. O comando “ for” <ul><li>A sintaxe geral no Maple para essa estrutura de programação, conhecida como “loop”, é a seguinte: </li></ul><ul><li>for i from a to b by c do ... Od ; </li></ul><ul><li>i- é variável do loop; </li></ul><ul><li>a- valor inicial ; </li></ul><ul><li>b- valor final ; </li></ul><ul><li>c- é o salto que a variável sofre a cada loop; </li></ul><ul><li>...- expressões a serem executadas. </li></ul>I SEMANA DE MATEMÁTICA
  11. 11. <ul><li>Na estrutura deste comando algumas das clausulas em vermelho são opcionais. Se, por exemplo, omitimos o from ou o by eles serão automaticamente considerados como 1 pelo Maple. </li></ul>I SEMANA DE MATEMÁTICA
  12. 12. Exemplo <ul><li>Calcula a soma dos 100 primeiros números naturais. </li></ul>I SEMANA DE MATEMÁTICA
  13. 13. Resolução <ul><li>Vejamos como resolver esse loop: </li></ul><ul><li>>a:= o; </li></ul><ul><li>> for i from 1 to 100 do </li></ul><ul><li>> a:= a+i; </li></ul><ul><li>>od; </li></ul>I SEMANA DE MATEMÁTICA
  14. 14. <ul><li>Se tiverssemos feito: </li></ul><ul><li>>a:=0; </li></ul><ul><li>> for i from 2 to 100 by 2 do </li></ul><ul><li>> a:= a +i; </li></ul><ul><li>>od; </li></ul><ul><li>Teríamos como resultado a soma dos 50 primeiros números pares. </li></ul>I SEMANA DE MATEMÁTICA
  15. 15. <ul><li>Como dito anteriormente, podemos omitir certas clausulas do comando. </li></ul><ul><li>>a:=0; </li></ul><ul><li>> to 100 do </li></ul><ul><li>> a:=a+2; </li></ul><ul><li>>od; </li></ul>I SEMANA DE MATEMÁTICA
  16. 16. Problema <ul><li>Faça um programa que dado um número n natural, calcula a soma dos n primeiros números. </li></ul>I SEMANA DE MATEMÁTICA
  17. 17. Resolução <ul><li>>soma:=proc(n) </li></ul><ul><li>>local a; </li></ul><ul><li>>a:=0; </li></ul><ul><li>> for i from 1 to n do </li></ul><ul><li>> a:=a+i; </li></ul><ul><li>> od; </li></ul><ul><li>>end; </li></ul><ul><li>>soma(100); </li></ul><ul><li>>soma(20); </li></ul>I SEMANA DE MATEMÁTICA
  18. 18. <ul><li>Queremos calcular uma aproximação para a integral definida de 1 a 2 das seguintes funções. </li></ul>I SEMANA DE MATEMÁTICA
  19. 19. <ul><li>>L:=[exp(x^2),x^3,ln(x)]; </li></ul><ul><li>>for i in L do </li></ul><ul><li>> evalf(Int(i,x=1..2)); </li></ul><ul><li>>od; </li></ul>I SEMANA DE MATEMÁTICA
  20. 20. Comando “ if” <ul><li>A sintaxe geral para essa estrutura de programação no Malple, conhecida como condicional, é a seguinte: </li></ul><ul><li>if p then q else m fi </li></ul><ul><li>p - expressão condicional; </li></ul><ul><li>q e m – seqüência de comandos. </li></ul>I SEMANA DE MATEMÁTICA
  21. 21. Problema <ul><li>Implementar um programa que calcule o valor absoluto de número real. </li></ul>I SEMANA DE MATEMÁTICA
  22. 22. Resolução <ul><li>>modulo:=proc(x) </li></ul><ul><li>>if x >= 0 then </li></ul><ul><li>> x; </li></ul><ul><li>> else </li></ul><ul><li>> -x; </li></ul><ul><li>>fi; </li></ul><ul><li>>end; </li></ul><ul><li>>modulo(-3); </li></ul>I SEMANA DE MATEMÁTICA
  23. 23. Problema <ul><li>Defina a seguinte função: </li></ul><ul><li>f(x)= </li></ul>I SEMANA DE MATEMÁTICA
  24. 24. Resolução <ul><li>Através de procedimento, </li></ul><ul><li>>f:=proc(x) </li></ul><ul><li>>if x<=0 then 0 else </li></ul><ul><li>> if x<=1then x else </li></ul><ul><li>> if x<=2 then 2-x else </li></ul><ul><li>> if x>2 then 0 </li></ul><ul><li>> fi; </li></ul><ul><li>> fi; </li></ul><ul><li>> fi </li></ul><ul><li>>fi </li></ul><ul><li>>end; </li></ul>I SEMANA DE MATEMÁTICA
  25. 25. Outra resolução <ul><li>>f2:=proc(x) </li></ul><ul><li>> if x<=0 then 0 </li></ul><ul><li>> elif x<=1 then x </li></ul><ul><li>> elif x<=2 then 2-x </li></ul><ul><li>> else 0 </li></ul><ul><li>> fi; </li></ul><ul><li>End; </li></ul>I SEMANA DE MATEMÁTICA
  26. 26. O comando “ while” <ul><li>O comando while é outra estrutura de programação, na verdade é um tipo de loop. A sintaxe para o comando while é a seguinte: </li></ul><ul><li>while p do q od ; </li></ul><ul><li>p – expressão condicional; </li></ul><ul><li>q – seqüência de comandos. </li></ul>I SEMANA DE MATEMÁTICA
  27. 27. Problema <ul><li>Fazer um programa que divida sucessivamente um numero inteiro n por 2 (deixando resto zero) e exiba quantas divisões foram possíveis. </li></ul>I SEMANA DE MATEMÁTICA
  28. 28. Resolução <ul><li>Para fazer esse programa usaremos os comandos iquo(a,b) e irem(a,b) que calculam o quociente e o resto, respectivamente, na divisão de a por b. </li></ul>I SEMANA DE MATEMÁTICA
  29. 29. Resolução <ul><li>>ndiv2:=proc(n) </li></ul><ul><li>>local q, i; </li></ul><ul><li>>q:=n; i:=0 </li></ul><ul><li>>if irem(q,2)<>0 do </li></ul><ul><li>>while irem(q,2)=0 do </li></ul><ul><li>> q:=iquo(q,2); </li></ul><ul><li>> i:=i+1; </li></ul><ul><li>> od; </li></ul><ul><li>>fi; </li></ul><ul><li>>end; </li></ul>I SEMANA DE MATEMÁTICA
  30. 30. Controle de parâmetros <ul><li>O controle de entrada é feito por a opção “::” colocada dentro do comando proc , devendo der colocado o tipo de variável desejada. </li></ul><ul><li>Por exemplo, poderíamos reescrever o programa anterior de outra forma: </li></ul>I SEMANA DE MATEMÁTICA
  31. 31. Solução <ul><li>>ndiv2:=proc(n::integer) </li></ul><ul><li>>local q, i; </li></ul><ul><li>>q:=n; i:=0 </li></ul><ul><li>>if irem(q,2)<>0 do </li></ul><ul><li>>while irem(q,2)=0 do </li></ul><ul><li>> q:=iquo(q,2); </li></ul><ul><li>> i:=i+1; </li></ul><ul><li>> od; </li></ul><ul><li>> fi; </li></ul><ul><li>>end; </li></ul>I SEMANA DE MATEMÁTICA
  32. 32. Procedimentos recursivos <ul><li>Procedimentos onde os valores calculados vão sendo reutilizados para o cálculo de novos valores. Um exemplo os números de Fibonacci : </li></ul>I SEMANA DE MATEMÁTICA
  33. 33. <ul><li>Por exemplo, para n = 4 temos: </li></ul>I SEMANA DE MATEMÁTICA
  34. 34. <ul><li>Procedimento que calculapara todo natural </li></ul><ul><li>>fibonacci:=proc(n::nonnegint) </li></ul><ul><li>> if n<2 then n </li></ul><ul><li>> else </li></ul><ul><li>> fibonacci(n-1)+fibonacci(n-2) </li></ul><ul><li>> fi; </li></ul><ul><li>>end; </li></ul><ul><li>>fibonacci(15), fibonacci(16) </li></ul>I SEMANA DE MATEMÁTICA
  35. 35. Observação I SEMANA DE MATEMÁTICA Fiboncci(0 ) Fibonacci(4 ) Fibonacci(1 ) Fibonacci(1 ) Fibonacci(2 ) Fibonacci(1 ) Fibonacci(2 ) Fibonacci(2 ) Fibonacci(3 ) Note que quando o n é grande o tempo de cálculo aumenta muito
  36. 36. <ul><li>Uma forma de contornar esse problema é fazer com que o Maple memorize todos os cálculos feitos, atraves da função remenber . </li></ul>I SEMANA DE MATEMÁTICA
  37. 37. <ul><li>>fibonacci2:=proc(n::nonnegat) </li></ul><ul><li>>option remenber; </li></ul><ul><li>> if n<2 then n </li></ul><ul><li>> else </li></ul><ul><li>> fibonacci2(n-1)+fibonacci2(n-2) </li></ul><ul><li>> fi; </li></ul><ul><li>>end; </li></ul>I SEMANA DE MATEMÁTICA
  38. 38. Procedimento com lista <ul><li>As estruturas de dados são listas de dados, como seqüências, listas e conjuntos. </li></ul><ul><li>Escrever um procedimento no qual dados os números, calcule sua média. </li></ul>I SEMANA DE MATEMÁTICA
  39. 39. Procedimento com lista <ul><li>>media:=proc(x::list) </li></ul><ul><li>>local n, i, soma; </li></ul><ul><li>>n:=nops(x); </li></ul><ul><li>>Soma:=add(i,i=x); </li></ul><ul><li>>soma/n; </li></ul><ul><li>>end; </li></ul><ul><li>>media([2, 3, 1.5, 5.25 ,7 ]) </li></ul>I SEMANA DE MATEMÁTICA
  40. 40. Procedimento com lista <ul><li>Pode ocorrer um erro caso venhamos a colocar uma lista vazia, media([]) . Para otimizar o procedimento podemos utlilizar o comando “ERROR” para especificar qual o tipo de erro. </li></ul>I SEMANA DE MATEMÁTICA
  41. 41. Procedimento com lista <ul><li>>media2:=proc(x::list) </li></ul><ul><li>>local n, i, soma; </li></ul><ul><li>>n:=nops(x); </li></ul><ul><li>If n=0 then </li></ul><ul><li>>“ERROR”(“a lista não possui nenhum elemento”); </li></ul><ul><li>>Soma:=add(i,i=x); </li></ul><ul><li>>soma/n; </li></ul><ul><li>>end; </li></ul>I SEMANA DE MATEMÁTICA
  42. 42. Fim <ul><li>  Ah! ProgAMAR só se aprende programando... ☺ </li></ul>
  43. 43. REFERÊNCIAS <ul><li>http://www.freenetpages.co.uk/hp/alan.gauld/port/tutwhat_por.htm </li></ul><ul><li>http://www.ime.usp.br/~rt/mmfina/apost2a.html </li></ul><ul><li>http://maple.thiagorodrigo.com.br/index.php?cat=guia&id=programacao </li></ul><ul><li>http://www.dm.ufscar.br/disciplinas/grad/maplehtml/basico11.html#SumᲩo </li></ul>I SEMANA DE MATEMÁTICA

×