Você está na página 1de 8

Tutorial sobre Algebra Computacional com Programao

Leandro Rangel1 e Alexandre Rojas2 Aluno do Bacharelado em Matemtica- UERJ 2 Docente Departamento de Informtica e Ciencia da Computao- UERJ
1

Resumo
O presente Tutorial tem por objetivo apresentar uma breve viso relativa aos principais comandos utilizados nos softwares de Computao Algbrica em especial o Mupad, desenvolvido pela Universidade de Paderborn Alemanha destacando a linguagem de programao contida neste software. Trata-se de um projeto multidiscipliar integrando competencias da rea matemtica com a Cincia da Computao.

1. Introduo
At a dcada de 1990, a grande maioria dos professores de matemtica utilizava como suporte metodolgico, na elaborao de suas atividades docentes, basicamente o livro didtico. A partir do advento da popularizao da informtica uma gama maior de possibilidades passou a existir, permitindo que o ensino matemtico fosse difundido com maior facilidade. O processo de mudana no processo de ensino e aprendizagem caracterizado por resistncias, principalmente na insero de novas tecnologias no processo educacional. Sancho (2001, p. 43) refere-se a essas resistncias como tecnofobia. Porem em diversas universidades existe um movimento para a utilizao de softwares educacionais em diversas disciplinas, dentre elas o calculo diferencial e integral. O uso de ferramentas computacionais no processo de ensino-aprendizagem permite ao estudante abordar problemas complexos. No caso da computao simblica, sistemas computacionais permitem tornar a Matemtica mais experimental, permitindo analisar diferentes situaes com visualizao grfica, dando assim oportunidade ao estudante de aprender fazendo.

diferenas finitas, por exemplo. Trata-se de uma rea muito ampla e, portanto, com vrias vertentes, as mais conhecidas so: testes de primalidade e algoritmos de fatorao para inteiros e polinmios, manipulao e soluo de sistemas de equaes polinomiais em vrias variveis, clculo exato de integrais indefinidas de funes elementares e clculo da forma fechada de somatrios de nmeros binomiais [1]. Cada uma destas vertentes tem mtodos prprios, oriundos de uma rea da matemtica subjacente, que nos casos mencionados acima, so respectivamente: teoria de nmeros, teoria das equaes algbricas, geometria algbrica, clculo diferencial e combinatria. Entretanto, em quase todas as vertentes, estes mtodos se misturam com tcnicas de reas afins e de computao. Assim, por exemplo, o mtodo de bases de Groebner, inventado no contexto da geometria algbrica, foi generalizado para lidar com lgebras de operadores, e atravs destas aplicado a problemas de identidades combinatrias. 2.2. Sistemas de Computao Algbrica Um sistema de computao algbrica (ou simblica) um software que permite manipular expresses matemticas de maneira simblica. Normalmente estes sistemas permitem efetuar clculos com inteiros de preciso mltipla (isto , sem que haja um tamanho especifico a priori para o maior inteiro), fraes expressas como a razo entre dois inteiros e polinmios com uma ou vrias variveis. A maioria dos sistemas de computao algbrica atuais pode ser utilizada de maneira interativa. O usurio entra com algumas frmulas e comandos, e o sistema os avalia. Ento devolve uma resposta que pode ser manipulada mais adiante se necessrio. Alm de computaes simblicas exatas, os sistemas de computao algbrica podem obter solues numricas aproximadas. O usurio pode fixar a preciso no nmero de dgitos desejados. Os sistemas de computao algbrica modernos possuem linguagens de programao poderosas, alem de ferramentas para visualizao e animao de dados matemticos.

2. Definies
2.1. Computao Algbrica A computao algbrica a rea da computao que lida com a manipulao e soluo exata de equaes. Estas equaes podem ser polinomiais, diferenciais ou a

Cadernos do IME : Srie Informtica : Vol. 18 : Julho de 2005 : 31 __________________________________________________________________________________


2.3. Computao simblica A computao simblica um ramo da Cincia da Computao e da Matemtica cujos fundamentos tericos centralizam-se no estudo de no numricos, isto , as operaes simblicas que podem tratados por um computador, com nfase especial em clculos simblicos tais como fatorao de polinmios, resoluo de equaes algbricas e equaes diferenciais, operaes e clculo com matrizes, etc. Os clculos realizados no tratamento simblico so exatos, isto , tm preciso infinita, em contraste ao correspondente tratamento numrico. Uma operao do tipo 1/3+1/3, que numericamente resultaria em 0.666666, no clculo simblico teremos como resultado o valor exato, 2/3. Nas ultimas dcadas muitos sistemas de computao simblica foram desenvolvidos. Os aplicativos mais conhecidos so Axiom, Derive, Macsyma, Maple, Mathematica, Reduce e MuPAD. MUPAD A ferramenta de Apoio utilizada nesse trabalho o MUPAD. (Multi Processing Data Tool), [2] caracterizado como um Sistema de Computao Algbrica desenvolvido na Universidade de Paderborn na Alemanha. O projeto teve incio em setembro de 1989, com a tese de mestrado de Karsten Morisse e Oliver Kluge. Andreas Kemper, em sua tese de mestrado, desenvolve a linguagem de programao MUPAD, semelhante em diversos aspectos ao Pascal linguagem de programao de aprendizado relativamente fcil. Utilizado extensamente em muitas universidades europias e asiticas como uma ferramenta educacional, na realidade, MUPAD contm uma linguagem de programao completa. A linguagem de programao do MUPAD compartilha as caractersticas mais comuns de muitas linguagens de programao. utiliza 'se-ento', 'para-faa', 'repetir-at' e outras estruturas de programao, requer a terminao de instrues, e implementa as mesmas estruturas de dados que esto disponveis na maioria das linguagens de programao como C, C++ ou Java. Esse um exemplo de um programa simples escrito na linguagem de programao do MUPAD. Ele converte um inteiro decimal para sua forma binria. O exemplo mostra o uso de um operador de atribuio padro com um 'repetir-at' volta. A linha debaixo do programa o resultado de sua execuo. n_real:=128: n_bin:="": repeat digit := (n_real mod 2); digit_bin:=expr2text(digit); n_bin:=digit_bin.n_bin; n_real := (n_real div 2) until n_real = 0 end_repeat: print(n_bin): "10000000" A converso do inteiro 128 resultou no binrio 10000000. Um exemplo simples da utilizao de programao no MUPAD. Uma vantagem adicional de MUPAD sua simplicidade em produzir grficos. Isto pode ser muito importante em cursos onde grficos tem um papel de destaque, como por exemplo, no clculo, na geometria analtica, e assim por diante. CAPITULO II

3. Conceitos Bsicos no MUPAD


Anteriormente foi mencionado que a maioria dos sistemas de lgebra computacional pode ser utilizada de maneira interativa. Isso significa que possvel, por exemplo, digitar uma instruo para multiplicar dois nmeros e esperar at que o MUPAD processe o resultado e o retorne na tela. O MUPAD contem um sistema de ajuda(help) que permite efetuar consultas durante sua utilizao. Com esse sistema de ajuda possvel encontrar detalhes sobre funes do sistema, informaes sobre a sintaxe dessas funes, os seus parmetros, etc. O conhecimento para utilizar o MUPAD como uma calculadora de bolso inteligente quase intuitivo. Aps a inicializao do MUPAD, ele fica aguardando a entrada de comandos na sua interface grfica de usurio. Em Sistemas Windows ou Macintosh o sinal representa a espera de comandos. Para facilitar a referencia no decorrer desse ser definido que Prompt a tela de espera de comando, ou seja, a Interface grfica de usurio. O <ENTER> interpretado como final da entrada de instrues e o sinal para sua execuo. Mantendo a tecla <SHIFT> pressionada enquanto se utiliza o <ENTER>, no ocorre execuo das instrues, e sim, um avano de linha. Em todas as verses possvel configurar essas teclas. Ao digitar a instruo sin(3.141) no prompt e em seguida pressionar <ENTER> o resultado. 0.0005926535551 e exibido como resposta do sistema. O sistema avalia a funo seno no ponto 3.141 e retorna uma aproximao de ponto flutuante do valor, funcionando de maneira semelhante uma calculadora eletrnica de bolso. No MUPAD, uma varivel global chamada DIGITS controla a preciso de ponto flutuante. Ao entrar com o comando DIGITS := 100, o MUPAD passara a executar todos os clculos de ponto flutuante com uma preciso de 100 dgitos ou casas decimais. Para finalizar uma instruo, deve inserir um terminador. Eles pode ser o dois-pontos :, que permite que o MUPAD execute o comando sem exibir o seu resultado na tela. Isto o permite suprimir a produo de resultados de intermedirios irrelevantes. permitido que duas ou

32 : Cadernos do IME : Srie Informtica : Vol. 18 : Julho de 2005 __________________________________________________________________________________


mais intrues sejam digitadas na mesma. Outro terminador o ;. Dois comandos subseqentes tm que ser separados por um ponto-e-vrgula: diff(sin(x^2), x); int(last(1), x) valor de outro, de uma constante ou do resultado de uma expresso. Na linguagem de programao MUPAD a atribuio feita com o smbolo dois pontos seguido do smbolo de igualdade, :=. Comparar: Consiste em comparar valores quantitativamente ou a sua equivalncia. Os smbolos matemticos de igualdade =, e maior e menor >, < assim como suas combinaes so validos na linguagem de programao MUPAD. Armazenar: Consiste em armazenar dados nos dispositivos de armazenamento permanente. A funo write armazena valores de identificadores em um arquivo, permitindo assim que os resultados computados possam ser utilizados posteriormente. O Exemplo a seguir demonstra a utilizao da funo write para armazenar os valores dos identificadores a e b para o arquivo ab.mb: a := 2/3: b := diff(sin(cos(x)), x): write("ab.mb", a, b) O Parmetro inicial da funo Write o nome do arquivo de armazenamento. O MUPAD cria um arquivo com este nome no formato binrio especfico. Por conveo, um arquivo neste formato gerado pelo MUPAD deve ter a extenso .mb". Utilizando a opo Text o MUPAD cria um arquivo em um formato de texto legvel: write(Text, "ab.mu", a, b) A utilizao da funo write pode ser utilizada sem a expecificao dos identificadores a serem salvos. Nesse caso o MUPAD armazenara todos os identificadores disponveis. Recuperar: Consiste em retornar os dados armazenados permitindo assim que eles sejam reutilizados. No MUPAD a funo read recupera os valores dos identificadores armazenados pela funo write: a := 1: b := 2: read("ab.mu"): a, b

2 x cos x 2 sin x

( )
2

( )

Aqui x^2 representa o quadrado de x, enquanto as funes MUPAD diff e int representam, respectivamente, as operaes de "derivada" e "integral". A funo last(1) retorna a expresso anterior (no exemplo, este a derivada de sin(x^2)). No exemplo seguinte, a exibio do resultado do primeiro comando suprimida pelo dois-pontos, e apenas o resultado do segundo comando se aparece na tela: equation := {x + y = 1, x - y = 1}: solve(equation)

{[x = 1, y = 0]}

No exemplo acima, um conjunto de duas equaes atribudo ao identificador equation. A funo solve processa a soluo. Os comandos e funes padres do MuPAD so escritos com letras minsculas. O aplicativo keysensivite, ou seja, diferencia letras maisculas e minsculas. Por exemplo, sin(X) diferente de Sin(X) (este comando no ser reconhecido como funo seno) ou sin(x). Durante essa dissertao sero apresentadas diversas funes, assim como estruturas e operadores de programao, visando ter o conhecimento bsico da linguagem de programao MUPAD, e assim, chegar aos exemplos de utilizao no estudo do calculo.

4. Linguagem de programao do MUPAD


4.1. Conceitos bsicos de programao Uma Linguagem de programao um conjunto de regras de sintaxe com os quais escrevemos listas de instrues. O MUPAD possui uma linguagem de programao de alto nvel, ou seja, se assemelha a nossa forma de pensar e escrever. As Tarefas a serem realizadas em um programa MUPAD podem ser divididas em uma serie de instrues. Variveis e Tipos de Dados Variveis so objetos que armazenam dados e que, ao longo do tempo de execuo de um programa MUPAD, podem ter seus valores alterados. Os nomes devem obedecer s regras de formao de identificadores. A atribuio de valores a uma varivel feita, com o operador de atribuio :=. Operaes primitivas ou fundamentais As Operaes primitivas so apenas sete. No MUPAD elas possuem operadores e funes anlogos, que so descriminados a seguir: Atribuir: Consiste em fazer com que um dado assuma o

2 , sin ( x ) cos(cos( x )) 3
No exemplo anterior a funo read recupera o valor dos identificadores a e b que foram armazenados com a funo write no arquivo ab.mu. 4.2. Expresses e Operadores O MUPAD contem uma grande quantidade de funes utilizadas para combinar ou manipular objetos. Porm, seria pouco intuitivo usar funo _plus(a,b) para calcular a adio a + b. Desse modo, o MUPAD implementa uma variedade de operaes importantes, permitindo assim a utilizao de notao matemtica familiar. Os operadores +, -, *, / para as operaes aritmticas bsicas e o operador ^ para a exponenciao so vlidos para expresses simblicas assim como suas funes equivalentes.

Cadernos do IME : Srie Informtica : Vol. 18 : Julho de 2005 : 33 __________________________________________________________________________________


Operadores: a + b + c, a - b, a*b*c, a/b, a^b Funes: _plus(a,b,c), _subtract(a,b), _mult(a,b,c),_divide(a,b), _power(a,b) A mesma equivalncia existe para a funo fatorial. A notao matemtica n! convertida internamente a uma chamada a funo fact(n). Os operadores de um modo em geral podem ser utilizados em um contexto simblico, entretanto, nesses casos, s retornam resultados simblicos. Vrios objetos de MUPAD separados por vrgulas formam uma seqncia: sequencia := a, b, c + d a, b, c + d FALSO. A linguagem de programao MUPAD permite a combinao de expresses booleanas com os operadores lgicos and, or, ou o operador de negao utilizando o not. Na Linguagem de programao do MUPAD a definio de funes pode ocorrer de vrios modos. O mtodo mais simples usar o operador -> (o menos smbolo seguido pelo "maior que" smbolo): f := x -> x^2 O operador $ uma ferramenta importante para gerar tais sucesses: i^2 $i = 2..7 O resultado da execuo ser: Algumas funes MUPAD, como a funo de integral definida necessita de um intervalo numerico. A gerao desse intervalo efetuada por meio do operador ..: gama := 0..1; int(x, x = gama)

0..1 1 2
A tabela 1 contm os operadores da linguagem de programao do MUPAD e suas funes equivalentes.

Tabela 1 Operadores da Linguagem de Programao do MUPAD


Operador Funo Operao Exemplo + _plus Adio SUM := a+b _subtract Subtrao Difference := a-b * _mult Multiplicao Product := a*b / _divide Diviso Quotient := a/b ^ _power Exponeciao Power := a^b div _div Diviso Inteira Quotient := a div p mod _mod Resto da Diviso Remainder := a mod p ! fact fatorial n! $ _seqgen gerao de sequncia Sequence := i^2 $ i=3..5 , _exprseq sequncia Seq := Seq1,Seq2 union _union Unio de conjuntos S := Set1 union Set2 intersect _intersect Interceo de conjuntos S := Set1 intersect Set2 minus _minus Diferena de conjuntos S := Set1 minus Set2 = _equal Equao Equation := x+y=2 <> _unequal Inequao Condition := x<>y < _less comparao Condition := a<b > Comparao Condition := a>b <= _leequal Comparao Condition := a<=b >= Comparao Condition := a>=b Condition2 := not not _not Negao Condition1 and _and e lgico Condition := a<b and b<c or _or Ou lgico Condition := a<b or b<c -> Mapeamento de Funo Square := x -> (x^2) ' D Differential f'(x) @ _fconcat composio de funes h := f@g @@ _fnest Iterao g := f@@3 . _concat Concatenao NewName := Name1.Name2 .. ... _range Variao Range := a..b IV := 2.1 ... 3.5

x x2
desigualdade <>, respectivamente. Os operadores <, <=, > e >= comparam as magnitudes dos argumentos. O retorno dessas comparaes dentro de um contexto comcreto so objetos do tipo boolean, ou seja, VERDADEIRO ou Aps a definio dessa funo ela pode ser utilizada como uma funo do MUPAD: f(4), f(x + 1), f(y)

16, (x + 1) , y 2
2

O MUPAD permite a definio de funes compostas. Essa Definio efetuada por meio do operador @. c := a@b: c(x)

a (b( x ))

Ou de forma simblica: x^i $i = 1..5 x,x2,x3,x4,x5 4, 9, 16, 25, 36, 49 Equaes e desigualdades so objetos MUPAD vlidos. Eles so gerados pelo sinal de igualdade = e pelo sinal de A repetio do operador @ duas vezes, denota a composio iterada de uma funo com si mesmo um determinado numero de vezes: f := g@@4: f(x)

interval Intervalo

4.3. Estruturas bsicas As operaes primitivas e expresses podem ser agrupadas, formando conjuntos chamados estruturas bsicas. Estruturas bsicas podem ser classificadas de trs modos: Estrutura de Seqncia, Estrutura de Seleo e

g ( g ( g ( g ( x ))))

34 : Cadernos do IME : Srie Informtica : Vol. 18 : Julho de 2005 __________________________________________________________________________________


Estrutura de repetio. Estrutura de Seqncia: Determina que as expresses e funes sero executadas seqencialmente na ordem que foram escritas, isto , da esquerda para direita de cima para baixo. A Linguagem MUPAD no possui um delimitador de inicio e final para a estrutura de seqncia. Essa estrutura esta implcita no interpretador da linguagem. Estrutura de Seleo: Traduzem as escolhas entre caminhos alternativos, para a execuo expresses e funes. No MUPAD a estrutura de seleo mais simples e o IF. Essa estrutura avalia uma expresso lgica, cujo resultado deve ser booleano, ou seja, VERDADEIRO ou FALSO. Avaliando o resultado uma e somente uma das alternativas ser executada. possvel tambm que o resultado gerado pelo caminho lgico seja apenas um desvio na estrutura do programa, ou seja no possua nenhuma instruo para ser executada. O final da estrutura de seleo IF e marcado pela palavra reservada END_IF. A estrutura toda compostas das. Palavras reservadas IF, THEN que sinaliza o inicio da seqncia de instrues caso a expresso retorne VERDADEIRO, ELSE que sinaliza a seqncia de instrues caso a expresso retorne FALSO. A Estrutura testa a varivel i, verificando se ela um numero primo e a seguir exibe uma mensagem com essa informao: if isprime(i) then print(expr2text(i)." primo") else print(expr2text(i)." No primo") end_if: "5 primo" possvel a insero de outra estrutura if no interior de uma estrutura j definida, e no caso de estruturas aninhadas se...outro..se o MUPAD prov a palavra reservada ELIF que uma abreviao de ELSE IF. No caso do aninhamento de varias estruturas ELIF existe a estrutura alternativa CASE. A estrutura CASE tem o final marcado pela estrutura END CASE. O MUPAD avalia a expresso de teste da estrutura CASE, comparando-a com os resultados apontados nas estruturas OF...DO. Tendo uma comparao positiva o MUPAD executa todas as instrues subseqentes at encontrar o delimitador de final END CASE ou a palavra reservada BREAK. A Estrutura CASE ainda possui a opo OTHERWISE que executada caso nenhuma das estruturas OF..DO anteriores a ela sejam satisfeitas. case domtype(y) of DOM_INT do of DOM_RAT do of DOM_FLOAT do if y > 0 then y else -y end_if; break; of DOM_COMPLEX do sqrt(Re(y)^2 + Im(y)^2); break; otherwise "Invalid argument type"; end_case: Estrutura de Repetio: Permite que um grupo de instrues possa ser executado um nmero varivel de vezes. Para cada repetio dos comandos feito um teste lgico que ira determinar a execuo dos comandos ou o fim da repetio. No MUPAD a estrutura PARA representada pela palavra reservada FOR: for i from 1 to 4 do x := i^2; print("O Quadrado de ", i, " eh ", x) end_for: "O Quadrado de ", 1, " eh ", 1 "O Quadrado de ", 2, " eh ", 4 "O Quadrado de ", 3, " eh ", 9 "O Quadrado de ", 4, " eh ", 16 O exemplo anterior demonstra a utilizao do FOR para a exibio dos quadrados dos nmeros inteiros de 1 a 4. A varivel i recebe os valores 1, 2, 3 e 4 automaticamente e todas as instrues entre o FOR e o END_FOR so executadas. Para fazer uma repetio utilizando uma varivel que decrescesse utilizaria se a palavra reservada DOWNTO: for j from 4 downto 2 do print(Unquoted, "O Quadrado de ".expr2text(j)." eh ". expr2text(j^2)) end_for: O Quadrado de 4 eh 16 O Quadrado de 3 eh 9 O Quadrado de 2 eh 4 A palavra reservada STEP permite incrementos ou decrementos diferentes de 1 e a palavra reservada NEXT permite que a estrutura v para a prxima iterao sem ter que executar as expresses restantes no bloco de cdigo. for i from 10 downto -10 step 2 do if i < 0 then next end_if; x := sqrt(i); print(x) end_for: O resultado da execuo : 1/2

Cadernos do IME : Srie Informtica : Vol. 18 : Julho de 2005 : 35 __________________________________________________________________________________


10 1/2 22 1/2 6 2 1/2 2 0 Para repeties que so controladas por expresses lgicas o MUPAD possui duas estruturas a REPETIR e a ENQUANTO, representadas respectivamente por, REPEAT e WHILE. A Estrutura REPEAT tem como finalizador a palavra reservada END_REPEAT. A Condio de repetio sinalizada com a palavra UNTIL e deve ser colocada antes da finalizao do bloco, ou seja logo antes do END_REPEAT: x := 2: repeat i := x; x := i^2; print(i, x) until x > 100 end_repeat: O resultado da execuo ser: 2, 4 4, 16 asin(x) 16, 256 Na Estrutura REPEAT a verificao da condio de repetio feita aps a execuo do bloco de instrues. Quando a condio se torna FALSA a repetio interrompida. possvel interromper a repetio tambm com o sinalizador de interrupo BREAK. A Estrutura WHILE funciona de forma anloga a estrutura REPEAT, porem, a condio testada antes do bloco de instrues. x := 2: while x <= 100 do i := x; x := i^2; print(i, x) end_while: O resultado da execuo ser: 2, 4 4, 16 16, 256 atan(x) arcsen(x) arctg(x) Arco Seno Arco tangente 4.4. A biblioteca padro A biblioteca mais importante do MUPAD a stdlib a bibliotecay padro. Ela Contm as funes que so freqentemente utilizadas como diff e simplify alem de uma grande quantidade de constantes e funes matemticas (Tabelas 2 e 3).

Tabela 2 Funes da Linguagem de Programao do MUPAD


FUNES abs(x) exp(x) ln(x) sign(x) sqrt(x) cos(x) sin(x) tan(x) acos(x)

Valor absoluto Exponencial Logaritimo

ex
ln(x)

x x

x
cos(x) sen(x) tg(x) arccos(x)

Raiz Quadrada Coseno Seno Tangente Arco Coseno

Tabela 3 Constantes da Linguagem de Programao do MUPAD


Constantes E infinity PI undefined 2.7182818... Numero de Euller Infinito Positivo Valor Valor Indefinido

Todas as funes da stdlib esto automaticamente disponveis ao iniciar a utilizao do MUPAD. No h nenhuma diferena perceptvel entre a performance das funes da biblioteca padro e das funes implementadas na linguagem de programao do MUPAD. 4.5. MUPAD PROCEDURES

36 : Cadernos do IME : Srie Informtica : Vol. 18 : Julho de 2005 __________________________________________________________________________________


O MUPAD permite Construes essenciais a uma linguagem de Programao. O Usurio pode implementar algoritmos complexos confortavelmente com o MUPAD. A maioria da inteligncia matemtica do MUPAD no implementada em C ou C++ dentro do Kernel (ncleo) do Software, mas na linguagem de programao nativa do MUPAD, ao nvel de biblioteca. Com o conhecimento das estruturas de repetio e seleo e de funes simples possvel iniciar a programao de Procedures mais complexas. Tais procedures so geradas atravs proc end proc. E neles veremos que a distino entre variveis locais e globais. Aps a Procedure estar pronta, veremos que possvel cham-la no prompt como uma outra funo qualquer. Normalmente o usurio deseja utilizar estes procedimentos diversas vezes e em sesses posteriores, em particular, quando eles implementam algoritmos mais complexos. de grande utilidade escrever a definio da procedure em um arquivo texto e utilizar isso no MUPAD atravs de uma simples leitura. A nvel de avaliao, kernel do MUPAD processa os comandos precisamente, como se eles fossem digitados no Prompt do sistema. A funo a seguir, um exemplo de uma definio de procedimento por proc end proc. Ela compara dois nmeros e retorna o mximo entre eles. Max := proc(a, b) /* comment: maximum of a and b */ begin if a<b then return(b) else return(a) end_if end_proc: O texto entre / * e * / um comentrio completamente ignorado pelo sistema. Esta uma ferramenta til para documentar o cdigo fonte quando se defini uma procedure em um arquivo texto. Uma Procedure gerada por proc end proc do tipo DOM_PROC: domtype(Max) fat := fat * i; end_for; return(fat) end_proc: fatorial_2 := proc(n) begin if n = 0 then return(1) else return(n*fatorial_2(n - 1)) end_if end_proc: No MUPAD a Varivel de ambiente MAXDEPTH determina o numero Maximo de iteraes, ou seja o numero de vezes que uma procedure pode chamar outra ou ela mesma. Por padro MAXDEPTH tem o valor 500. isto , a funo Fatorial_2 pode calcular fatoriais para n <= 500. Valores de n Maiores que 500 interrompem a funo e causam mensagens de erro. Incrementando MAXDEPTH possvel se calcular fatoriais maiores. A chamada de uma procedure, executa seu corpo, isto , a sucesso de declaraes entre begin e o end_proc. Toda procedure devolve algum valor, explicitamente por retorno atravs do comando return ou na sua ausncia o valor do ltimo comando executado dentro da procedure. Assim, a funo fatorial_2 poderia ter sido implementada sem o return. fatorial_2 := proc(n) begin if n = 0 then 1 else n*fatorial_2(n - 1) end_if end_proc: Uma Procedure pode retornar um objeto MUPAD, uma expresso, uma seqncia, um conjunto, ou at mesmo uma Procedure. Contudo se essa procedure utilizar variveis locais de fora da procedure, ela deve ser definida coma a opo escape. Do contrrio, essa procedure conduz o MUPAD a exibir mensagens de advertncias ou produzir efeitos indesejados. A procedure seguinte retorna uma funo que utiliza o parmetro power fora da Procedure. generatePowerFunction := proc(power) option escape; begin x -> (x^power) end_proc: f := generatePowerFunction(2): g := generatePowerFunction(5): f(a), g(b)

DOM_PROC
Utilizando o identificador que foi associado procedure, voc pode utiliz-la como uma funo MUPAD: Max(1/5,0.5)

0.5
Dentro de uma Procedure voc pode chamar funes de sistema ou outras procedures, e ainda implementar algoritmos de recursividade. O exemplo favorito para um algoritmo de recursividade o fatorial, uma funo de nmeros naturais(inteiros positivos) que pode ser definida como n! = 1. 2.. n. ou n! = n. (n - 1)! sabendo que por definio 0! = 1. A Seguir temos 2 maneiras de se calcular um fatorial. A primeira atravs de uma repetio simples e a segunda com recursividade: fatorial_1 := proc(n) begin fat := 1; for i from 1 to n do

a 2 ,b 5
Muitas funes do sistema tm retorno de funes simblicas, devido ao MUPAD no encontrar uma representao mais simples para a requisio: sin(x), max(a, b), int(exp(x^3), x)

sin ( x ), max (a, b ), e x dx


3

Cadernos do IME : Srie Informtica : Vol. 18 : Julho de 2005 : 37 __________________________________________________________________________________


O mesmo comportamento se repetir em seus prprios procedimentos, quando voc encapsular o nome de procedimento em um hold. O hold impede a funo de se chamar recursivamente e terminar em uma recurso infinita. A funo seguinte calcula o valor absoluto para valores numricos (inteiros, nmeros racionais, nmeros reais de ponto flutuante, e nmeros complexos). Para todos os outros tipos de valores, o ela possui um retorno simblico: Abs := proc(x) begin if testtype(x, Type::Numeric) then if domtype(x) = DOM_COMPLEX then return(sqrt(Re(x)^2 + Im(x)^2)) else if x >= 0 then return(x) else return(-x) end_if end_if end_if; hold(Abs)(x) end_proc: Abs(-1), Abs(-2/3), Abs(1.234), Abs(2 + I/3), Abs(x + 1) a := b: f := proc() begin a := 1 + a^2 end_proc: f(); f(); f()

b2 +1
2

A procedure f altera o valor de uma varivel que foi definida fora da procedure. Quando a procedure termina, a varivel a um tem um valor novo que alterado novamente atravs de chamadas adicionais a procedure f. Utilizando a Palavra-Chave Local os identificadores so declarados como variveis locais e s so validos dentro do procedimento que as declarou. a := b: f := proc() local a; begin a := 2 end_proc: f():a

(b + 1) + 1 ((b + 1) + 1)
2 2 2

+1

b
Apesar dos nomes iguais das variveis, a atribuio a := 2 na varivel local, no afeta o valor do identificador global a definida fora da procedure. No existe limite para o numero de variveis locais declaradas em um procedimento. Basta declar-las apos a palavra chave local.

2 37 1, ,1.234, , Abs( x + 1) 3 3
Uma maneira mais elegante para obter um retorno simblico seria utilizando o Objeto MUPAD que devolve o nome do procedimento de chamada e a funo args() que retorna a seqncia de parmetros de entrada da procedure. Vejamos a seguir como ficaria a procedure Abs implementada nesses moldes. Abs := proc(x) begin if testtype(x, Type::Numeric) then if domtype(x) = DOM_COMPLEX then return(sqrt(Re(x)^2 + Im(x)^2)) else if x >= 0 then return(x) else return(-x) end_if end_if end_if; procname(args()) end_proc: Abs(-1), Abs(-2/3), Abs(1.234), Abs(2 + I/3), Abs(x + 1)

5. Concluso
O uso de da linguagem de Programao incluida no software Mupad no processo de ensino-aprendizagem permitiu o desenvolvimento de diversas solues de um mesmo problema possibilitado o estudante abordar problemas complexos com maior facilidade. No obstante das solues numricas, procurou-se tornar a Matemtica mais experimental, e analisar diferentes situaes com visualizao grfica, dando assim oportunidade ao estudante de aprender fazendo Por outro lado, o uso de softwares do tipo freeware com funcionalidaes similades ao dos softwares pagos desetimula o uso de cpias no autorizadas. Sugere-se a continuidade do trabalho conjunto entre a rea de Informtica e a rea de Matemtica na procura de metodologias que incentivem e facilitem o aprendizado das Ciencias Exatas.

BIBLIOGRAFIA
[1] Castao, Carlos. A pesquisa nos meios e materiais de ensino. In: SANCHO, Juana Maria (org). Para uma tecnologia educacional. Porto Alegre: Artmed, 2001. [2] Drescher,K et al. MuPAD User's Manual and CDROM: Multiprocessing Algebra Data Tool, MuPad Version 1.2.2.- Mupad Gruop (Corporate Author)

2 37 1, ,1.234, , Abs( x + 1) 3 3
A utilizao de Variveis em procedures permitida. Essas variveis externas so chamadas de variveis globais. Observe o comportamento da Procedure abaixo:

Você também pode gostar