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

Introdução Programação Em Maple

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