You are on page 1of 18

index1.html file:///C:/Meus%20Documentos/Fisica/Manual%20Maple%2011/Capi...

Programação Básica (Basic


Programming)
Você usou o Maple interativamente nos capítulos anteriores, realizando seqüencialmente operações

como execução de um único comando. Como o Maple tem uma linguagem de programação completa,

você pode usar também sofisticadas construções de programação (programming constructs).

Importante:
É recomendado que se use o modo Planilha (Worksheet) e entrada em 1-D Math ao programar ou usar comandos
de programação. Portanto, todas as entradas neste capítulo são em

1-D Math.

8.1 Neste Capítulo

Seção Tópicos
Controle de Fluxo - Construções • Execução Condicional (
de programação básica Declaração if )• Repetição
(Declaração for )
Comandos Iterativos - • Criando uma Seqüência•
Comandos iterativos eficientes, Adicionando e Multiplicando
especializados Expressões • Selecionando
Operandos de Expressões •
Mapeando um Comando sobre
um Conjunto ou uma Lista

• Mapeando um Comando
Binário sobre Duas Listas ou
Vetores
Procedimentos - Programas • Definição e Execução de
Maple Procedimentos Simples •
Procedimentos com Entradas
(Inputs)• Procedimentos de
Valores Devolvidos • Exibição
de Definições de Procedimentos
• Exibição da Biblioteca Maple
de Definições de Procedimentos
• Módulos

1 de 18 30/03/2008 13:15
index1.html file:///C:/Meus%20Documentos/Fisica/Manual%20Maple%2011/Capi...

8.2 Controle de Fluxo

As duas contruções de programação básica (programming constructs) no Maple são a declaração if, que controla
a execução condicional de seqüências de declarações e declaração for, que controla a

execução repetida de uma seqüência de declarações.

Execução Condicional (Declaração if )


Você pode especificar que o Maple realize uma ação somente se uma condição for mantida. Você

pode também realizar uma ação, de um conjunto de muitas, dependendo de que condição manter.

Usando a declaração if , você pode executar uma declaração de uma série de declarações com base

em uma condição booleana (true (verdadeiro), false(falso), ou FAIL (falha)). O Maple testa cada

condição na ordem. Quando uma condição é satisfeita, o Maple executa a declaração correspondentee então sai
da declaração if .

Syntax

A declaração if tem a seguinte sintaxe.> if conditional_expression1 then


statement_sequence1
elif conditional_expression2 then
statement_sequence2
elif conditional_expression3 then
statement_sequence3
...
else
statement_sequenceN
end if;

As expressões condicionais (conditional_expression1, conditional_expression2, ...) podem ser qualquer


expressão booleana. Você pode construir expressões booleanas usando:

• Operadores de relação - <, <=, =, >=, >, <>

• Operadores lógicos - and, or, xor, implies, not

• Nomes lógicos - true, false, FAIL

As seqüências de declarações (statement_sequence1, statement_sequence2, ..., statement_sequenceN) podem ser


quaisquer declarações do Maple, inclusive declarações if .

As cláusulas elif são opcionais. Você pode especificar qualquer número de cláusulas elif .

A cláusula else é opcional.

Simples Declarações if

A declaração if mais simples tem somente uma expressão condicional.

2 de 18 30/03/2008 13:15
index1.html file:///C:/Meus%20Documentos/Fisica/Manual%20Maple%2011/Capi...

>if conditional_expression then


statement_sequence
end if;

Se a expressão condicional avalia true (verdadeiro), a seqüência de declaração é executada. Caso

contrário, o Maple sai imediatamnete da declaração if.

Por exemplo:

>

>

Cláusula else

Em uma declaração if simples com a cláusula else, se a avaliação das expressões condicionais devolve

false ou FAIL, o Maple executa a declaração na cláusula else.

Por exemplo:

>

Cláusula elif

Em uma declaração if com cláusulas elif , o Maple avalia as expressões condicionais na ordem até que

uma delas devolva true. O Maple executa a seqüência de declaração e depois sai da declaração if.

Se nenhuma das avaliações devolve true, o Maple sai da declaração if.>

>

11 is a integer with more than one digit.

3 de 18 30/03/2008 13:15
index1.html file:///C:/Meus%20Documentos/Fisica/Manual%20Maple%2011/Capi...

11 is an integer with more than one digit.

Ordem das Cláusulas elif - Uma seqüência de declaração de cláusula elif é executada somente se

a avaliação de todas as expressões condicionais anteriores devolve false ou FAIL e a avaliação da sua expressão
condicional devolve true. Isto significa que a troca da ordem das clásulas elif pode

mudar o comportamento da declaração if.

Na seguinte declaração if , as cláusulas elif estão na ordem errada.

>

>

11 is an integer with one digit.

11 is an integer with one digit.

Cláusulas elif e else

Em uma declaração if com cláusulas elif e else, o Maple avalia as expressões condicionais na ordem até que uma
devolva true. O Maple executa a seqüência de declaração correspodente e sai da

declaração if . Se nenhuma devolve true, o Maple executa a seqüência de declaração na cláusula else.

>

>

-12 is a negative integer.

4 de 18 30/03/2008 13:15
index1.html file:///C:/Meus%20Documentos/Fisica/Manual%20Maple%2011/Capi...

-12 is a negative integer.

Para maiores informações sobre a declaração if , consulte a página de ajuda ?if .

Repetição (para Declaração)


Usando declarações de repetição, você pode executar repetidamente uma seqüência de declaração.

Você pode repetir as declarações de três maneiras.

• Até que um valor da variável contadora (counter) exceda um limite (loop for/from)

• Para cada operando de uma expressão (loop for/in )

• Até que uma condição booleana não seja verdadeira (loop while)

Loop for/from

A declaração loop for/from repete uma declaração até que um valor da variável contador (counter)

exceda um limite.

SintaxeO loop for/from tem a seguinte sintaxe.

>for couter from initial by increment to final do


statement_sequence
end do:

O comportamento do loop for/from é:

1. Atribuir um valor inicial ao nome contador (counter)

2. Comparar o valor do counter ao valor do final. Se o valor de counter excede ao valor final, sair do loop.
(Este é o teste limite do loop.)

3. Executar o statement_sequence.

4. Incrementar o valor de counter pelo valor do incremento.

5. Repetir os passos 2 até 4, até o Maple sair do loop.

As cláusulas from, by e to são opcionais e podem estar em qualquer ordem entre a cláusula for e a

palavra-chave do.

Tabela 8.1: Valores Padrão de Cláusulas

5 de 18 30/03/2008 13:15
index1.html file:///C:/Meus%20Documentos/Fisica/Manual%20Maple%2011/Capi...

Cláusula Valores Padrão


from inicial 1
by incremento 1
to final infinity (∞)

Exemplos

O loop seguinte devolve a raiz quadrada de inteiros de 1 até 5 (inclusive).

>

Quando o valor da variável contador n é justamente maior que 5, O Maple sai do loop.

>

O loop anterior é equivalente à seguinte declaração for/from.

>

O valor by pode ser negativo. O loop repete até que o valor da variável contador seja justamente

6 de 18 30/03/2008 13:15
index1.html file:///C:/Meus%20Documentos/Fisica/Manual%20Maple%2011/Capi...

menor que o valor final.

>

>

for/in Loop

A declaração loop for/in repete uma seqüência de declarações para cada componente (operando) de

uma expressão, por exemplo, os elementos de uma lista.

Sintaxe

O loop for/in tem a seguinte sintaxe.


>for variable in expression do
statement_sequence
end do;

A cláusula for deve aparecer primeiro.

O comportamento do loop for/in é:

1. Atribuir ao nome da variável o primeiro operando da expressão

2. Executar a statement_sequence.

3. Atribuir o operando seguinte à variável.

4. Repetir os passos 2 e 3 para cada operando na expressão. Se não houver mais operandos, sair do

loop. ( Este é o teste limite do loop)

Exemplo

O loop seguinte devolve uma aproximação com ponto-flutuante para a função seno (sin) nos ângulos

7 de 18 30/03/2008 13:15
index1.html file:///C:/Meus%20Documentos/Fisica/Manual%20Maple%2011/Capi...

( medidos em graus) na lista L.

>

>

Loop while

O loop while repete uma seqüência de declarações até que uma expressão booleana não seja mantida.

Sintaxe

O loop while tem a seguinte sintaxe.


>while condicional_expression do
statement_sequence
end do;

O loop while repete-se até que sua expressão booleana conditional_expression avalie false ou FAIL.Para mais
informações sobre expressões booleanas, veja Execução Condicional (Declaração if)

(Conditional Execution (if Statement)) (pág. 289).

Exemplo

O loop seguinte computa os dígitos de 872349 na base 7 (na ordem de aumento de significância).

>

8 de 18 30/03/2008 13:15
index1.html file:///C:/Meus%20Documentos/Fisica/Manual%20Maple%2011/Capi...

>

Para realizar tais conversões eficientemente, use o comando convert/base.

>

9 de 18 30/03/2008 13:15
index1.html file:///C:/Meus%20Documentos/Fisica/Manual%20Maple%2011/Capi...

Para informações sobre bases não-decimais, veja Números em Bases Não-Decimais (pág. 62).

Declarações Gerais de Loop (General Loop Statements)

Você pode incluir uma declaração while em um loop for/from ou for/in.

O loop geral for/from tem a seguinte sintaxe.


>For counter from initial by increment to final
while conditional_expression do
statement_sequence
end do;

O loop geral for/in tem a seguinte sintaxe.

>for variable in expression


while conditional_expression do
statement_sequence
end do;

Depois de testar a condição limite do loop no início de cada iteração do loop for loop, o Maple avaliaa
conditional_expression.

• Se a conditional_expression avalia false ou FAIL, o Maple deixa o loop.

• Se a expressão condicional (conditional_expression) avalia true, o Maple executa a seqüência de

declaração (statement_sequence).

Loop Infinito

Você pode construir um loop para o qual não exista a condição para deixá-lo, por exemplo, um loopwhile em
que a expressão condicional avalie sempre true. Este é chamado de loop infinito. O Maple executa
indefinidamente, a menos que ele execute uma declaração break, quit ou return ou que você interrompa a
computação. Para mais informações, consulte as páginas de ajuda para ?break, ?quit,

?return e ?interrupt .

Informação Adicional

Para mais informações sobre a declaração for e looping, consulte a página de ajuda ?do.

8.3 Comandos Iterativos

10 de 18 30/03/2008 13:15
index1.html file:///C:/Meus%20Documentos/Fisica/Manual%20Maple%2011/Capi...

O Maple tem comandos que ralizam operações de repetição e de seleção comum. Estes comandos são mais
eficientes que algoritmos similares implementados usando a biblioteca de comandos. A Tabela

8.2 lista os comandos iterativos.

Tabela 8.2: Comandos Iterativos

Comando Descrição
seq Criar seqüência
add Computar soma numérica
mul Computar produto numérico
select Devolver operandos que satisfazem uma
condição
remove Devolver operandos que não satizfazem uma
condição
selectremove Devolver operandos que satisfazem uma
condição e separadamente devolvem
operandos que não satisfazem uma condição
map Aplicar comandos aos operandos de uma
expressão
zip Aplicar comando binário aos operandos de
duas listas ou vetores

Criando uma Seqüência


O comando seq cria uma seqüência de valores pela avaliação de uma expressão específica sobre um

intervalo de valores de índices ou dos operandos de uma expressão. Veja a tabela 8.3.

Tabela 8.3: O Comando seq

Sintaxe de Chamada de Exemplos


Seqüência
seq(expressão, nome = >
inicial .. final);

seq(expressão, nome in >


expressão);

11 de 18 30/03/2008 13:15
index1.html file:///C:/Meus%20Documentos/Fisica/Manual%20Maple%2011/Capi...

Adição e Multiplicação de Expressões


Os comandos add e mul adicionam e multiplicam seqüências de expressões sobre um intervalo de

valores de índices ou os operandos de uma expressão. Veja a tabela 8.4.

Tabela 8.4: Os Comandos add e mul

Sintaxe de Chamada de Exemplos


Seqüência
add(expressão, nome = >
inicial ..
final);mul(expressão, nome =
inicial .. final);

>

add(expressão, nome in (na) >


expressão);mul(expression,
nome in (na) expressão);

>

Os pontos limites do intervalo dos índices (initial e final) na chamada de seqüência add e mul devem avaliar
constantes numéricas. Para informações sobre somas e produtos simbólicos, consulte as páginas

de ajuda ?sum e ?product.

Seleção de Operandos de Expressão

12 de 18 30/03/2008 13:15
index1.html file:///C:/Meus%20Documentos/Fisica/Manual%20Maple%2011/Capi...

Os comandos select, remove e selectremove aplicam um procedimento de avaliação booleana

ou um comando para os operandos de uma expressão. Para informações sobre operandos, consulte a página de
ajuda ?op.

• O comando select devolve os operandos para os quais o procedimento ou o comando devolve true.

• O comando remove devolve os operandos para os quais o procedimento ou o comando devolve

false.

• O comando selectremove devolve duas expressões do mesmo tipo da expressão de entrada.

- A primeira consiste em operandos para os quais o procedimento ou o comando devolve true.

- A segunda consiste em operandos para os quais o procedimento ou o comando devolve false ou FAIL.

Veja a tabela 8.5.

Para informações sobre procedimentos Maple, veja Procedimentos (pág. 301).

Tabela 8.5: Os Comandos select, remove e selectremove

Sintaxe de Chamada de Exemplos


Seqüência
select(proc_cmd, >
expression);

remove(proc_cmd, >
expression);

selectremove(proc_cmd, >
expression);

Para informações sobre argumentos opcionais para os comandos de seleção, consulte a página de ajuda

?select.

13 de 18 30/03/2008 13:15
index1.html file:///C:/Meus%20Documentos/Fisica/Manual%20Maple%2011/Capi...

Mapeando um Comando sobre um Conjunto ou uma Lista


O comando map aplica um nome, procedimento ou comando a cada elemento de um conjunto ou lista.

Veja a tabela 8.6.

Tabela 8.6: O Comando map

Sintaxe de Chamada de Exemplos


Seqüência
map(name_proc_cmd, >
expression);

>

Para informações sobre mapear os operandos de outras expressões, argumentos opcionais para o

comando map e outros comandos para mapear, consulte a página de ajuda ?map.

Mapeando um Comando Binário sobre Duas Listas ou Vetores

O comando zip aplica um nome ou procedimento binário ou comando component-wise a duas listas ou vetores.

Por padrão, o comprimento do objeto devolvido é aquele da menor lista ou vetor. Se você especificar um valor
como quarto argumento (opcional), ele é usado como o valor dos elementos que faltam

na menor lista ou vetor. Neste caso, o comprimento do valor devolvido é aquele da maior lista ou vetor.Veja a
tabela 8.7.

14 de 18 30/03/2008 13:15
index1.html file:///C:/Meus%20Documentos/Fisica/Manual%20Maple%2011/Capi...

Tabela 8.7: O Comando zip

Sintaxe de Chamada de Exemplos


Seqüência
zip(proc_cmd, a, >
b);zip(proc_cmd, a, b, fill);

>

Para mais informações sobre o comando zip, consulte a página de ajuda ?zip.

Informação Adicional
Para mais informações sobre comandos looping , consulte a página de ajuda do comando correspondente.

8.4 Procedimentos
Um procedimento do Maple é um programa que consiste em declarações do Maple. Usando procedimentos,

você pode executar rapidamente a seqüência de declarações contidas.

Definindo e Executando Procedimentos Simples


Para definir um procedimento, colocar uma seqüência de declarações entre as declarações proc(...)

e end proc. Em geral, você atribui um nome a uma definição de procedimento.

O seguinte procedimento devolve a raiz quadrada de 2.

>

Note: O Maple devolve a definição de procedimento.

Para melhorar a legibilidade dos procedimentos, é recomendado definir um procedimento usando

15 de 18 30/03/2008 13:15
index1.html file:///C:/Meus%20Documentos/Fisica/Manual%20Maple%2011/Capi...

múltiplas linhas e recuar as linhas usando caracteres de espaçamento. Para começar uma nova linha (sem avaliar
a definição incompleta do procedimento), pressione Shift+Enter. Quando

você tiver terminado com a entrada do procedimento, pressione Enter para criar o procedimento.Por exemplo:

>

Para executar o procedimento p, entre com seu nome seguido de parênteses (( )).

>

Procedimentos com Entradas (Inputs)


Você pode definir um procedimento que aceita usar entradas (input). Nos parênteses da declaração

proc, especificar os nomes dos parâmetros. Para múltiplos parâmetros, separe os nomes por vírgulas.

>

Quando o usuário executa o procedimento, os nomes dos parâmetros são substituídos pelos valores

dos argumentos.

>

>

Para mais informações sobre escrever procedimentos, incluindo opções e variáveis locais e globais,

consulte a página de ajuda ?procedure.

Valores Devolvidos do Procedimento

16 de 18 30/03/2008 13:15
index1.html file:///C:/Meus%20Documentos/Fisica/Manual%20Maple%2011/Capi...

Quando você executa um procedimento, o Maple devolve somente o valor computado pelo resultado

da última declaração. O Maple não devolve a saída de cada declaração no procedimento. E é irrelevantevocê usar
ponto e vírgula ou dois pontos como separadores de declarações.

>

>

Exibindo Definições de Procedimentos


Ao contrário de objetos simples do Maple, você não pode exibir o valor de um procedimento entrando

com seu nome .

>

Você deve avaliar o nome do procedimento usando o comando print (ou eval).

>

Exibindo a Biblioteca de Definições de Procedimentos do Maple


As definições de procedimento do Maple são uma valiosa ferramenta de aprendizado. Para aprender

como programar no Maple, é recomendado que você examine os procedimentos disponíveis na biblioteca
Maple.

Por padrão, o comando print devolve somente as declarações proc e end proc e (se estiver presente)

os campos de descrição de um procedimento do Maple.

>

17 de 18 30/03/2008 13:15
index1.html file:///C:/Meus%20Documentos/Fisica/Manual%20Maple%2011/Capi...

Para exibir a biblioteca Maple de definição de procedimento, primeiro determine o valor da

interface verboseproc opção 2. Depois, reexecute a chamada de seqüência print.

Veja a figura 8.1.

>

>

Figura 8.1: Exibição do Procedimento assign

Módulos
Os procedimentos do Maple associam uma seqüência de comandos a um único comando. O módulo, uma
estrutura de programação mais complexa, permite a você associar procedimentos relacionados

e dados.

Uma funcionalidade chave dos módulos é que eles exportam variáveis. Isto significa que as variáveis

estão disponíveis fora do módulo em que foram criadas. A maioria dos pacotes do Maple são

implementados como módulos. Os comandos do pacote são exportações do módulo.

Para mais informações sobre módulos, consulte a página de ajuda ?module.

18 de 18 30/03/2008 13:15