Sei sulla pagina 1di 34

Ncleo de Informtica Aplicada Educao Universidade Estadual de Campinas

RESUMO

Este texto d continuidade ao trabalho iniciado no Memo No 35, intitulado: Tartarugas, Figuras, Palavras, Listas e Procedimento: Um Primeiro Passeio pelo Logo SuperLogo. Agora, so abordados novos tpicos de programao: definio de procedimentos com parmetros, rea de trabalho, comandos condicionais, recurso e programas que "conversam" com o computador. A seleo dos tpicos de programao baseia-se na demanda experenciada pelas autoras durante os cursos de formao de professores na rea de Informtica e Educao.

NIED - Memo N 36 2000

Parmetros, Condicionais, Recurso... continuando o passeio pelo LogoSuperLogo 3.0


Helosa Vieira da Rocha (e-mail: heloisa@dcc.unicamp.br) Fernanda M. P. Freire (e-mail: ffreire@unicamp.br) Maria Elisabette B.B. Prado (e-mail: bprado@unicamp.br)

Ncleo de Informtica Aplicada Educao - Nied Universidade Estadual de Campinas - Unicamp Cidade Universitria "Prof. Zeferino Vaz" Prdio V da Reitoria - 2 Piso 13083-970 - Campinas - SP Telefones: (019) 788-7350 ou 788-8136 Fac-smile: (019) 788-7350 ou 788-8136 (Ramal 30) http://www.nied.unicamp.br

Parmetros, Condicionais, Recurso... Continuando o passeio pelo Logo

CONTEDO

Introduo Procedimentos com parmetros Definindo operaes: o comando ENVIE Procedimentos com mais de um parmetro Nomeao de Parmetros: o conceito de nomes locais Procedimentos com Parmetros de natureza diversa rea de trabalho Comandos condicionais Recurso Programando a Interrupo de um comando recursivo Operaes recursivas Utilizando o retorno da recurso

1 2 4 6 7 10 13 14 19

Conversando com o computador Bibliografia

30 32

Parmetros, Condicionais, Recurso... Continuando o passeio pelo Logo


INTRODUO
O conjunto de aes primitivas do Logo subdividido em duas categorias: COMANDOS e OPERAES. Comandos so aes que sempre produzem uma ao explcita: um desenho, a impresso de algum valor, etc.. Por exemplo, PF um comando que resulta em um deslocamento da tartaruga. ROTULE um comando que resulta na escrita de um valor ou mensagem na Janela Grfica. Outros exemplos so PD, PE, PT, UL, etc..

Ao contrrio dos comandos, as operaes no produzem uma ao explcita mas, sim, valores que ficam disponveis para serem usados por outros comandos. Por exemplo, suponhamos que a tartaruga esteja posicionada na coordenada 80 do eixo X da Janela Grfica. Para obter essa informao, pode-se pedir para escrever na tela o valor da coordenada X usando:

ROTULE COORX 1 80

Se for digitado:

COORX

o Interpretador Logo devolver uma mensagem de erro do tipo:

no disse o que fazer com 80

Isto porque, o valor retornado pela operao COORX deve ser usado como entrada de um comando (por exemplo: rotule coorx).

Uma operao, portanto, sempre utilizada como parmetro de um comando ou de uma outra operao2. Por exemplo: MO POS. Outras operaes anlogas so: D, COORY etc..

Parmetros, Condicionais, Recurso... Continuando o passeio pelo Logo

A partir do conjunto de primitivas da linguagem pode-se definir novos procedimentos para serem usados nos mais variados contextos. Neste texto vamos abordar conceitos computacionais que permitem uma maior amplitude no uso da linguagem Logo.

Procedimentos com parmetros Em Logo, h comandos como UN, DT, que no usam parmetro e comandos, como PF, REPITA, MUDEPOS que precisam de um ou mais parmetros. A natureza do parmetro pode ser diversificada: nmero, palavra ou lista. H ainda comandos como o ROTULE que aceitam parmetros de qualquer natureza.

Ao definirmos um procedimento como:

APRENDA QUADRADO REPITA 4 [ PF 70 PD 90 ] FIM estamos construindo um comando de nome QUADRADO que no precisa de parmetro e que sempre produz o desenho de um quadrado cujo lado mede 70 "passos de tartaruga". Este tipo de procedimento define um comando que anlogo a comandos como UN ou AT que dispensam o uso de parmetros.

possvel, tambm, construir procedimentos anlogos ao comando PF, ou seja, que necessitam valores para a sua execuo. A definio deste tipo de procedimento possibilita a construo de procedimentos mais genricos. Pode-se definir um procedimento de nome QUADRADO que desenha a figura de um quadrado cujo tamanho especificado pelo parmetro dado:

APRENDA QUADRADO :lado 3 REPITA 4 [ PF :lado PD 90 ]


1

Os exemplos apresentados usam os comandos da verso SuperLogo 3.0. Todos eles podem ser adaptados e utilizados em outras verses de Logo. Nesta verso os comandos com acentuao devero ser digitadas com letras minsculas. 2 Para maiores detalhes sobre esse tpico, consultar: Rocha,H.V., Freire,F.M.P.,Prado,M.E.B.B..(199() Tartarugas, Figuras, Palavras, Listas e Procedimento: Um Primeiro Passeio Pelo Logo. MEMO no 35. Campinas: NIED - UNICAMP. Estamos convencionando a escrita do nome do procedimento em letras maisculas e o nome do parmetro em minsculas.

Helosa Vieira da Rocha, Fernanda M. P. Freire & Maria Elisabette Brisola Brito Prado

FIM Em Logo, h duas notaes importantes: uma utiliza aspas ( " ) e, a outra, o sinal de dois pontos ( : ). Quando se escreve:
"lado

estamos nos referindo ao nome lado ou palavra lado. Mas, quando se escreve:

:lado

estamos nos referindo ao valor representado pelo nome lado (ou pela palavra lado).

Portanto, no caso de procedimentos com parmetros, estes sempre sero precedidos por dois pontos ( : ). Esta notao indica que ser usado o valor do nome que representa o parmetro e que informado no momento da chamada do procedimento.

O procedimento ser utilizado da mesma forma que qualquer comando Logo com parmetro, isto , para desenhar um quadrado de lado 50 deve-se digitar:

QUADRADO 50

e para desenhar um quadrado de lado 25:

QUADRADO 25

Vamos ver outro exemplo. Suponha que se queira um procedimento que desenhe um quadrado, a sua diagonal e retorne a tartaruga ao ponto inicial. A diagonal do quadrado a raiz quadrada de 2 multiplicada pelo comprimento do lado. O procedimento faz exatamente isso:

APRENDA DIAGONAL REPITA 4 [ PF 50 PD 90] PD 45 PF 50 * RAIZQ 2 4 PT 50 * RAIZQ 2


4 Neste caso, como o lado do quadrado 50, o resultado da raiz quadrada de 2 multiplicada por 50 igual a 70.

Parmetros, Condicionais, Recurso... Continuando o passeio pelo Logo

PE 45 FIM Para desenhar um quadrado de qualquer tamanho e sua respectiva diagonal, pode-se definir o procedimento DIAGONAL com um parmetro que representa o valor do lado que ser desenhado o quadrado: APRENDA DIAGONAL :lado REPITA 4 [PF :lado PD 90] PD 45 PF :lado * ( raizq 2 ) PT :lado * ( raizq 2 ) PE 45 FIM
DIAGONAL 100

Definindo operaes: o comando envie O procedimento QUADRADO apresentado no item anterior produz um resultado na tela grfica: o desenho da figura de um quadrado do tamanho dado como entrada. Por esta razo, este tipo de procedimento definido como um comando.

De forma anloga, pode-se definir operaes, como:

APRENDA DOBRO :nmero ENVIE :nmero * 2 FIM que retorna o dobro de um nmero dado como parmetro.

Assim, se for digitado:

ESC DOBRO 173

aparecer escrito na Janela de Comandos o nmero:


346

Helosa Vieira da Rocha, Fernanda M. P. Freire & Maria Elisabette Brisola Brito Prado

O que torna possvel a definio de operaes em Logo o comando ENVIE. O ENVIE um comando especial que s pode ser utilizado dentro de procedimentos e nunca no modo direto. Ele necessita de um parmetro que pode ser de qualquer natureza: palavra, nmero ou lista.

Se o parmetro do ENVIE for uma palavra, o procedimento que o usa em sua definio, tambm retornar uma palavra. No nosso exemplo, o parmetro do ENVIE um nmero (resultante da operao de multiplicao) e a sada de DOBRO tambm um nmero. Portanto, o ENVIE retorna como sada do procedimento do qual faz parte, um parmetro de natureza idntica do seu prprio parmetro.

Todo procedimento que possui o ENVIE uma operao porque retorna um valor para ser utilizado por outros comandos ou operaes:

PF DOBRO 100

ou mesmo:

ESC (DOBRO 148) - (DOBRO 123)

DOBRO anlogo a operaes primitivas do Logo como: RAIZQ, SEN, COS, entre outras.

Procedimentos como:

APRENDA A :qualquer ENVIE (ULT :qualquer) = "a FIM so denominados predicados. Predicados so operaes que retornam valores booleanos, isto , VERD ou FALSO. O procedimento A retorna VERD se o ltimo elemento do parmetro dado for o caracter a, caso contrrio, retorna FALSO. Por exemplo:
ESC A "boba verd

Parmetros, Condicionais, Recurso... Continuando o passeio pelo Logo

ESC A 340 falso

ESC A [ c b a ] verd

ESC A [ 340 boba ] falso

Procedimentos com mais de um parmetro Pode-se definir procedimentos em Logo com mais de um parmetro. Escolhe-se um nome para cada um dos parmetros e inclui-se os mesmos no cabealho do procedimento. Por exemplo, para se desenhar retngulos de diversos tamanhos pode-se definir:

APRENDA RETNGULO :altura :comprimento PF :altura PD 90 PF :comprimento PD 90 PF :altura PD 90 PF :comprimento PD 90 FIM Com ele, pode-se desenhar um retngulo de qualquer tamanho, de acordo com o valor dado como entrada no momento da chamada:

RETNGULO 70 10

ou, um quadrado, se dermos como valores dos parmetros algo como:

RETNGULO 70 70

Tambm as operaes podem ser definidas com mais de um parmetro:

APRENDA PORCENTO :porcentagem :nmero ENVIE (:porcentagem * :nmero) / 100 FIM Com esta operao, pode-se obter uma determinada porcentagem a partir dos nmeros dados como entrada:

Helosa Vieira da Rocha, Fernanda M. P. Freire & Maria Elisabette Brisola Brito Prado

ESC PORCENTO 170 15 25.5

ESC PORCENTO 50 5 2.5

ESC PORCENTO 5 50 2.5

Nomeao de parmetros: o conceito de nomes locais Definir um procedimento Logo significa agrupar uma srie de comandos sob um nome escolhido pelo programador. O novo procedimento pode ser visto como parte do vocabulrio da linguagem Logo porque ele representa uma nova palavra cujo significado descrito pelo procedimento. Usar parmetros tambm envolve esse processo de nomeao mas, em um sentido diferente. Os nomes dos parmetros, so locais ao procedimento que os usam como entrada, ou seja, somente o prprio procedimento conhece estes nomes.

Uma vez que os nomes dos parmetros so locais, diferentes procedimentos podem usar os mesmos nomes de parmetros sem que haja qualquer interferncia entre eles. Isso anlogo a pensarmos que existem diversas famlias com pessoas que possuem um mesmo nome e, na verdade, so pessoas diferentes.

Outra maneira de pensar, imaginar que cada procedimento tem uma biblioteca particular. Toda vez que o procedimento chamado ele acessa esta biblioteca particular que associa ao nome dos parmetros os valores especificados na chamada. Quando o procedimento avalia uma linha que contm um nome de parmetro (precedido de dois pontos) o Interpretador busca o valor daquele nome na biblioteca e substitui-o pelo valor. Por exemplo, o procedimento RETNGULO chamado com:

RETNGULO 70 10

teria associado a ele uma biblioteca como a mostrada na figura 1.

Parmetros, Condicionais, Recurso... Continuando o passeio pelo Logo

Figura 1: biblioteca particular quando da execuo de RETNGULO 70 10

Os valores dados de entrada no momento em que o procedimento chamado so associados aos nomes na ordem em que aparecem na linha ttulo do procedimento. Neste caso, o primeiro valor, 70, associado ao nome do primeiro parmetro altura e, o segundo valor, 10, associado ao nome do segundo parmetro comprimento.

Como se sabe, um comando em um procedimento pode ser a chamada de um outro procedimento (subprocedimento). Como cada procedimento tem sua prpria biblioteca particular de nomes no existe conflito entre procedimentos que utilizam nomes iguais para seus parmetros. Por exemplo, o procedimento RETNGULO pode ser utilizado como parte de um procedimento para desenhar uma bandeira, como mostra a figura 2:

APRENDA BANDEIRA :altura PF :altura RETNGULO (:altura/2) :altura 5 PT :altura FIM

Figura 2: bandeira desenhada por BANDEIRA 70

O procedimento BANDEIRA desenha um "mastro" de tamanho altura e ento desenha no topo do mastro um retngulo de tamanho altura/2 altura e, em seguida, move a Tartaruga de volta para a base do mastro.

Vamos examinar detalhadamente como avaliado o comando BANDEIRA 70:

5 Observe o uso de parnteses em (:altura /2 ). Isto no uma exigncia do Logo mas, torna o programa mais fcil de ser lido.

Helosa Vieira da Rocha, Fernanda M. P. Freire & Maria Elisabette Brisola Brito Prado

Ele cria uma biblioteca particular para BANDEIRA dentro da qual existe o nome altura associado ao valor 70 e inicia a avaliao da definio de BANDEIRA comeando pela primeira linha:

PF :altura

Olhando na biblioteca particular de Bandeira, o Interpretador encontra o valor 70 associado ao nome altura, e ento ele faz a tartaruga andar PARAFRENTE 70. A seguir preciso avaliar a prxima linha:

RETNGULO (:altura / 2) :altura

Para executar este comando, primeiro, o Interpretador calcula os valores que sero passados para RETNGULO. O primeiro valor a metade do valor de altura, isto , 35; e, o segundo valor, o prprio valor de altura, que 70. Para fazer este clculo ele utiliza a biblioteca particular de RETNGULO. A partir da fica estabelecido que o comando a ser executado RETNGULO 35 70. Isto faz com que seja criada a biblioteca particular de BANDEIRA, na qual os nomes dos parmetros de RETNGULO altura e comprimento so associados aos valores 35 e 70 respectivamente. Um esquema destas chamadas pode ser visto na figura 3. Embora o nome altura seja associado a 70 em BANDEIRA e a 35 em RETNGULO, isso no cria qualquer conflito, pois cada procedimento consulta sua prpria biblioteca.

Figura 3: bibliotecas particulares criadas a partir da chamada de BANDEIRA 70

O conceito de nomes locais importante pelo fato de se poder definir procedimentos com parmetros sem precisar se preocupar com detalhes relacionados a escrita do procedimento, podendo-se concentrar mais naquilo que o procedimento faz. Quando se est construindo o

10

Parmetros, Condicionais, Recurso... Continuando o passeio pelo Logo

procedimento BANDEIRA, pode-se olhar o procedimento RETNGULO como um todo, sem observar como foi escrito o procedimento (que nomes foram dados aos seus parmetros). O interessante que ao escrever o procedimento BANDEIRA o procedimento RETNGULO pode ser tratado como se fosse mais uma primitiva do sistema Logo (se estiver disponvel na rea de trabalho naquele instante).

A tcnica de enxergar um procedimento (mesmo um procedimento complexo) como um mdulo cujos detalhes no precisamos nos preocupar uma idia crucial em programao. Cada vez que se define um novo procedimento, pode-se us-lo como uma parte de procedimentos mais complexos e, desta forma, pode-se construir processos muito complexos.

Como ilustrao, uma vez definida a BANDEIRA pode-se construir um outro procedimento que faz a tartaruga desenhar uma bandeira e caminhar um pouco para a direita:

APRENDA BANDANDE :tamanho :distncia UL BANDEIRA :tamanho UN PD 90 PF :distncia PE 90 FIM e, utilizar este procedimento para desenhar uma linha de diversas bandeiras como mostra a figura 4: APRENDA LINHABAND :quantas :tamanho :distncia REPITA :quantas [ BANDANDE :tamanho :distncia] FIM

Figura 4: desenho feito por LINHABAND 3 40 50

Procedimentos com parmetros de natureza diversa At agora vimos procedimentos cuja entrada um nmero mas, se observarmos o elenco de primitivas do Logo, descobriremos que os parmetros tambm podem ser listas ou palavras,

Helosa Vieira da Rocha, Fernanda M. P. Freire & Maria Elisabette Brisola Brito Prado

11

como nos casos de: MUDEPOS OU MUDECL. Isso implica que tambm possvel construir procedimentos cuja entrada pode ser uma palavra ou uma lista, dependendo do tipo de uso.

H muitas formas de usar palavras e listas em Logo. Pode-se, para ilustrar melhor essa idia, definir um procedimento que escreva os ingredientes de um bolo de limo: APRENDA INGREDIENTES ROTULE [ Bolo de limo ] UN PT 20 ROTULE [ 4 ovos ] PT 20 ROTULE [ 2 copos de acar ] PT 20 ROTULE [ 1 copo de leite ] PT 20 ROTULE [ 3 copos de farinha ] PT 20 ROTULE [ 1 colher de fermento ] PT 20 ROTULE [ 2 xcaras de suco de limo ] FIM Esta relao de ingredientes pode ser considerada "padro" e, por esta razo, pode ser usada para vrios outros bolos: de laranja, de abacaxi, de morango, etc.. Para tanto, pode-se modificar o procedimento de modo que ele escreva os ingredientes de bolos de diferentes sabores:

12

Parmetros, Condicionais, Recurso... Continuando o passeio pelo Logo

APRENDA INGREDIENTES :sabor ROTULE SN [ Bolo de ] :sabor UL PT 20 ROTULE [ 4 ovos ] PT 20 ROTULE [ 2 copos de acar ] PT 20 ROTULE [ 1 copo de leite ] PT 20 ROTULE [ 3 copos de farinha ] PT 20 ROTULE [ 1 colher de fermento ] PT 20 ROTULE SN [ 2 xcaras de suco de ] :sabor FIM
INGREDIENTES "laranja

o computador escrever a receita colocando a palavra laranja nos locais adequados e assinalados pela presena do parmetro: Bolo de laranja e 2 xcaras de suco de laranja. O mesmo ocorrer se o parmetro for:
INGREDIENTES "morango

Suponha que se queira fazer o desenho do bolo e pint-lo com a cor do lpis correspondente cor do sabor do bolo. preciso definir um procedimento que desenhe e pinte o bolo. Algo como: APRENDA BOLO :cor ... ... ... UL MUDECP :cor ..... FIM

comandos que desenham um bolo

Em seguida, pode-se juntar os dois procedimentos afim de usar uma nica chamada e obter os ingredientes e o desenho:

APRENDA RECEITA :sabor :cor

Helosa Vieira da Rocha, Fernanda M. P. Freire & Maria Elisabette Brisola Brito Prado

13

INGREDIENTES :sabor BOLO :cor FIM O lugar do desenho na tela tambm pode ser escolhido. Para tanto preciso definir mais um parmetro para representar a posio desejada do desenho (par de coordenadas x e y). Tem-se ento:

APRENDA RECEITA :sabor :lugar :cor INGREDIENTES :sabor UN MUDEPOS :lugar UL BOLO :cor FIM O resultado final um procedimento que utiliza trs parmetros: uma palavra - que serve para escrever os ingredientes do bolo com o sabor desejado; uma lista - que posiciona a tartaruga em um certo ponto da tela; e um nmero - que indica a cor correlacionada ao sabor do bolo. Ao efetuarmos a chamada:
RECEITA "morango [-30 0] 4

obtm-se a receita do bolo de morango e o desenho de um bolo pintado de vermelho.

rea de trabalho

Quando se define um procedimento em Logo, costuma-se dizer que o novo procedimento passa a fazer parte do elenco de primitivas do Logo. Essa afirmativa relativamente verdadeira. A implementao da linguagem Logo reserva um espao de memria para o usrio trabalhar. Esse espao denominado de rea de trabalho. Assim tudo que feito pelo usurio durante uma sesso Logo fica disponvel, na rea de trabalho: procedimentos definidos, figuras definidas, etc..

Quando se sai do Logo toda e qualquer informao existente na rea de trabalho perdida porque ela voltil. Para que isso no ocorra necessrio organizar e armazenar os contedos da rea de trabalho de forma permanente, isto , em disquete ou disco rgido na forma de arquivos.

14

Parmetros, Condicionais, Recurso... Continuando o passeio pelo Logo

O gerenciamento da rea de trabalho se faz atravs de comandos primitivos do Logo como: SALVE, CARREGUE, ELTUDO, MOTS, MOPS, entre outros.

Portanto, quando se diz que a definio de procedimentos expande o elenco de primitivas do Logo, isto deve ser compreendido metaforicamente. Na verdade, os procedimentos definidos pelo usurio A podero fazer parte de um arquivo que, se carregado para a rea de de trabalho, estar disponvel para ser reutilizado mas no ser parte da linguagem Logo propriamente dita. Os procedimentos de um arquivo X do usurio A, por exemplo, no faro parte da rea de trabalho do usurio B a no ser que este ltimo carregue o arquivo X para a sua prpria rea de trabalho.

Comandos condicionais O comando SE chamado de comando condicional. Ao ser usado, modifica o fluxo de execuo de um programa, como veremos mais adiante. Ele tem a forma:

SE

alguma condio verdadeira

faa alguma ao

O primeiro parmetro, a condio, um predicado que retorna VERD ou FALSO6 . Qualquer predicado primitivo do Logo ou qualquer predicado definido pelo usurio pode ser usado como parmetro do SE. A ao a ser executada no caso de a condio ser verdadeira uma lista de instrues. Quando o resultado do predicado FALSO, a lista no executada e o Interpretador Logo continua a execuo do programa no comando imediatamente seguinte ao comando SE

A forma geral do comando SE, portanto, :

SE

<predicado>

<lista>

Em algumas verses do Logo existem outros comandos condicionais como SEVERD e SEFALSO. No SuperLogo, por exemplo, pode-se usar o comando SE com 3 parmetros:
6 Geralmente em Logo os predicados se iniciam por , como NMERO, VAZIA, PALAVRA. So considerados tambm predicados os operadores Lgicos: E, NO, ALGUM e os operadores relacionais: >, <, =.

Helosa Vieira da Rocha, Fernanda M. P. Freire & Maria Elisabette Brisola Brito Prado

15

(SE <predicado>

<lista1>

<lista2>)

Caso o predicado seja VERD executada a lista1, caso contrrio, executada a lista2. Esta forma do comando SE anloga forma do comando SENO usado em outras verses do Logo.

Recapitulemos o exemplo do quadrado com parmetro. Dependendo do parmetro dado, o desenho ultrapassa as dimenses da tela. Pode-se "testar" o tamanho do lado para contornar este problema com o auxlio do comando SE:

APRENDA QUADRADO :lado TAT SE :lado > 200 [ UN PT 200 UL ] REPITA 4 [ PF :lado PD 90 ] FIM Assim, se o procedimento for chamado com:

QUADRADO 100

a tartaruga desenhar um quadrado de lado igual a 100 passos a partir do centro da tela. Mas, se o procedimento for chamado com:

QUADRADO 210

a tartaruga andar 200 passos para trs e depois desenhar o quadrado com o tamanho solicitado.

Para desenhar quadrados ainda maiores dentro dos limites da tela, podemos sofisticar a condio a ser testada, acrescentando um nmero mnimo e mximo do tamanho do lado do quadrado, atrelado a um certo deslocamento da tartaruga:

APRENDA QUADRADO :lado TAT SE E (:lado > 200) (:lado < 400) [ DESLOCATAT] REPITA 4 [ PF :lado PD 90 ] FIM

16

Parmetros, Condicionais, Recurso... Continuando o passeio pelo Logo

APRENDA DESLOCATAT UN PT 200 PE 90 PF 155 PD 90 UL FIM Neste caso, a tartaruga somente se deslocar na tela caso os dois predicados aritmticos sejam VERD. Os resultados de " > " e de " < " so retornados ao operador lgico E que, por sua vez, retorna o resultado ao comando SE que executa a lista de instrues. Isto mostra que o primeiro parmetro do comando SE pode ser um encadeamento de vrios predicados cujo resultado final VERD ou FALSO.

O que acontece se for digitado:


QUADRADO 500

O valor do parmetro ultrapassa o intervalo de tamanho descrito no programa. Assim, como o resultado do operador lgico FALSO, a tartaruga permanece no centro da tela. A linha seguinte do programa, que desenha a figura do quadrado , ento, executada. A tartaruga desenha a figura do quadrado de lado 500 que ultrapassa os limites da tela. Para contornar isso, pode-se acrescentar uma nova condio:

APRENDA QUADRADO :lado TAT SE OU (:lado > 400) (:lado = 400) [ ESC [ Este quadrado ultrapassa os limites da tela ] ] SE E (:lado > 200) (:lado < 400) [ DESLOCATAT ] REPITA 4 [ PF :lado PD 90 ] FIM Se, agora, for solicitado:
QUADRADO 500

o Interpretador imprimir a mensagem:

este quadrado ultrapassa os limites da tela

e desenhar um quadrado de lado igual a 500.

Helosa Vieira da Rocha, Fernanda M. P. Freire & Maria Elisabette Brisola Brito Prado

17

Na verdade, o objetivo que o desenho de QUADRADO 500 no seja feito. Mas, da maneira como o procedimento est definido, o desenho ainda executado. Vejamos porque isso acontece.

Inicialmente, o Interpretador Logo executa a primeira linha do procedimento:

SE ALGUM :lado > 400 :lado = 400 [ ESC [ este quadrado ultrapassa os limites da tela ] ]

A condio satisfeita, retornando ao comando SE o valor booleano VERD, fazendo com que a lista de instrues seja executada. Em seguida, o Interpretador executa a segunda linha do procedimento:

SE E (:lado > 200) (:lado < 400) [ DESLOCATAT ]

Como a segunda condio no satisfeita, o comando SE recebe FALSO e no executa a lista de instrues. Em seguida, o Interpretador executa a linha seguinte:

REPITA 4 [ PF :lado PD 90 ]

e desenha o quadrado de lado 500 a partir do centro da tela. Portanto, o problema ainda no est resolvido.

necessrio modificar o fluxo de execuo do programa. No caso do valor do tamanho ser igual ou maior do que 400, o programa deve imprimir uma mensagem e ser interrompido. Isso obtido atravs do uso do comando PARE, que interrompe a execuo do programa no momento em que executado:

APRENDA QUADRADO :lado SE ALGUM :lado > 400 :lado = 400 [ ESC [ este quadrado ultrapassa os limites a tela ] PARE ] SE E (:lado > 200) (:lado < 400) [ DESLOCATAT ] REPITA 4 [ PF :lado PD 90 ] FIM Vejamos o procedimento FIGQUA que usa QUADRADO como subprocedimento:

APRENDA FIGQUA :lado

18

Parmetros, Condicionais, Recurso... Continuando o passeio pelo Logo

QUADRADO :lado ESC [ vamos brincar novamente ] FIM Se for executado FIGQUA 300, o procedimento desenhar um quadrado de lado 300 e imprimir a mensagem:

vamos brincar novamente

Se for solicitado FIGQUA 600, o procedimento imprimir duas mensagens:

este quadrado ultrapassa os limites da tela vamos brincar novamente

Observemos o fluxo de execuo de FIGQUA 600:


imprime a mensagem: vamos brincar novamente APRENDA FIGQUA 600 QUADRADO 600 ESC [ vamos brincar novamente ] FIM Imprime a mensagem: este quadrado ultrapassa os limites da tela APRENDA QUADRADO 600 SE ALGUM (600 > 400) (600 = 400) [ ESC [ este quadrado ultrapassa os limites a tela ] PARE ] . . . FIM

Isto exatamente o mesmo que acontece quando o procedimento executa a ltima linha de seu cdigo. Pode-se imaginar que sempre existe um comando PARE antes do FIM, pois o comportamento o mesmo.

Vejamos no caso das operaes o que acontece. A operao abaixo retorna a palavra comeo quando as suas entradas iniciam com um mesmo caracter, retorna a palavra final quando as suas entradas terminam com um mesmo caracter ou retorna a palavra diferente quando no ocorre nenhuma das duas situaes.

APRENDA PRIULT :palavra1 :palavra2 SE ( PRI :palavra1) = ( PRI :palavra2) [ ENVIE "comeo ]

Helosa Vieira da Rocha, Fernanda M. P. Freire & Maria Elisabette Brisola Brito Prado

19

SE ( ULT :palavra1) = (ULT :palavra2) [ENVIE "final ] ENVIE "diferente FIM Portanto, se for solicitado:

ESC PRIULT "bode "cabra

o resultado ser:

diferente

Mas, se for pedido:


ESC PRIULT "ovo "galo

ou
ESC PRIULT "elefante "exrcito

sero escritas as palavras final e comeo, respectivamente. Nos dois casos, embora o procedimento ainda tenha outras instrues, elas no so executadas. Isso acontece porque o comando ENVIE tem, tambm, a funo de interromper o procedimento, como se ele tivesse um comando PARE na sua definio. Portanto, as operaes no necessitam do comando PARE para indicar o final de execuo do procedimento em um ponto diferente do FIM. Assim, se utilizarmos:

ESC PRIULT "casa "cola

o resultado ser:
comeo

Recurso Como j se sabe, quando se deseja repetir uma certa ao um determinado nmero de vezes conhecido, pode-se usar o comando REPITA. Entretanto, h contextos em que no se

20

Parmetros, Condicionais, Recurso... Continuando o passeio pelo Logo

sabe "a priori" quantas vezes ser necessrio repetir uma seqncia de passos para se conseguir um resultado desejado. O programa seguinte um timo exemplo: APRENDA POLI :lado :ngulo PF :lado PD :ngulo POLI :lado :ngulo FIM A tartaruga fica se movendo muitas e muitas vezes de acordo com os valores dados como entrada, at que se interrompa a execuo do procedimento (acionando o boto PARAR da Janela de Comandos). Modificando-se os valores dos parmetros, pode-se obter muitas figuras diferentes. Todas as figuras produzidas so fechadas mas, o nmero de lados que so desenhados antes de a figura se fechar depende de uma relao complexa envolvendo o valor de ngulo dado como entrada. Usando-se este tipo de repetio indefinida, o procedimento torna-se extremamente simples.

Recurso o nome que se d, em programao, ao uso do nome POLI como parte da definio de POLI. Ou, de maneira mais geral, de se escrever procedimentos que chamam a si mesmos.

O procedimento recursivo POLI tem uma forma muito simples: ele repete um ciclo (andar e girar) que mantm uma certa regularidade. Recurso uma idia muito mais poderosa e pode ser usada para obter efeitos sofisticados. Vejamos um exemplo: APRENDA CONTAR :num ESC :num CONTAR :num - 1 FIM Examine o que acontece quando dado o comando:
CONTAR 10

Para entender o efeito deste comando, preciso olhar, novamente, a definio de CONTAR. Pode-se ver que ele tem um parmetro chamado num. Neste caso, foi dado o valor 10 como entrada, e portanto o procedimento assume num como sendo 10.

Helosa Vieira da Rocha, Fernanda M. P. Freire & Maria Elisabette Brisola Brito Prado

21

A primeira linha diz:


ESC :num

ento, escrito o valor 10 e, em seguida, avaliada a prxima linha,


CONTAR :num -1

e, neste caso,
CONTAR 9

Este comando causa o mesmo efeito de se teclar o comando:


CONTAR 9

que escreveria o valor 9 e, em seguida, avaliar:


CONTAR 8

e, assim por diante. Resumindo, o resultado de:


CONTAR 10

escrever: 10 9 8 7 6 5 4 3 2 1 0 -1 -2 -3 ... at interromper a execuo com o boto PARAR da Janela de Comandos Um outro exemplo da mesma tcnica de programao a seguinte modificao do procedimento POLI:

APRENDA POLI :lado :ngulo PF :lado PD :ngulo POLI (:lado + 3 ) :ngulo FIM

22

Parmetros, Condicionais, Recurso... Continuando o passeio pelo Logo

Digitando-se o comando:
POLI 0 90

ocorre a seguinte seqncia de movimentos da tartaruga:

PF 0 PD 90 PF 3 PD 90 PF 6 PD 90 PF 9 PD 90 ... que produz uma espiral quadrada. Mudando-se o ngulo dado de entrada pode-se obter toda sorte de espirais. Parte do poder da recurso o fato de programas muito simples, como POLI, conduzirem a uma variedade de resultados, muitos deles no esperados. Programando a interrupo de um comando recursivo Os procedimentos recursivos vistos at agora so interrompidos atravs das teclas CRTL e BREAK. Outra maneira de provocar a interrupo de procedimentos deste tipo atravs de "testes". Suponha que se queira parar o procedimento CONTAR antes que ele escreva o valor 0: APRENDA CONTAR :num SE (:num = 0) [ PARE] ESC :num CONTAR :num -1 FIM O comando SE testa se o valor de num zero. Se for, o procedimento CONTAR pra. Isto , ao invs de continuar na prxima linha do procedimento, ele retorna o controle para o procedimento que chamou o CONTAR. Portanto em resposta ao comando:
CONTAR 8

o computador escreve: 8, 7, 6, 5, 4, 3, 2, 1 e est pronto para a execuo de um prximo comando. Operaes recursivas

Helosa Vieira da Rocha, Fernanda M. P. Freire & Maria Elisabette Brisola Brito Prado

23

A recurso tambm pode ser usada na definio de operaes e predicados. Nestes casos no preciso preocupar-se com a interrupo do processo recursivo pois, como j foi dito, o comando ENVIE encarrega-se de interromper o procedimento.

Um predicado que verifica se uma palavra possui a letra a poderia ser escrito assim:

APRENDA TEMA :p SE VAZIA :p [ ENVIE "falso ] SE ( PRI :p ) = "a [ ENVIE "verd ] ENVIE TEMA SP :p FIM
ESC TEMA "casa verd ESC TEMA "ovo falso

Vejamos como o fluxo de execuo de ESC TEMA "casa


imprime na tela a palavra verd ESC "verd retorna "verd APRENDA TEMA "casa SE VAZIA "casa [ ENVIE "falso ] SE ( PRI "casa ) = "a [ ENVIE "verd ] ENVIE TEMA "asa FIM retorna "verd APRENDA TEMA "asa SE VAZIA "asa [ ENVIE "falso ] SE ( PRI "asa ) = "a [ ENVIE "verd ] ... FIM

E o fluxo de execuo de ESC TEMA "ovo:


imprime a palavra falso na tela
esc "falso retorna "falso AP RENDATEMA "ovo SE VAZIA "ovo [ ENVIE "falso ] SE ( PRI "ovo ) = "a [ ENVIE "verd ] ENVIE TEMA "vo FIM retorna "falso

24

Parmetros, Condicionais, Recurso... Continuando o passeio pelo Logo

APRENDA TEMA "vo SE VAZIA "vo [ ENVIE "falso ] SE ( PRI "vo ) = "a [ ENVIE "verd ] ENVIE TEMA "o FIM retorna "falso APRENDA TEMA "o SE VAZIA "o [ ENVIE "falso ] SE ( PRI "o ) = "a [ ENVIE "verd ] ENVIE TEMA " FIM retorna "falso APRENDA TEMA " SE VAZIA " [ ENVIE "falso ] .... FIM

Vejamos um outro exemplo de um predicado bastante til e que faz parte do elenco de primitivas de algumas verses do Logo. O predicado ELEMENTO verifica se um dado objeto ou no elemento de um outro objeto: APRENDA ELEMENTO :objeto1 :objeto2 SE VAZIA :objeto2 [ ENVIE "falso ] SE :objeto1 = ( PRI :objeto2 ) [ ENVIE "verd ] ENVIE ELEMENTO :objeto1 SP :objeto2 FIM Se for digitado
ESC ELEMENTO 3 123

obtm-se:
verd

ou, com:
ESC ELEMENTO 6 [ 66 666 ]

obtm-se:
falso

Vejamos como efetuada a execuo de ESC ELEMENTO 3 123


imprime a palavra verd ESC verd retorna a palavra verd

Helosa Vieira da Rocha, Fernanda M. P. Freire & Maria Elisabette Brisola Brito Prado

25

APRENDA ELEMENTO 3 123 SE VAZIA 123 [ ENVIE "falso ] SE 3 = ( PRI 123 ) [ ENVIE "verd ] ENVIE ELEMENTO 3 SP 123 FIM retorna a palavra verd APRENDA ELEMENTO 3 23 SE VAZIA 23 [ ENVIE "falso ] SE 3 = ( PRI 23 ) [ ENVIE "verd ] ENVIE ELEMENTO 3 SP 23 FIM retorna a palavra verd APRENDA ELEMENTO 3 3 SE VAZIA 3 [ ENVIE "falso ] SE 3 = ( PRI 3 ) [ ENVIE "verd ] . .FIM

e a execuo de ESC ELEMENTO 6 [ 66 666 ] :

26

Parmetros, Condicionais, Recurso... Continuando o passeio pelo Logo

imprime a palavra falso ESC falso retorna a palavra falso APRENDA ELEMENTO 6 [ 66 666 ] SE VAZIA [ 66 666 ] [ ENVIE "falso ] SE 6 = ( PRI [ 66 666 ] ) [ ENVIE "verd ] ENVIE ELEMENTO 6 SP [ 66 666 ] FIM retorna a palavra falso APRENDA ELEMENTO 6 [ 666 ] SE VAZIA [ 666 ] [ ENVIE "falso ] SE 6 = ( PRI [ 666 ] ) [ ENVIE "verd ] ENVIE ELEMENTO 6 SP [ 666 ] FIM retorna a palavra falso APRENDA ELEMENTO 6 [ ] SE EVAZIA [ ] [ ENVIE "falso ] ... FIM

Utilizando o retorno da recurso Os exemplos que vimos at agora, nos quais a chamada recursiva o ltimo comando, podem ser vistos como casos gerais de repetio. O conceito de recurso se completa quando realizamos comandos ou operaes no processo de retorno das sucessivas chamadas recursivas.

Vamos comparar o comando CONTAR j visto: APRENDA CONTAR :num SE (:num = 0 ) [PARE] ESC :num CONTAR :num-1 FIM com o comando seguinte, bastante similar quanto escrita: APRENDA MIST :num SE (:num = 0) [ PARE ] MIST :num-1 ESC :num FIM Como se pode testar,

Helosa Vieira da Rocha, Fernanda M. P. Freire & Maria Elisabette Brisola Brito Prado

27

CONTAR 3

escreve 3, 2, 1. Em contraste,
MIST 3

escreve 1, 2, 3. Vamos verificar cuidadosamente como o processo de avaliao e execuo de MIST. Primeiro, chama-se MIST com entrada 3 e MIST inicializa sua biblioteca particular, na qual num associado ao valor 3:
imprime na tela o nmero 3

APRENDA MIST 3 SE (3 = 0) [ PARE ] MIST 3 -1 ESC 3 FIM imprime na tela o nmero 2 APRENDA MIST 2 SE (2 = 0) [ PARE ] MIST 2 -1 ESC 2 FIM imprime na tela o nmero 1 APRENDA MIST 1 SE (1 = 0) [ PARE ] MIST 1 -1 ESC 1 FIM

APRENDA MIST 0 SE (0 = 0) [ PARE ] . . . FIM

O procedimento MIST 3 tem a instruo MIST 3 -1 e, assim sucessivamente, at chegar a MIST 0. Cada chamada de MIST um subprocedimento MIST igual ao MIST anterior com um parmetro de valor diferente. Na quarta cpia de MIST, isto , em MIST 0, a condio expressa pelo comando SE satisfeita, sendo interrompida a execuo desse procedimento. O controle

28

Parmetros, Condicionais, Recurso... Continuando o passeio pelo Logo

da execuo do processo todo volta para a cpia anterior, ou seja, ao procedimento que chamou MIST 0 que foi MIST 1. MIST 1 ainda precisa executar a instruo ESC 1 para depois, executar FIM. O controle volta para MIST 2 que tambm executa ESC 2 antes de executar o comando FIM. E, assim sucessivamente, at a ltima cpia de MIST chegar ao seu final.

Em suma, este processo respeita a seguinte regra:

Quando um procedimento A chama um procedimento B, ele aguarda o trmino da execuo de B. Quando isto ocorre, o controle devolvido ao procedimento A que prossegue sua execuo a partir do comando seguinte ao da chamada do procedimento B.

Como j foi visto, durante a execuo de B existe a biblioteca particular de B e, na volta de B, a biblioteca particular de A que volta a existir. No caso de chamadas recursivas existe a mesma idia mas, ao invs de termos procedimentos distintos A e B, temos cpias distintas de um mesmo procedimento A. Cada cpia consulta sua prpria biblioteca particular.

O mesmo processo verificado nas operaes. Para definir uma operao que conte o nmero de letras a de uma palavra pode-se escrever:

APRENDA NUMA :p SE VAZIA :p [ ENVIE 0 ] SE ( PRI :p ) = "a [ ENVIE 1 + NUMA SP :p ] ENVIE NUMA SP :p FIM

Helosa Vieira da Rocha, Fernanda M. P. Freire & Maria Elisabette Brisola Brito Prado

29

Vejamos o fluxo de execuo de ESC NUMA "itu :


imprime na tela 0 ESC 0 envia 0 APRENDA NUMA "itu SE VAZIA "itu [ ENVIE 0 ] SE ( PRI "itu ) = "a [ ENVIE 1 + NUMA SP "itu ] ENVIE NUMA SP "itu FIM envia 0 APRENDA NUMA "tu SE VAZIA "tu [ ENVIE 0 ] SE ( PRI "tu ) = "a [ ENVIE 1 + NUMA SP "tu ] ENVIE NUMA SP "tu FIM envia 0 APRENDA NUMA "u SE VAZIA "u [ ENVIE 0 ] SE ( PRI "u ) = "a [ ENVIE 1 + NUMA SP "u ] NVIE NUMA SP "u FIM envia 0 APRENDA NUMA " SE VAZIA " [ ENVIE 0 ] ... FIM

30

Parmetros, Condicionais, Recurso... Continuando o passeio pelo Logo

e o fluxo de execuo de ESC NUMA "asa :


imprime na tela 2 ESC 2 envia 2 APRENDA NUMA "asa SE VAZIA "asa [ ENVIE 0 ] SE ( PRI "asa ) = "a [ ENVIE 1 + NUMA SP "asa ] ... FIM envia 1 APRENDA NUMA "sa SE VAZIA "sa [ ENVIE 0 ] SE ( PRI "sa ) = "a [ ENVIE 1 + NUMA SP "sa ] ENVIE NUMA SP "sa FIM envia 1 APRENDA NUMA "a SE VAZIA "a [ ENVIE 0 ] SE ( PRI "a ) = "a [ ENVIE 1 + NUMA SP "a ] .... FIM envia 0 APRENDA NUMA " SE VAZIA " [ ENVIE 0 ] . . . FIM

Conversando com o computador Em Logo existem operaes, como LEIAL e LEIAC, que possibilitam obter informaes digitadas por um usurio, via teclado, durante a execuo de um procedimento.

A operao LEIAL provoca uma interrupo no andamento do programa at que seja digitada qualquer seqncia de caracteres seguida da tecla <enter>. LEIAL retorna o que foi digitado sempre na forma de uma lista 7
ESC LEIAL Maria < enter > informao digitada pelo usurio no teclado
7Mesmo que nada seja digitado, isto , mesmo que o usurio aperte somente o < enter >, o resultado de LEIAL ser uma lista vazia.

Helosa Vieira da Rocha, Fernanda M. P. Freire & Maria Elisabette Brisola Brito Prado

31

Maria MO LEIAL Estou com fome... < enter > informao digitada pelo usurio no teclado [ Estou com fome... ]

Um exemplo: APRENDA ELE :altura TAT PF :altura PT :altura PD 90 PF :altura / 2 PT :altura / 2 PE 90 FIM APRENDA DESENHAELE ESC [ Digite um nmero e aperte a tecla < enter > para desenhar a letra " L " ] ELE PRI LEIAL FIM Vejamos como funciona o procedimento DESENHAELE: O comando ESC escreve na janela grfica uma instruo para um usurio qualquer;

O procedimento ELE precisa de um parmetro que o resultado de duas operaes: PRI LEIAL. Portanto, o procedimento ELE no pode ser executado at que as operaes retornem um resultado que ser usado como entrada de ELE;

A operao PRI aguarda o resultado da operao LEIAL;

A operao LEIAL provoca uma pausa na execuo do procedimento DESENHAELE at que o usurio digite alguma coisa e aperte a tecla < enter >.A operao LEIAL retorna aquilo que foi digitado pelo usurio na forma de uma lista;

A operao PRI, ento, retira o primeiro elemento da lista retornada pela operao LEIAL;

O resultado da operao PRI a entrada do procedimento ELE que , ento, chamado. O procedimento ELE executado com o valor digitado pelo usurio;

32

Parmetros, Condicionais, Recurso... Continuando o passeio pelo Logo

Terminada a execuo de ELE, o controle retornado para o procedimento que o chamou, DESENHAELE;

No h mais nada para ser executado no procedimento DESENHAELE e ele chega ao fim.

O retorno da operao LEIAL pode ser utilizado por qualquer comando, operao ou procedimento definido. No caso de DESENHAELE foi usado como parmetro do procedimento ELE.

A operao LEIAC anloga operao LEIAL. A diferena que ela usada quando se deseja que usurio digite um nico caracter. O resultado de LEIAC sempre uma palavra formada por um nico caracter. Por exemplo:

APRENDA PAPO ESC [ Oi, meu nome TATI. Como voc se chama ? ] ESC SN [ Muito prazer, ] LEIAL ESC [ Eu sei fazer um quadrado...Voc quer ver ? Aperte a tecla "s" ou "n" ] SE LEIAC = "s [ REPITA 4 [ PF 80 PD 90 ] PARE] SE LEIAC = "n [ESC [ Que pena, at mais!!! ] ] FIM

BIBLIOGRAFIA
Abelson, N.; Abelson, A.. (1992) Logo for the Macintosh: Na Introduction Trough Object Logo. Cambridge, MA: Paradigm Software Inc.. Manual do Super Logo (1994) Campinas, SP: NIED / UNICAMP. PC Logo for Windows: Tutorial, Reference and Glossary. (1994) Cambridge, MA: Harvard Associates, Inc.. Rocha, H.V.; Freire, F.M.P.; Prado, M.E.B.B.. (1999) Tartaruga, Figuras,Palavras, Listas e Procedimento: Um Primeiro Passeio pelo Logo. Campinas, SP: MEMO no 35, NIED / UNICAMP.

Potrebbero piacerti anche