Post on 18-Dec-2014
description
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 x1, x2, ............. , xn; global x1, x2, ........... , xn; .......................................... ..........................................> 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.
]ln,,[ 32
xxeL x
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)=
20
212
00
00
xse
xsex
xsex
xse
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:
10
,2
10
21
ff
onden
fff nnn
I SEMANA DE MATEMÁTICA
Por exemplo, para n = 4 temos:
312
1101
4
3012
123
234
f
ffff
fff
fff
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)
nf
I SEMANA DE MATEMÁTICA
2n
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. 0,,....,, 21 nxxx n
n
iix
n 1
1
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