Introdução Programação Em Maple

  • Published on
    18-Dec-2014

  • View
    4.454

  • Download
    6

Embed Size (px)

DESCRIPTION

 

Transcript

<ul><li> 1. PROGRAMAO EM MAPLE Jeandson correa neves I SEMANA DE MATEMTICA </li> <li> 2. O que programao? <ul><li>A programao a arte de fazer com que o computador faa exatamente o que desejamos que ele faa. </li></ul>I SEMANA DE MATEMTICA </li> <li> 3. Tipos de programao no Maple <ul><li>Programao funcional; </li></ul><ul><li>Programao atravs de procedimentos; </li></ul><ul><li>Programao recursiva. </li></ul>I SEMANA DE MATEMTICA </li> <li> 4. Tpicos de programao <ul><li>Todo procedimento no Maple tem basicamente a seguinte configurao: </li></ul>I SEMANA DE MATEMTICA &gt; nome:=proc(...) local x 1 , x 2 , ............. , x n ; global x 1 , x 2 , ........... , x n ; .......................................... .......................................... &gt; end; </li> <li> 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 atribuio de nomes no Maple. </li></ul>I SEMANA DE MATEMTICA </li> <li> 6. Exemplo <ul><li>&gt; metade:= proc(x) </li></ul><ul><li>&gt; evalf(x/2); </li></ul><ul><li>&gt; end; </li></ul><ul><li>&gt; metade(1/2); </li></ul><ul><li>&gt; metade (10); </li></ul>I SEMANA DE MATEMTICA </li> <li> 7. Exemplo <ul><li>&gt; val_e:= proc(); </li></ul><ul><li>&gt; a:=exp(1); </li></ul><ul><li>&gt; evalf(a); </li></ul><ul><li>End; </li></ul><ul><li>Note que neste procedimento nenhuma entrada de dados necessria. Dentro de um procedimento os comandos devem terminar com ponto e vrgula. </li></ul>I SEMANA DE MATEMTICA </li> <li> 8. Variveis local e global <ul><li>&gt;b:=2; </li></ul><ul><li>&gt; val_e:=proc() </li></ul><ul><li>&gt; local b; </li></ul><ul><li>&gt; b:=exp(1); </li></ul><ul><li>&gt; evalf(b); </li></ul><ul><li>&gt;end; </li></ul>I SEMANA DE MATEMTICA &gt;b:=2; &gt; val_e:proc(); &gt; global b; &gt; b:=exp(1); &gt; evalf(b); &gt;end; </li> <li> 9. Estruturas de programao <ul><li>O sistema de programao do Maple inclui estruturas usuais de programao, tais como o loops e afirmaes condicionais que podem ser utilizadas dentro ou fora de um procedimento. </li></ul>I SEMANA DE MATEMTICA </li> <li> 10. O comando for <ul><li>A sintaxe geral no Maple para essa estrutura de programao, conhecida como loop, a seguinte: </li></ul><ul><li>for i from a to b by c do ... Od ; </li></ul><ul><li>i- varivel 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 varivel sofre a cada loop; </li></ul><ul><li>...- expresses a serem executadas. </li></ul>I SEMANA DE MATEMTICA </li> <li> 11. <ul><li>Na estrutura deste comando algumas das clausulas em vermelho so opcionais. Se, por exemplo, omitimos o from ou o by eles sero automaticamente considerados como 1 pelo Maple. </li></ul>I SEMANA DE MATEMTICA </li> <li> 12. Exemplo <ul><li>Calcula a soma dos 100 primeiros nmeros naturais. </li></ul>I SEMANA DE MATEMTICA </li> <li> 13. Resoluo <ul><li>Vejamos como resolver esse loop: </li></ul><ul><li>&gt;a:= o; </li></ul><ul><li>&gt; for i from 1 to 100 do </li></ul><ul><li>&gt; a:= a+i; </li></ul><ul><li>&gt;od; </li></ul>I SEMANA DE MATEMTICA </li> <li> 14. <ul><li>Se tiverssemos feito: </li></ul><ul><li>&gt;a:=0; </li></ul><ul><li>&gt; for i from 2 to 100 by 2 do </li></ul><ul><li>&gt; a:= a +i; </li></ul><ul><li>&gt;od; </li></ul><ul><li>Teramos como resultado a soma dos 50 primeiros nmeros pares. </li></ul>I SEMANA DE MATEMTICA </li> <li> 15. <ul><li>Como dito anteriormente, podemos omitir certas clausulas do comando. </li></ul><ul><li>&gt;a:=0; </li></ul><ul><li>&gt; to 100 do </li></ul><ul><li>&gt; a:=a+2; </li></ul><ul><li>&gt;od; </li></ul>I SEMANA DE MATEMTICA </li> <li> 16. Problema <ul><li>Faa um programa que dado um nmero n natural, calcula a soma dos n primeiros nmeros. </li></ul>I SEMANA DE MATEMTICA </li> <li> 17. Resoluo <ul><li>&gt;soma:=proc(n) </li></ul><ul><li>&gt;local a; </li></ul><ul><li>&gt;a:=0; </li></ul><ul><li>&gt; for i from 1 to n do </li></ul><ul><li>&gt; a:=a+i; </li></ul><ul><li>&gt; od; </li></ul><ul><li>&gt;end; </li></ul><ul><li>&gt;soma(100); </li></ul><ul><li>&gt;soma(20); </li></ul>I SEMANA DE MATEMTICA </li> <li> 18. <ul><li>Queremos calcular uma aproximao para a integral definida de 1 a 2 das seguintes funes. </li></ul>I SEMANA DE MATEMTICA </li> <li> 19. <ul><li>&gt;L:=[exp(x^2),x^3,ln(x)]; </li></ul><ul><li>&gt;for i in L do </li></ul><ul><li>&gt; evalf(Int(i,x=1..2)); </li></ul><ul><li>&gt;od; </li></ul>I SEMANA DE MATEMTICA </li> <li> 20. Comando if <ul><li>A sintaxe geral para essa estrutura de programao no Malple, conhecida como condicional, a seguinte: </li></ul><ul><li>if p then q else m fi </li></ul><ul><li>p - expresso condicional; </li></ul><ul><li>q e m seqncia de comandos. </li></ul>I SEMANA DE MATEMTICA </li> <li> 21. Problema <ul><li>Implementar um programa que calcule o valor absoluto de nmero real. </li></ul>I SEMANA DE MATEMTICA </li> <li> 22. Resoluo <ul><li>&gt;modulo:=proc(x) </li></ul><ul><li>&gt;if x &gt;= 0 then </li></ul><ul><li>&gt; x; </li></ul><ul><li>&gt; else </li></ul><ul><li>&gt; -x; </li></ul><ul><li>&gt;fi; </li></ul><ul><li>&gt;end; </li></ul><ul><li>&gt;modulo(-3); </li></ul>I SEMANA DE MATEMTICA </li> <li> 23. Problema <ul><li>Defina a seguinte funo: </li></ul><ul><li>f(x)= </li></ul>I SEMANA DE MATEMTICA </li> <li> 24. Resoluo <ul><li>Atravs de procedimento, </li></ul><ul><li>&gt;f:=proc(x) </li></ul><ul><li>&gt;if x if x if x if x&gt;2 then 0 </li></ul><ul><li>&gt; fi; </li></ul><ul><li>&gt; fi; </li></ul><ul><li>&gt; fi </li></ul><ul><li>&gt;fi </li></ul><ul><li>&gt;end; </li></ul>I SEMANA DE MATEMTICA </li> <li> 25. Outra resoluo <ul><li>&gt;f2:=proc(x) </li></ul><ul><li>&gt; if x elif x elif x else 0 </li></ul><ul><li>&gt; fi; </li></ul><ul><li>End; </li></ul>I SEMANA DE MATEMTICA </li> <li> 26. O comando while <ul><li>O comando while outra estrutura de programao, 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 expresso condicional; </li></ul><ul><li>q seqncia de comandos. </li></ul>I SEMANA DE MATEMTICA </li> <li> 27. Problema <ul><li>Fazer um programa que divida sucessivamente um numero inteiro n por 2 (deixando resto zero) e exiba quantas divises foram possveis. </li></ul>I SEMANA DE MATEMTICA </li> <li> 28. Resoluo <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 diviso de a por b. </li></ul>I SEMANA DE MATEMTICA </li> <li> 29. Resoluo <ul><li>&gt;ndiv2:=proc(n) </li></ul><ul><li>&gt;local q, i; </li></ul><ul><li>&gt;q:=n; i:=0 </li></ul><ul><li>&gt;if irem(q,2)0 do </li></ul><ul><li>&gt;while irem(q,2)=0 do </li></ul><ul><li>&gt; q:=iquo(q,2); </li></ul><ul><li>&gt; i:=i+1; </li></ul><ul><li>&gt; od; </li></ul><ul><li>&gt;fi; </li></ul><ul><li>&gt;end; </li></ul>I SEMANA DE MATEMTICA </li> <li> 30. Controle de parmetros <ul><li>O controle de entrada feito por a opo :: colocada dentro do comando proc , devendo der colocado o tipo de varivel desejada. </li></ul><ul><li>Por exemplo, poderamos reescrever o programa anterior de outra forma: </li></ul>I SEMANA DE MATEMTICA </li> <li> 31. Soluo <ul><li>&gt;ndiv2:=proc(n::integer) </li></ul><ul><li>&gt;local q, i; </li></ul><ul><li>&gt;q:=n; i:=0 </li></ul><ul><li>&gt;if irem(q,2)0 do </li></ul><ul><li>&gt;while irem(q,2)=0 do </li></ul><ul><li>&gt; q:=iquo(q,2); </li></ul><ul><li>&gt; i:=i+1; </li></ul><ul><li>&gt; od; </li></ul><ul><li>&gt; fi; </li></ul><ul><li>&gt;end; </li></ul>I SEMANA DE MATEMTICA </li> <li> 32. Procedimentos recursivos <ul><li>Procedimentos onde os valores calculados vo sendo reutilizados para o clculo de novos valores. Um exemplo os nmeros de Fibonacci : </li></ul>I SEMANA DE MATEMTICA </li> <li> 33. <ul><li>Por exemplo, para n = 4 temos: </li></ul>I SEMANA DE MATEMTICA </li> <li> 34. <ul><li>Procedimento que calculapara todo natural </li></ul><ul><li>&gt;fibonacci:=proc(n::nonnegint) </li></ul><ul><li>&gt; if n else </li></ul><ul><li>&gt; fibonacci(n-1)+fibonacci(n-2) </li></ul><ul><li>&gt; fi; </li></ul><ul><li>&gt;end; </li></ul><ul><li>&gt;fibonacci(15), fibonacci(16) </li></ul>I SEMANA DE MATEMTICA </li> <li> 35. Observao I SEMANA DE MATEMTICA 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 clculo aumenta muito </li> <li> 36. <ul><li>Uma forma de contornar esse problema fazer com que o Maple memorize todos os clculos feitos, atraves da funo remenber . </li></ul>I SEMANA DE MATEMTICA </li> <li> 37. <ul><li>&gt;fibonacci2:=proc(n::nonnegat) </li></ul><ul><li>&gt;option remenber; </li></ul><ul><li>&gt; if n else </li></ul><ul><li>&gt; fibonacci2(n-1)+fibonacci2(n-2) </li></ul><ul><li>&gt; fi; </li></ul><ul><li>&gt;end; </li></ul>I SEMANA DE MATEMTICA </li> <li> 38. Procedimento com lista <ul><li>As estruturas de dados so listas de dados, como seqncias, listas e conjuntos. </li></ul><ul><li>Escrever um procedimento no qual dados os nmeros, calcule sua mdia. </li></ul>I SEMANA DE MATEMTICA </li> <li> 39. Procedimento com lista <ul><li>&gt;media:=proc(x::list) </li></ul><ul><li>&gt;local n, i, soma; </li></ul><ul><li>&gt;n:=nops(x); </li></ul><ul><li>&gt;Soma:=add(i,i=x); </li></ul><ul><li>&gt;soma/n; </li></ul><ul><li>&gt;end; </li></ul><ul><li>&gt;media([2, 3, 1.5, 5.25 ,7 ]) </li></ul>I SEMANA DE MATEMTICA </li> <li> 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 MATEMTICA </li> <li> 41. Procedimento com lista <ul><li>&gt;media2:=proc(x::list) </li></ul><ul><li>&gt;local n, i, soma; </li></ul><ul><li>&gt;n:=nops(x); </li></ul><ul><li>If n=0 then </li></ul><ul><li>&gt;ERROR(a lista no possui nenhum elemento); </li></ul><ul><li>&gt;Soma:=add(i,i=x); </li></ul><ul><li>&gt;soma/n; </li></ul><ul><li>&gt;end; </li></ul>I SEMANA DE MATEMTICA </li> <li> 42. Fim <ul><li> Ah!ProgAMARsseaprendeprogramando... </li></ul></li> <li> 43. REFERNCIAS <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&amp;id=programacao </li></ul><ul><li>http://www.dm.ufscar.br/disciplinas/grad/maplehtml/basico11.html#Sumo </li></ul>I SEMANA DE MATEMTICA </li> </ul>