manual logo 3.0

396
Sumário Apresentação, p. 1 Breve comentário sobre a linguagem de programação Logo J. A. Valente Requisitos mínimos do sistema, p. 3 Instalação e inicialização, p. 3 Por onde começar, p. 4 Kit Educacional Multimídia SuperLogo, p. 7 Exemplos e Projetos Suporte técnico, p. 102 Ajuda do SuperLogo, p. 103 Créditos, p. 395 Apresentação Breve comentário sobre a linguagem de programação Logo Por José Armando Valente Logo é uma linguagem de programação que foi desenvolvida no Massachusetts Institute of Technology (MIT), Boston, Estados Unidos, por um grupo de pesquisadores liderados pelo professor Seymour Papert. Como linguagem de programação, serve para nos comunicarmos com o computador. Entretanto, apresenta características especialmente elaboradas para implementar uma metodologia de ensino baseada no computador (metodologia Logo) e para explorar aspectos do processo de aprendizagem. Principalmente este último objetivo – entender o processo de aprendizagem – faz com que o Logo seja uma linguagem de programação bastante simples de ser utilizada e assimilada. O Logo foi desenvolvido por volta de 1968. Conta-se que a idéia surgiu durante um jantar em que estavam Seymour Papert, Wallace Feurzeig (diretor do grupo de Tecnologia Educacional da Bolt, Beranek e Newman – BBN), Cynthia Solomon (pesquisadora pertencente à BBN) e Daniel Bobrow (na época, estudante de pós-graduação do MIT). Nesse jantar alguém propôs a criação de uma linguagem de programação que fosse bastante poderosa e capaz de substituir o Basic. Dessa idéia nasceu Logo, uma linguagem com capacidade de processar listas e de permitir a criação de novos procedimentos. Entretanto, nessa época o Logo não dispunha de capacidade gráfica, já que os computadores de então não possuíam essa facilidade. Por meio da sua

Upload: aclmoraes

Post on 26-Oct-2015

330 views

Category:

Documents


9 download

TRANSCRIPT

Page 1: Manual Logo 3.0

Sumário Apresentação, p. 1 Breve comentário sobre a linguagem de programação Logo J. A. Valente Requisitos mínimos do sistema, p. 3 Instalação e inicialização, p. 3 Por onde começar, p. 4 Kit Educacional Multimídia SuperLogo, p. 7 Exemplos e Projetos Suporte técnico, p. 102 Ajuda do SuperLogo, p. 103 Créditos, p. 395 Apresentação Breve comentário sobre a linguagem de programação Logo Por José Armando Valente Logo é uma linguagem de programação que foi desenvolvida no Massachusetts Institute of Technology (MIT), Boston, Estados Unidos, por um grupo de pesquisadores liderados pelo professor Seymour Papert. Como linguagem de programação, serve para nos comunicarmos com o computador. Entretanto, apresenta características especialmente elaboradas para implementar uma metodologia de ensino baseada no computador (metodologia Logo) e para explorar aspectos do processo de aprendizagem. Principalmente este último objetivo – entender o processo de aprendizagem – faz com que o Logo seja uma linguagem de programação bastante simples de ser utilizada e assimilada. O Logo foi desenvolvido por volta de 1968. Conta-se que a idéia surgiu durante um jantar em que estavam Seymour Papert, Wallace Feurzeig (diretor do grupo de Tecnologia Educacional da Bolt, Beranek e Newman – BBN), Cynthia Solomon (pesquisadora pertencente à BBN) e Daniel Bobrow (na época, estudante de pós-graduação do MIT). Nesse jantar alguém propôs a criação de uma linguagem de programação que fosse bastante poderosa e capaz de substituir o Basic. Dessa idéia nasceu Logo, uma linguagem com capacidade de processar listas e de permitir a criação de novos procedimentos. Entretanto, nessa época o Logo não dispunha de capacidade gráfica, já que os computadores de então não possuíam essa facilidade. Por meio da sua

Page 2: Manual Logo 3.0

utilização e inúmeras pesquisas, Papert conseguiu dar àquele Logo uma nova roupagem e uma estrutura filosófica, sendo por isso considerado hoje o pai do Logo. O Logo tem, assim, duas raízes: uma computacional e outra filosófica. Do ponto de vista computacional, as características do Logo que contribuem para que ele seja uma linguagem de programação de fácil assimilação são: exploração de atividades espaciais, fácil terminologia e a capacidade de se criar novos termos ou procedimentos. A exploração de atividades espaciais tem sido a porta de entrada do Logo. Essas atividades permitem o contato quase que imediato do aprendiz com o computador. Essas atividades espaciais facilitam muito a compreensão da filosofia pedagógica do Logo por parte dos especialistas em computação. Por outro lado, elas fazem com que os aspectos computacionais da linguagem de programação Logo sejam acessíveis aos especialistas em educação. Com as atividades espaciais, a proposta é utilizar esses conceitos nas atividades de comandar uma tartaruga mecânica a se mover no espaço ou atividades de desenhar na tela do computador (atividades gráficas). Isso se deve ao fato de essas atividades envolverem conceitos espaciais adquiridos nos primórdios da nossa infância, quando começamos a engatinhar. Entretanto, esses conceitos permanecem no nível intuitivo. Por exemplo, a criança aprende, sem grande dificuldade, a ir da sua casa até a padaria. Essa atividade é desenvolvida sem ela se dar conta de que está usando conceitos como distância, ângulo reto para virar esquinas etc. A proposta da atividade gráfica do Logo é utilizar esses conceitos nas atividades de comandar a tartaruga. No processo de comandar a tartaruga para ir de um ponto a outro, esses conceitos devem ser explicitados. Isso fornece as condições para o desenvolvimento de conceitos espaciais, numéricos, geométricos, uma vez que a criança pode exercitá-los, depurá-los e utilizá-los em diferentes situações. Os domínios de aplicação do Logo estão em permanente desenvolvimento, com o objetivo de atrair um maior número de usuários e motivar os alunos a usar o computador para elaborar as mais diferentes atividades. Entretanto, o objetivo não deve ser concentrado no produto que o aluno desenvolve, mas na filosofia de uso do computador e como ele está facilitando a assimilação de conceitos que permeiam as diversas atividades. Portanto, o processo de ensino-aprendizagem revela-se o cerne do Logo.

Page 3: Manual Logo 3.0

Requisitos mínimos do sistema Computador 486/66 ou superior Windows® 95, 98, NT ou superior 16 MB de memória RAM Disco rígido com 10 M B de espaço livre Unidade de CD-ROM de dupla velocidade Placa de vídeo SVGA, 256 cores Placa de som compatível com Windows Mouse Instalação e inicialização do programa O Kit Educacional Multimídia SuperLogo é executado a partir da sua unidade de CD-ROM. Porém, são necessários 10 M B de espaço no disco rígido para o armazenamento de alguns arquivos de programa. O programa de instalação cria automaticamente um diretório no seu disco rígido principal chamado C:\Arquivos de programas\SuperLogo. O Kit Educacional Multimídia SuperLogo deve ser iniciado a partir da área de trabalho do Windows. Para instalar o programa 1. Verifique se o Windows 95 (ou superior) está aberto e em execução no seu

computador. 2. Insira o CD do Kit Educacional Multimídia SuperLogo na unidade de CD-

ROM. Depois de alguns instantes, uma caixa de diálogo é exibida. Caso não rode, vá em Iniciar\Executar\D:\Setup. Para executar a interface de apresentação, clique em D:\SuperLogo.exe.

3. Clique em Instalar. 4. Siga as instruções na tela para completar o processo de instalação. 5. Clique no botão Iniciar. Escolha Programas. Em seguida escolha

SuperLogo.

Page 4: Manual Logo 3.0

Por onde começar Os principiantes podem iniciar o uso do Logo sem precisar ter conhecimento algum de programação; basta aprender a comandar a tartaruga. Se souber como utilizar a tartaruga gráfica, ela permitirá que o usuário desenvolva conhecimentos de geometria. É surpreendente como você pode dominar os conceitos de programação desde que compreenda o conceito da tartaruga. Observe alguns exemplos simples: Desenhe um quadrado utilizando a tartaruga: PARAFRENTE 100 PARADIREITA 90 PARAFRENTE 100 PARADIREITA 90 PARAFRENTE 100 PARADIREITA 90 PARAFRENTE 100 PARADIREITA 90 Isso foi fácil, mas exigiu muita digitação; vamos tentar novamente: REPITA 4 [PF 100 PD 90] Trata-se do mesmo quadrado feito de duas formas diferentes. Observamos que havia redundância de código em nosso primeiro exemplo; assim, pedimos para o Logo repetir a mesma sentença quatro vezes. Também usamos formas abreviadas dos mesmos comandos. Mas ainda podemos melhorar. Quando um item é muito utilizado, ele pode ser programado e simplesmente ser chamado quando necessário. Veja o exemplo: EDITE “quadrado <Editor irá aparecer> APRENDA QUADRADO REPITA 4 [PF 100 PD 90] FIM <fechar o Editor e salvar> QUADRADO

Page 5: Manual Logo 3.0

QUADRADO Para que servem os comandos APRENDA e FIM? Eles definem um procedimento (um pequeno programa) para desenhar um quadrado. O APRENDA pode ser compreendido como uma instrução do tipo “faça alguma coisa”; o FIM finaliza a instrução do APRENDA. Uma vez que o quadrado foi “definido”, pode ser chamado mais vezes. Isso é tudo o que você precisa para obter um quadrado agora − basta digitar o nome do procedimento: quadrado. Mas há um problema: ele desenha apenas quadrados de 100 por 100. Não seria melhor se pudéssemos desenhar quadrados de qualquer tamanho? Veja como é fácil: EDITE “quadrado APRENDA QUADRADO :tamanho REPITA 4 [PF :tamanho PD 90] SAIR QUADRADO 100 QUADRADO 200 Observe que tudo o que fizemos foi substituir 100 por uma variável chamada :tamanho. Agora, quando chamamos o quadrado, precisamos especificar o tamanho desejado. No exemplo acima pedimos para o LOGO desenhar um quadrado de 100 por 100 e outro de 200 por 200. Observe que os dois-pontos “:” em frente à palavra tamanho informam ao Logo que tamanho é uma variável. Mas ainda podemos melhorar. Você pode perguntar: o que há de errado agora? Bem, não seria melhor se pudéssemos desenhar outra coisa além de um quadrado, como, por exemplo, um triângulo? APRENDA TRIÂNGULO :tamanho REPITA 3 [PF :tamanho PD 120] FIM APRENDA QUADRADO :tamanho REPITA 4 [PF :tamanho PD 90] FIM APRENDA PENTÁGONO :tamanho REPITA 5 [PF :tamanho PD 72]

Page 6: Manual Logo 3.0

FIM TRIÂNGULO 100 QUADRADO 100 PENTÁGONO 100 Isso exige muita digitação (e programadores não gostam de digitar). Por que isso acontece? Porque muitas coisas podem sair errado e, quando é preciso fazer uma alteração, ela geralmente tem de ser feita em diversos lugares. Nem sempre procedimentos menores são melhores, mas geralmente ajudam. Vamos tentar de novo. APRENDA POLÍGONO :tamanho :lados REPITA :lados [PF :tamanho PD 360.0/:lados] FIM POLÍGONO 100 3 POLíGONO 100 4 POLíGONO 100 5 O que aconteceu com TRIÂNGULO, QUADRADO e PENTÁGONO? POLÍGONO age agora como todos os polígonos possíveis, de lados iguais e com apenas uma linha de código! Agora a seqüência é repetida tantas vezes quanto estiver definido na variável :lados e gira (PD) a quantidade de graus apropriada para aquela forma. Você pode não acreditar, mas isso é PROGRAMAÇÃO. Agora que já temos um programa, salvá-lo no disco rígido é uma ótima idéia. Todas as edições foram feitas dentro da memória do Logo, e não no disco. Veja como é fácil salvar seu trabalho: SALVE “FORMAS.LG SAIR Se você for utilizar essas definições novamente, terá de recarregá-las. Como fazer para recarregar seu trabalho? CARREGUE “FORMAS.LG

Page 7: Manual Logo 3.0

Kit Educacional Multimídia SuperLogo Exemplos e Projetos O Kit Educacional Multimídia SuperLogo oferece um ambiente pleno de multimídia, incorporando todos os recursos do Windows e várias novas tecnologias, como manipulação de placa de som e comandos de TCP/IP (protocolo de comunicação via Internet). Além disso, o Kit contém dois conjuntos de programas: Exemplos e Projetos. Os programas de Exemplos mostram como utilizar e explorar alguns conceitos relativamente simples de programação, que dão margem a muitas variações e efeitos interessantes. Os Projetos são exemplos multidisciplinares concretos, que podem ser aproveitados na íntegra ou usados como base para a construção de novas aplicações. Os programas computacionais do Kit devem ser vistos como pequenas sementes que crescem de acordo com os interesses e objetivos de cada usuário. Eles podem servir de referência para que cada usuário crie seus próprios projetos. Pode-se, por exemplo, reformular um determinado projeto para atender a uma necessidade educacional específica ou para entender mais a fundo um conceito computacional. 1. Barrasobe, barradesce 2. Com fuso ou confuso? 3. Outra vez, outra vez, olha o que a Tat fez 4. PegaRato 5. Pintura mutante 6. Projetando o Universo 7. Tecendo anéis 8. Viagem em 3Dimensões

Page 8: Manual Logo 3.0

“barrasobe, barradesce”

Nome do arquivo: bar_sobedesce.lgo / ordena_bar.lgo Comando para executar: demograf / demosort

Descrição geral Essas duas ilustrações trabalham com gráficos de barras. O primeiro monta gráficos de barras e varia os dados aleatoriamente, montando um novo gráfico com esses dados. O segundo coloca na tela barras de tamanhos aleatórios e ordena essas barras em ordem decrescente. A ordenação é feita visualmente. Com relação ao segundo programa, o usuário deve fornecer a quantidade de barras que deseja observar. Quanto menor o número delas, mais rápida será a ordenação. Ambos os projetos trabalham com o conceito de vetor, bastante semelhante ao de listas. Para o programa de montagem do gráfico de barras, é interessante observar que o vetor é organizado para que os valores maiores se posicionem no centro do vetor, ficando também centralizado no gráfico. Já para o segundo projeto, isso não deve ser feito, uma vez que o objetivo do programa é ordenar o vetor. Os números são distribuídos aleatoriamente pelo vetor e a princípio são vistas barras de diferentes tamanhos dispostas na janela gráfica. O procedimento de ordenação é inicializado e as barras começam a se “mover” para as suas respectivas posições. O método de ordenação utilizado é o Bublesort, ou método da bolha, que consiste em percorrer o vetor de valores n vezes (n é o número de elementos), fazendo uma verificação com o próximo elemento do vetor, caso este próximo seja maior (ou menor, caso a ordenação seja crescente ou decrescente), e depois trocando-se as posições desses dois

Page 9: Manual Logo 3.0

elementos. Assim, ao final de cada passo, pelo menos um elemento estará em sua posição correta. Uma sugestão para o segundo programa é alterá-lo de tal forma que se faça a verificação das trocas de posição. Quando o algoritmo percorrer todo o vetor e não fizer nenhuma troca, isso significa que já está ordenado, evitando verificações redundantes. Em um nível mais avançado, poderíamos utilizar outros algoritmos de ordenação. Que tal tentar também fazer um programa que ordene alfabeticamente uma lista de palavras dadas? Estrutura geral Referência: e-mail enviado à lista [email protected] por Fred Gilham ([email protected]).

Demosort (Procedimento principal)

gráfico_barras.especial (Monta gráfico)

Monta_tabela (Cria vetor)

Ordena (Ordena tabela)

Ordena.par (Ordena par de elementos) Ordena.umpasso

(Percorre vetor uma vez)

Trocapos (Inverte posição de dois

elementos)

Umabarra.especial (Desenha uma barra)

Dados_vetor (Cria valor para vetor)

Demograf (Chamada do programa

dos gráficos)

Gráfico_barras (Monta o gráfico)

Inicia_vetor (Cria vetor e zero

elementos)

Uma_barra (Desenha uma barra)

Um_valor (Cria valor aleatório)

Registro (Ajusta vetor)

Page 10: Manual Logo 3.0

Com fuso ou Confuso?

Nome do arquivo: Mundo.lgo Comando para executar: Mapa ou apresentação

Descrição geral Um excelente exemplo de programa para introduzir conceitos de fusos horários. O programa simula a rotação do planeta. Note que o mapa é dividido fisicamente em 24 partes iguais, mostrando porém a divisão política dos fusos. O usuário deve digitar “mapa” na linha de comandos, para visualizar apenas o modo de rotação, ou então “apresentação”, para ver uma pequena apresentação que mostra um pouco mais sobre os fusos horários. Este programa mostra a facilidade que o SuperLogo oferece ao trabalhar com diversas figuras (bitmaps), pois cada fuso horário visto na tela é um bitmap diferente. Essa facilidade está centrada no comando mudeíndicebitmap que cria diversas áreas de transferência para que as figuras possam ser coladas posteriormente na janela gráfica. Quando o modo de rotação se inicia, o programa carrega os 24 bitmaps dos respectivos fusos e um bitmap para o rodapé que mostra o horário em cada fuso. Depois de carregados, os bitmaps são colados na janela gráfica um ao lado do outro, para a formação do mapa-múndi. Durante a rotação, cada bitmap é recortado e colado na posição do bitmap anterior a ele, fazendo isso continuamente e dando-se a impressão de movimento do globo. No modo apresentação, existem linhas apontando para os pontos dos quais se deseja falar. Neste caso, a movimentação do mapa se dá apenas quando necessário. O conceito de fusos horários não é tão simples de se entender. Este projeto pode ajudar bastante. Pode-se também fazer uso do Logo-3d para mostrar o planeta na forma esférica, melhorando o entendimento do porquê dos fusos horários.

Page 11: Manual Logo 3.0

Estrutura geral

Outra vez, outra vez, olhe o qu Nome do arquivo: Outravez.lgoComando para executar: Outra

Descrição geral

A própria natureza do fractal é ra capacidade que o SuperLogo tEste exemplo demonstra 10 tipo

Carregarfuso (Carrega bitmaps de

rodapé)

C(Co

Indicebit (Carrega bitmaps

dos fusos)

Mapa (Procedimento

principal)

(Tr

Rotação

oca bitmaps de posição)

e a Tat fez

vez

ecursiva. Portanto, o ponto forte do exemplo é em de lidar com procedimentos recursivos. s de desenhos que utilizam a recursão gráfica.

riamapa la os bitmaps)

Page 12: Manual Logo 3.0

O usuário irá visualizar uma apresentação completa de todos os tipos de fractais que contém este programa por meio do procedimento Fractais. Para visualizar individualmente cada fractal, basta digitar o nome do procedimento que gera cada um deles (consulte a estrutura geral para ver os nomes). Crie novos procedimentos recursivos utilizando figuras geométricas simples (triângulo, quadrado). Ao ligar essas figuras de tamanhos diferentes você terá efeitos bastante interessantes. Por exemplo: tente criar um simples quadrado de maneira recursiva. Outra figura que pode ser gerada recursivamente é uma espiral. Preste atenção na condição de parada da recursão para evitar chamadas sem fim do procedimento (recursão infinita). Analise os procedimentos, modifique os parâmetros de chamada e tente entender os efeitos alcançados.

Estrela Cruzacruza

Page 13: Manual Logo 3.0

Floco de Neve Tapete

Triângulos Von Koch

Page 14: Manual Logo 3.0

Árvores

Colcha Carpete

Page 15: Manual Logo 3.0

Estrutura Geral

vk8_gen (Gera o fractal de Von

Koch)

Vk8 (Chamada para o

Vk

Cruzacruza (Chamada do cruzacruza)

Árvore2 (Chamada da

árvore)

Tapete_fractal (Gira Tat de 60 graus)

(

Fractais (Procedimento Principal)

Flocodeneve_elevação (Desenha as elevações do floco)

Flocodeneve (Chamada do Floco de

neve)

Estrela_monta (Desenha triângulo estilizado)

Estrela_draw (Repete desenho do triângulo de estrela)

Estrela (Chamada da

estrela) Colcha_triangulo (Desenha triângulo da colcha)

Colcha (Chamada da Colcha)

Carpete_vira (Rotaciona 90 graus)

Carpete_preencha (Pinta quadrados)

Carpete_anda (anda com a Tat)

Carpete (Chamada do carpete)

Árvore1 (Chamada da

árvore)

Tapete_recursão (Procedimento recursivo

do tapete)

tapete_t(Desenha tri

tap

Tapete Chamada do

tapete)

riângulo ângulos para o ete)

Page 16: Manual Logo 3.0

Pega Rato Nome do arquivo: Andetat.lgo Comando para executar: Andetat

Descrição geral Este programa faz com que a tartaruga se movimente em direção à posição do ponteiro do mouse. Durante o movimento ela deixa um rastro com cores variadas, escolhidas aleatoriamente pelo próprio programa. A cada passo da tartaruga é verificada se a posição desta é igual à posição do ponteiro do mouse. Quando coincidem, uma mensagem é emitida e o programa pára. O controle sobre as atividades do mouse é o ponto forte desse projeto, que consta basicamente deste controle: de acordo com a posição do ponteiro a direção da tartaruga é alterada, tendo-se a impressão de que a tartaruga está tentando pegar o ponteiro. Outro aspecto interessante deste projeto reside no fato de que o corpo principal consta de apenas um procedimento, ou seja, com poucas linhas de código é possível fazer coisas bastante interessantes no SuperLogo. Que tal implementar este procedimento para duas tartarugas? Você pode deixar o traço da tartaruga de uma única cor e controlar se ela já passou por determinado ponto. Assim, é possível implementar um procedimento que não permita que a tartaruga passe através de um traço deixado por ela: trata-se do conceito do conhecido jogo “Cobras”. Estrutura geral

Andetat (Procedimento único)

Page 17: Manual Logo 3.0

Pintura mutante

Nome do arquivo: FigurasDegrade.lgo / Mosaico.lgo Comando para executar: Efeitos / Mosaico

Descrição geral O principal objetivo dessas ilustrações é demonstrar a capacidade e as possibilidades de trabalho com cores usando o SuperLogo. A primeira delas mostra algumas figuras geométricas coloridas em construção, utilizando uma determinada seqüência de cores que dá a impressão de degrade. A segunda ilustração cria figuras geométricas aleatórias com cores também aleatórias formando um mosaico na janela gráfica. Tente aumentar o número de figuras geométricas apresentadas, acrescentando diferentes sons para cada uma delas e fazendo uma associação de cores, figuras e sons.

Page 18: Manual Logo 3.0

Estrutura geral Figuras degrade

Mosaico

Circulodegrade (Desenha círculos

concêntricos)

Desenhodegrade (Desenha três hexágonos

coloridos)

Efeitos (Procedimento

principal)

Hexagonodegrade (Desenha hexágonos

concêntricos)

Quadradodegrade (Desenha quadrados

concêntricos)

Triangulodegrade (Desenha triângulos

concêntricos)

Círculo (Desenha

círculo e pinta) e

Figuras (Chamada para

desenho das figuras)

Quadrado (Desenha

quadrado/pinta)

Triângulo (Desenha

triângulo e pinta)

Mosaico (Procedimento

principal)

Elipse (Desenha lipse/pinta)

i t )

Page 19: Manual Logo 3.0

Projetando o Universo

Nome do arquivo: Projetando_universo.lgo Comando para executar : Projetando_universo

Descrição geral Este exemplo desenha um sistema solar composto por diversos planetas com tamanhos e órbitas aleatórias (ou seja, a cada execução, um resultado diferente é obtido) usando as primitivas tridimensionais do Logo. O principal objetivo é fornecer ao usuário um projeto que usa as primitivas do Logo3d e que pode ser objeto de estudos interessantes no campo da física e da astronomia. Após iniciar a execução do exemplo, surge uma caixa de questão solicitando ao usuário que entre com o número de planetas a serem desenhados. Ficaria interessante também permitir ao usuário alterar as órbitas e os tamanhos dos planetas (nesta versão, essas características são aleatórias). Pode-se pesquisar os valores relativos reais entre o tamanho dos planetas e as órbitas do nosso sistema solar e usá-los no programa. Experimente! Você se lembra do cometa Halley? Que tal mapear uma tartaruga com a trajetória do cometa Halley e observá-la voar pelo sistema solar? Para a aumentar a precisão do desenho, é possível desenhar órbitas elípticas em vez de circulares. Você pode mover os planetas através de suas órbitas, ou então salvar esses quadros como .bmp e depois fazer um gif animado para colocar em uma página na internet. O céu é o limite para sua criatividade, ou melhor, o universo...

Page 20: Manual Logo 3.0

Estrutura geral

Tecendo anéis

Nome do arquivo: Tecendo_aneis.lgo Comando para executar: Tecendo_aneis

Descrição geral Neste exemplo, que utiliza comandos de manipulação da tartaruga em três dimensões, é realizado o desenho de uma figura toróide (ou “rosquinha”). O principal objetivo é fornecer ao usuário um primeiro contato com as primitivas do Logo3D e possibilitar um embasamento para o desenvolvimento de outros projetos. Fica mais fácil explicar como o toro é desenhado usando uma esfera como exemplo. Coloque-se no centro de uma esfera e imagine que você tem uma arma laser que pode cortar ou marcar a superfície. Agora você atira em um ponto na superfície (ponto A), depois move seu feixe 5 graus (:passo) para baixo e atira em um outro ponto (ponto B). Em seguida move o feixe 5 graus para a direita e atira em outro ponto (C). Agora 5 graus para cima, outro ponto. Ao conectar os 4 pontos com uma corda, terá o polígono. Repita o

Projetando_universo (Procedimento inicial)

Planetas (desenha os planetas)

Sol (desenha um Sol amarelo nocentro do sistema)

Esfera (desenha uma esfera)

Page 21: Manual Logo 3.0

processo até completar toda a volta e depois eleve seu feixe para "varrer" o "andar" superior, e assim sucessivamente. Que tal tentar desenhar uma esfera, um cubo, uma pirâmide e outras figuras tridimensionais? Você pode usar esse conjunto de figuras para compor desenhos, como casas e pequenas cidades. Outro problema interessante seria desenvolver procedimentos gerais para o desenho de poliedros regulares, no qual o parâmetro de entrada é o número de faces [poliedros estão para o mundo 3d assim como os polígonos estão para o mundo 2d – exemplos de poliedros: tetraedro (pirâmide), hexaedro (cubo), e outros].

Estrutura geral

Tecendo_aneis (Procedimento inicial)

Fatia (desenha um cilindro aberto)

PeguePonto (envia o valor do pontocorrespondente a um raio)

Esqueleto (desenha as diversas fatias que formam a figura toroidal)

Page 22: Manual Logo 3.0

Viagem em 3Dimensões

Nome do arquivo: Viagem_3d.lgo Comando para executar: Viagem_3d Descrição geral Este exemplo é um visualizador de arquivos do tipo ".3dv", um formato padrão para figuras vetorais de 3D. Neste caso, desenhamos um ônibus espacial (space shuttle). O principal objetivo é fornecer ao usuário uma perspectiva das possibilidades de integração do SuperLogo com outros formatos de arquivos com objetos tridimensionais. Que tal tentar desenhar esse ônibus espacial usando somente comandos do Logo3d, sem o auxílio do arquivo .3dv? Se quiser, pesquise na internet outros arquivos do tipo .3dv e tente usá-los neste exemplo (serão necessários alguns pequenos ajustes no programa). Outra possibilidade é verificar a existência de outros formatos de arquivos com objetos 3d e analisar a possibilidade de integrá-los ao SuperLogo.

Estrutura geral

Viagem_3d (Procedimento inicial)

Mostre_objeto (desenha o objeto)

Carregue_objeto (carrega a lista de vetores

do arquivo)

Page 23: Manual Logo 3.0

Projetos 1. Ponteiro a ponteiro 2. Calendário curioso 3. De (+) a (-) às (*) se (/) 4. Mister Baskara 5. Lá vem bomba 6. Fórmula Tat 7. Cata carta 8. Aperta o nó 9. OXO, XOX – deu empate! (versão usuário versus computador e versão usuário versus usuário) 10. Tatgoshi 11. E com vocês... MovimentaSom 12. Tirando som de A a Z 13. Dr. Birutat 14. Fábrica de português maluco 15. A palavra é... 16. Deu branco no texto! 17. Fuja: calorias à vista! 18. De AA a aa, que bicho vai dar? 19. Conexão tartaruga

Page 24: Manual Logo 3.0

Ponteiro a ponteiro

Nome do arquivo: Ponteiro_a_ponteiro.lgo Comando para executar: Relógio

Apresentação É como diz a música: o tempo não pára. Pois isso é verdade até para ele mesmo! Pense um momento no relógio de sol e nos relógios de pulso que utilizam energia solar. O sol continua o mesmo, mas sua utilização para medir o tempo mudou muito. Conhecer a evolução dos relógios é uma maneira bastante curiosa de aprender muitos assuntos: medidas de tempo, meridianos, movimentação do nosso planeta, engrenagens, oscilação de átomos, horário biológico, fontes de energia e por aí afora. Uma infinidade de conhecimentos interrelacionados que detonaram a ciência em geral. Num piscar de olhos, saltamos do velho cuco da vovó para os modernos relógios que usam beats como medida de tempo mundial. Este projeto apresenta um relógio simples e funcional que pode alavancar outras implementações. Afinal, uma coisa é saber ler as horas. Outra coisa é usar todas aquelas noções a respeito do valor de uma hora, um minuto, um segundo e transformá-las em um programa computacional que implementa um relógio de verdade. Confira!

O que faz este programa? Este programa desenha na tela um relógio de ponteiros com a hora real do sistema. Instruções de uso Após carregar o arquivo Ponteiro_a_ponteiro.lgo e clicar em Iniciar na tela de apresentação, será exibido um relógio de ponteiros que marca a hora do sistema.

Aspectos de programação em Logo Neste projeto, destacamos comandos de manipulação de hora e também o temporizador do Logo. Faz parte deste projeto entender o processo de

Page 25: Manual Logo 3.0

funcionamento do relógio e as relações entre os ângulos formados pelos seus ponteiros e as divisões do tempo em hora, minuto e segundo. Estrutura geral do projeto

Relógio (procedimento inicial)

Inicializa_variáveis (prepara as variáveis)

Desenha_marcas (desenha o relógio)

Peguehora (devolve a hora do

sistema)

(des (d (

(aturel

Plotehora enha o ponteiro das

horas)

Ploteminuto esenha o ponteiro dos

minutos)

Plotesegundos desenha o ponteiro dos

minutos)

Atualizarel aliza os ponteiros do

ógio – chamado pelo temporizador)

Page 26: Manual Logo 3.0

Principais procedimentos

aprenda Relógio ;procedimento inicial ;(...) Desenha_marcas ;desenha o relógio ativetemporizador 1 1000 [Atualizarel] ;atualiza o relógio a partir do temporizador a cada 1 seg (1000 ms) fim

aprenda Atualizarel ;atualiza os ponteiros do relógio local "horacerta atr "horacerta Peguehora local "nhora atr "nhora primeiro :horacerta local "nmin atr "nmin primeiro semprimeiro :horacerta local "nseg atr "nseg primeiro semprimeiro semprimeiro :horacerta Ploteseg :seg se não sãoiguais :min :nmin [Plotemin :min ~ se não sãoiguais :hora :nhora~ [Plotehora :hora ~ Plotehora :nhora ]~ Plotemin :nmin ] Ploteseg :nseg ;(...) fim

aprenda Plotehora :hora ;desenha o ponteiro da hora useinversor mudeespessuradolápis [5 5] mudedç :hora*30 pf 50 un pt 50 fim

aprenda Peguehora ;devolve a hora do sistema envie parse map "Trata_2pontos ~

pri semprimeiro semprimeiro semprimeiro diahora

fim

aprenda Trata_2pontos :a ;analisa o formato da hora do sistema - trata o caractere ":" senão sãoiguais ": :a [envie caractere 32] [envie :a] fim

Page 27: Manual Logo 3.0

Sugestões

Você gosta de viajar? Que tal trabalhar com fusos horários e fazer vários relógios, que podem ser colocados em um aeroporto informando a hora das principais capitais mundiais? Não gostou muito do relógio de ponteiros? Tente então implementar um relógio digital (dica para iniciar: construa um procedimento para desenhar um dígito de 0-9 do relógio digital). E se você colocar o relógio de ponteiros inserido em um cenário interessante? Por exemplo, desenhar o Big Ben de Londres (você pode utilizar imagens bitmap para auxiliá-lo ou, se quiser, trabalhar com os comandos do Logo3D). Se você for fascinado por problemas de física, estude o Paradoxo dos Gêmeos (você pode encontrar isso em livros de Física Moderna) e também sobre a Teoria da Relatividade de Einstein e tente implementar dois relógios – o que ficaria na Terra e o que ficaria na nave espacial (será que isso é possível?) – você possivelmente irá constatar efeitos muito interessantes!

Calendário curioso

Nome do arquivo: calendario.lgo Procedimentos para executar: Dia (para um dia qualquer) Data_nascimento (para datas de nascimento)

Apresentação

Este projeto, a partir de medidas de tempo (dias, meses e anos), resgata uma série de conceitos de geografia (porque essas medidas? o que as definiram?), de história (será que todos os povos usam o mesmo calendário? como a medida do tempo evoluiu ao longo da história?) e de matemática (que algoritmos usar?) para produzir um programa computacional interdisciplinar e, ao mesmo tempo, bastante curioso. Nem todos vão se lembrar, mas há algum tempo, nos almanaques e revistas, havia uma versão impressa deste programa em formato de calendário de bolso... todo mundo tinha um, mas não sabia muito o que estava por trás para implementá-lo. A versão computacional em SuperLogo faz exatamente isso: possibilita ao usuário pensar nos conceitos e algoritmos que calculam o dia da semana em função de uma data qualquer.

Page 28: Manual Logo 3.0

O que faz este programa? A partir de uma data dada como entrada, o programa calcula o dia da semana em que ela ocorreu (ou irá ocorrer), e o intervalo de tempo em dias que já se passaram (ou que faltam passar) até a data atual. Existem duas versões. A versão Dia calcula o dia da semana a que se refere uma data qualquer dada como entrada pelo usuário. Por exemplo: dia 17/12/2002 – esta data pode se referir ao passado ou ao futuro, tanto faz. Além disso, ele calcula o número de dias que faltam para chegar aquela data, ou ao contrário, quantos dias já se passaram dela. A outra versão, Data_nascimento, faz o mesmo, além de informar o signo correspondente à data.

Instruções de uso Após carregar o arquivo Calendario.lgo e clicar em Iniciar na tela de apresentação, o usuário pode escrever Dia na Janela de Comandos, para a versão sem signo, ou Data_nascimento para a versão com signo. Será então exibida uma caixa para que o usuário digite a data desejada (no formato dd/mm/aaaa – dia, mês, ano) e então o programa realiza os cálculos e imprime o resultado na Janela Gráfica. Aspectos de programação Logo Neste projeto são utilizadas várias operações matemáticas em Logo (soma, quociente, inteiro, produto) em combinação com primitivas de manipulação de listas (pri, sp, ult). Procedimentos com parâmetros e que retornam valores são muito utilizados. Outro conceito interessante é o de variáveis locais (procedimento J_d_n). Estruturas que trabalham com condicionais (se, senão) são necessárias em vários dos procedimentos (no Signo, por exemplo). O procedimento Zeller, que calcula um número (de Zeller) necessário para o algoritmo do dia da semana, em conjunto com o procedimento Dia.da.semana, são exemplos que utilizam todos esses conceitos citados.

Page 29: Manual Logo 3.0

Estrutura geral do projeto1

1 É apresentada a esprocedimento signo

Nova_data (retorna a data atual noformato dd mm aa)

(calcutambépassar

Zelle(número necessáalgoritmo do cálcsemana)

Data_nascimento (procedimento inicial)

Msg_erro (trata erros na entrada

dos dados)

Signo (retorna o signo parauma determinada data)

Dia.da.semana la o dia da semana em o número de dias que am ou que faltam)

trutura da versão Data_nascimento. A versão Dia é idêntica, exceto por esta não chamar o .

r rio para oulo do dia da

Delta_dias (calcula o número de dias entre :datae a data atual)

J_d_n (calcula o “Julian Day Number”a partir de uma data nocalendário gregoriano)

Page 30: Manual Logo 3.0

Principais procedimentos

aprenda Nova_data :data_atual ;ajusta a data atual para o formato dd mm ;aaaa se sãoiguais pri sp :data_atual "Jan [envie (lista pri sp sp :data_atual "01 último :data_atual)] ;(...) se ou sãoiguais pri sp :data_atual "Dec sãoiguaispri sp :data_atual "Dez [envie (lista pri sp sp :data_atual "12 último :data_atual)] fim

aprenda Dia ;usado para qualquer data ;(a única diferença para o ;data_nascimento é que não ;retorna o signo...)

;(...) atr "dn caixadequestão [Dia da Semana][Digite

a data no formato dd/mm/aaaa] ;(...) Esctela sentença [Hoje é ] Nova_data diahora Dia.da.semana :dnn fim

aprenda J_d_n :data_greg ;calcula o julian_day_number a partir de uma data no cal. gregoriano local "dia atr "dia pri :data_greg local "m atr "m pri sp :data_greg local "y atr "y último :data_greg se :m < 3 [atr "m :m + 12 atr "y :y - 1] envie :dia + (inteiro (153 * :m - 457) / 5) + 365 * :y + (inteiro :y / 4) - (inteiro :y / 100) + (inteiro :y / 400) + 1721118.5 fim

aprenda Dia.da.semana :data_usuario ;procedimento que escreve o dia da semana para uma data Esctela (sentença :data_usuario "| --> | elemento soma 1 Zeller elemento 1 :data_usuario

elemento 2 :data_usuario ~ elemento 3 :data_usuario [Domingo

Segunda-feira Terça-feira Quarta-feira Quinta-feira Sexta-feira Sábado])

Delta dias :data usuario Nova data diahora

aprenda Zeller :dia :mes :ano ;calcula o numero de Zeller (ver documentação) ;varíaveis locais usadas para auxiliar os cálculos local "c local "m local "a senão émenor :mes 3 ~

[ atr "m soma :mes 10 atr "a ~ soma :ano -1 ][ atr "m soma :mes -2 ~ atr"a :ano]

atr "c Div :a 100 atr "a resto :a 100 envie resto (soma :dia +(div (26*:m - 2) 10) -(2*:c):a div :a 4 div :c 4) 7 fim

aprenda Delta_dias :data1 :data_atual ;calcula o número de dias entre :data1 e ;:data_atual ;numero exato de dias no intervalo atr "delta (J_d_n :data_atual) - (J_d_n :data1) ;numero aproximado de anos no intervalo atr "aproxano inteiro :delta/365 se sãoiguais :aproxano 0 [atr "a1 [ ] ] se émaior :aproxano 0 [atr "a1 (sentença [( pouco

mais de ] :aproxano [ ano(s) ) ] ) ] se émenor :aproxano 0 [atr "a1 (sentença [( pouco

mais de ] oposto :aproxano [ ano(s) ) ] ) ] se sãoiguais :delta 0 [Esctela [As duas datas são

as mesmas...]] se émaior :delta 0 [Esctela (sentença [Já se

passaram exatamente ] :delta [ dias ] :a1 [ de ] :data1 )]

se émenor :delta 0 [Esctela (sentença [Ainda faltam exatamente ] oposto :delta ~ [ dias ] :a1 [ para ] :data1)]

Page 31: Manual Logo 3.0

Sugestões O número de dias calculado é exato. Como, a partir desse valor, chegar ao número exato de anos e meses correspondentes (lembre-se de que você deve levar em conta os anos bissextos)?

O usuário pode também ser mais preciso, fornecendo ao usuário o número de horas, minutos e até segundos que já passaram da data inicial (as informações para a data atual já são obtidas por meio da primitiva “diahora” no código do projeto original). Se você gosta de assuntos esotéricos, que tal brincar com um pouco de numerologia ou horóscopo chinês, baseado na data de nascimento da pessoa? Gosta de finanças? Com o algoritmo que calcula o número de dias você pode, por exemplo, fazer um programa que calcula os rendimentos de uma aplicação financeira ou calcular o quanto de juros devido a ser pago em uma conta atrasada. Veja a referência [1] para obter mais detalhes sobre os diversos algoritmos que trabalham com datas, o conceito de Dia Juliano e Dia Gregoriano e outros tópicos interessantes. Referência Date Algorithms – Peter Baum, in http://www.capecod.net/~pbaum/date/index.htm

Page 32: Manual Logo 3.0

De (+) a (-) às (*) se (/) Nome do arquivo: Calc.lgo Comando para executar: Calc

Apresentação Você tem idéia de como a calculadora do Windows foi implementada? Não? Acha que é difícil? Um desafio apenas para os programadores de carteirinha? Pois bem: o SuperLogo possui todos os recursos para projetar uma calculadora. Dê uma olhada neste projeto. Utilizando operações matemáticas básicas disponíveis no Logo e primitivas que permitem fazer uma interface agradável, o usuário pode criar sua própria calculadora e utilizá-la como um acessório personalizado em outros projetos. Preste atenção no modo como os procedimentos descrevem as parcelas para efetuar cada uma das operações implementadas. Não deixe de conferir!

O que faz este programa? Este programa implementa uma calculadora simples, que realiza as quatro operações básicas (soma, subtração, multiplicação e divisão). Instruções de uso Após carregar o arquivo Calc.lgo e clicar em Iniciar na tela de apresentação, será apresentada uma pequena calculadora com as quatro operações básicas. Pode-se então digitar os valores, clicar nas operações desejadas, da mesma forma que se opera uma calculadora comum de bolso (atenção: os números podem ser digitados no teclado ou diretamente nos botões da calculadora, mas as operações devem ser acionadas somente por meio dos botões). Existe ainda o botão Limpar (limpa o conteúdo da memória) e também o botão Fechar.

Page 33: Manual Logo 3.0

Aspectos de programação Logo Neste projeto são utilizadas várias operações matemáticas em Logo (soma, quociente, inteiro, produto) em combinação com comandos de interface. As operações matemáticas podem ser observadas no procedimento façaoperação, no qual, de acordo com a operação escolhida e os operandos (o conceito de condicional é utilizado através da primitiva se do Logo), o cálculo é realizado e exibido do “display” da calculadora. Com relação aos recursos de interface, este projeto é bem interessante pois mostra ao usuário as capacidades de desenvolvimento de aplicativos que o SuperLogo fornece. O procedimento preparar trata da criação da janela e dos botões usados na calculadora.

Estrutura geral do projeto

Calc (procedimento Inicial)

Preparar (cria a calculadora)

Algarismo (números)

Estado (operações)

Negue (inverte o sinal)

Façaoperação (faz o cálculo)

Limpe (limpa a memória)

Page 34: Manual Logo 3.0

Principais procedimentos

aprenda ;variáveilocal "malocal "malocal "talocal "ta criecaixa criebotã

criebotãcriebotãcriebotã;(...) criebotã criebotã

criebotã

criebotã

criebotã

criebotã criebotã

criebotã

fim

aprloclocse se (prse se adfim

aprenda Calç ;procedimento inicial criejanela "main "calc [Calculadora simples] 80 80 100 90 preparar fim

Preparar ;cria os elementos de interface s locais, usadas para facilitar o posicionamento dos botoes rgemx atribua "margemx 5 rgemy atribua "margemy 20

manhox atribua "tamanhox 10 manhoy atribua "tamanhoy 10

combinação "calc "c1 :margemx 5 :tamanhox*9 12

o "calc "bponto ". :margemx+:tamanhox*0 :margemy+:tamanhoy*3 :tamanhox :tamanhoy ~ [algarismo ".]

o "calc "b0 "0 :margemx+:tamanhox*1 :margemy+:tamanhoy*3 :tamanhox :tamanhoy [algarismo 0] o "calc "bnegue "- :margemx+:tamanhox*2 :margemy+:tamanhoy*3 :tamanhox :tamanhoy [negue] o "calc "b1 "1 :margemx+:tamanhox*0 :margemy+:tamanhoy*2 :tamanhox :tamanhoy [algarismo 1]

o "calc "b9 "9 :margemx+:tamanhox*2 :margemy+:tamanhoy*0 :tamanhox :tamanhoy [algarismo 9]

o "calc "bmultiplicar "* :margemx+:tamanhox*4 :margemy+:tamanhoy*0 :tamanhox :tamanhoy ~ [estdo 1]

o "calc "bdividir "/ :margemx+:tamanhox*4 :margemy+:tamanhoy*1 :tamanhox :tamanhoy ~ [estdo 2]

o "calc "badicionar "+ :margemx+:tamanhox*4 :margemy+:tamanhoy*2 :tamanhox :tamanhoy ~ [estdo 3]

o "calc "bsubtrair "- :margemx+:tamanhox*4 :margemy+:tamanhoy*3 :tamanhox :tamanhoy ~ [estdo 4]

o "calc "bigual "= :marx+:tamanhox*4 :margemy+:tamanhoy*4+:tamanhoy/2 :tamanhox :tamanhoy ~ [Façaoperação]

o "calc "blimpar "Limpar :margemx :margemy+:tamanhoy*4+:tamanhoy/2 :tamanhox*3 :tamanhoy ~ [limpe]

o "calc "bfim "Fechar :margemx+:tamanhox*6 :margemy+:tamanhoy*4+:tamanhoy/2 :tamanhox*3 ~ :tamanhoy [meufim]

enda Façaoperação ;realiza a operação (sinal de =) al "resposta al "segundoarg atribua "segundoarg textodacaixacombinação "c1 :operação = 1 [atribua "resposta (pri2 :priarg) * (pri2 :segundoarg)] :operação = 2 [se sãoiguais pri2 :segundoarg 0 [msg_div_zero pare] atribua "resposta (pri2 :priarg) / i2 :segundoarg)] :operação = 3 [atribua "resposta (pri2 :priarg) + (pri2 :segundoarg)] :operação = 4 [atribua "resposta (pri2 :priarg) - (pri2 :segundoarg)] textonacxcomb "c1 :resposta

Page 35: Manual Logo 3.0

Sugestões Seria interessante aumentar o número de funções da calculadora: incluir porcentagem e raiz quadrada, por exemplo. Por que você não tenta? Quer uma calculadora mais completa ainda? Experimente fazer uma calculadora científica – o Logo fornece uma série de funções matemáticas básicas que podem ajudá-lo nesse projeto. Quanto à interface, que tal possibilitar ao usuário realizar todas as operações tanto na janela quanto no teclado alfanumérico do computador? Você pode usar primitivas do SuperLogo como asciitecla.

Mister Baskara Nome do arquivo: Baskara.lgo Comando para exexutar: Baskara

Apresentação Delta. O que isso quer dizer? Lembra o Nilo, a pedra da Gávea, o alfabeto grego? Não, aqui o usuário poderá explorar um outro delta. Um delta que tem a ver com números reais e complexos, parábola, raiz, coeficientes, negativo e positivo...Uma série de conceitos matemáticos que permitem aprender um pouco mais as equações de 2º grau. Certo dia uma mamadeira foi flagrada voando do 5º andar de um edifício. Você sabia que a equação de 2º grau pode ser útil para medir a velocidade da queda da mamadeira voadora? Pois é, às vezes aquilo que aprendemos na escola parece distante da realidade, mas as coisas não são assim não. Neste projeto, o usuário encontrará uma aplicação específica que auxilia o entendimento do comportamento desse tipo de função. Pode não parecer, mas isso ajuda a compreender alguns fenômenos da física. Dê uma olhada!

Page 36: Manual Logo 3.0

O que faz este programa? O objetivo deste projeto é calcular as raízes de equações do segundo grau, mostrando ao usuário um esboço do gráfico da equação, para uma visualização da distribuição dessas raízes. O programa lida tanto com raízes reais quanto complexas. É o usuário quem escolhe a equação.

Instruções de uso Após carregar o arquivo Baskara.lgo e clicar em Iniciar, o programa apresenta ao usuário o tipo de equação que será utilizado (ax2+bx+c). Em seguida serão abertas caixas pedindo os coeficientes a, b e c, nessa ordem. O coeficiente a precisa ser diferente de zero, por se tratar de uma equação de 2o grau. Feita a digitação dos dados, as raízes serão calculadas e mostradas no lado esquerdo da tela, enquanto um esboço do gráfico será feito em seu centro. Aspectos de programação Logo Este projeto une cálculos e a parte gráfica do Logo de maneira bastante eficiente. Trata, ainda, com números reais e complexos e define a operação que calcula o valor de delta.

Page 37: Manual Logo 3.0

Estrutura geral do projeto

Principais procedimentos

Baskara (Procedimento principal)

Descrição (Mostra os valores das raízes)

Le_coeficientes (Lê a, b e c )

Mostra_equação (Mostra equação conforme

coeficientes de entrada)

Plota_esquema_gráfico (Esboça esquema gráfico)

Raízes_não_reais (Atribui valores complexos

a x1 e x2)

Raízes_reais (Atribui valores reais

a x1 e x2)

Delta (Calcula o valor de delta)

aprenda Baskara ;Faz a chamada do programa. Verifica o sinal de delta para calcular a resposta (real/imaginária) e também para verificar o número de raízes

(...) se ou ((delta :a :b :c) >0)((delta :a :b :c)=0) [raizes_reais] se (delta :a :b :c) <0 [raizes_não_reais] (...) se (delta :a :b :c) >0 [atr "nraizesreais 2] (...) fim

aprenda Delta :a :b :c ;calcula o valor de delta da equação

envie (:b*:b)-(4*:a*:c) fim

aprenda Raízes_não_reais ;se delta for negativo atribui os valores não reais a x1 e x2

atr "deltaim raizq((-1)*(delta :a :b :c)) atr "x1 (sn (-1)*:b "+ formnum :deltaim 4 3 "*i) atr "x2 (sn (-1)*:b "- formnum :deltaim 4 3 "*i) fim

aprenda Raízes_reais ;se delta for positivo ou zero. atribui a x1 e x2 os valores das raízes reais

atr "x1 formnum (((-1)*:b) + raizq (delta :a :b :c))/(2*:a) 4 3 atr "x2 formnum (((-1)*:b) - raizq (delta :a :b :c))/(2*:a) 4 3 fim

Page 38: Manual Logo 3.0

Sugestões Há um grande número de variações que se pode fazer a partir deste programa-semente. Pode-se colocar uma escala no esboço gráfico. Pode-se colocar os valores das raízes quando estas forem reais. O ponto mínimo ou máximo da parábola também pode ser calculado. Note que o esboço gráfico neste programa leva à questão da trajetória dos projéteis que é vista no projeto “Lá vem bomba!”. Pode-se inserir apresentações para que o cálculo das raízes seja mostrado passo-a-passo. Um outro aspecto que pode ser aprofundado neste projeto é a introdução aos números complexos. As mesmas idéias podem ser utilizadas para tratar de equações de primeiro grau, ou seja, equação da reta. Pode-se também traçar o gráfico de diferentes tipos de equação (polinomiais ou não).

Lá vem bomba

Nome do arquivo: Artilharia.lgo Comando para executar: Artilharia

Apresentação Catapultas, canhões, fogos de artifício, tiro ao alvo. Provavelmente Robin Hood sabia muito bem qual era a inclinação necessária do seu arco e flecha para acertar seus inimigos. Muitas noções estão envolvidas neste projeto: equação de 2º grau, vetores, velocidades, ângulos, gravidade, tipos de movimentos etc. Veja como esses conceitos são aplicados para fazer funcionar um canhão e aproveite para aprender um pouco mais sobre o assunto. Projetos que funcionam como jogos de simulação propiciam a exploração de parâmetros diferentes e, conseqüentemente, a correlação entre eles, propiciando o entendimento de cada resultado alcançado. Aventure-se!

Page 39: Manual Logo 3.0

O que faz este programa? Este projeto simula a trajetória de um projétil lançado por um canhão considerando: o valor de inclinação do canhão, a velocidade inicial de lançamento do projétil e o ambiente físico em que o canhão se encontra. Todos esses dados são fornecidos pelo usuário no momento de execução do programa. Instruções de uso Após carregar o arquivo Artilharia.lgo e clicar em Iniciar, uma janela para a entrada dos parâmetros do tiro é apresentada ao usuário, ou seja, os valores de entrada para a velocidade inicial do projétil, do ângulo do canhão, e da escolha do ambiente do tiro para cálculo da gravidade local. Após isso, pressione o botão Ok para verificar o alcance do projétil caso fosse lançado com esses parâmetros. Nesse ponto também é mostrado um vetor indicando a direção e o sentido do tiro. O tamanho do vetor indica a velocidade inicial para o projétil. Caso as escolhas estejam de acordo com o que se deseja, pressiona-se o botão “Fogo” para lançar o projétil. Este deixa sua trajetória desenhada na tela. Esta trajetória pode ter espessura e cor de traço alterados pelo usuário por meio das barras de rolagem. O botão “Fim” encerra o programa.

Aspectos de programação Logo Este programa usa uma série de operações trigonométricas disponíveis no Logo (seno, coseno); define uma operação para o cálculo da gravidade (calcgrav); manipula arquivos de figuras (carreguebitmap) e de sons (toquewave) e utiliza diversos comandos para criação de janelas e botões (Mostrecaixamensagem, criebotão, apaguejanela). A trajetória do projétil e representada decompondo-se o movimento da Tat nos eixos cartesianos (movx, movy).

Page 40: Manual Logo 3.0

Estrutura geral do projeto

Apagavetor (Apaga o vetor

desenhado anteriormente)

(cal

v

Calcgrav (Envia o valor da gravidade conforme o local escolhido)

Finaliza (Verifica se o tiro

foi certeiro)

Movx (Faz o movimento da

Tat no eixo x

movy (Faz o movimento da Tat

no eixo y)

Mudaespessura (muda espessura do traço)

Posicionaalvo (Coloca o alvo em uma

posição aleatória)

Veralcance (Calcula o alcance

do projétil)

Verangulo (Limita o ângulo de

tiro entre 0 e 90) Alteracor

(altera a cor do traço)

(Pr

Lança (Faz o lançamento do

projétil )

Opções (Caixa para entrada de

parâmetros)

Atribuições cula a velocidade nos

eixos)

Desvetor (Desenha um

etor próximo ao canhão)

Artilharia ocedimento inicial)

Page 41: Manual Logo 3.0

Principais procedimentos

aprenda Artilharia ;procedimento que inicia o programa. zerando as

variáveis e carregando os bitmaps

(...) opções (...) fim

a

(aaf

aprenda Finaliza ;verifica a posição em que o tiro caiu para ver se acertou o alvo

ul senão e (émaior pri pos :posalvo-45 (...) fim

aprenda Opções ;monta caixa principal de opções. É nessa caixa que o usuário entra com os parâmetros do tiro (local do tiro, vel. inicial e ângulo. É nela também que o usuário dispara o tiro.

;gravidade criebotãorádio "principal "grupograv "gravTerra "Terra 120 25 35 10 (...) criebarrarolagem "principal "bcor 108 75 40 10 [mudeestático "cor elemento 1+int (0.04*barrarolagem "bcor) :cores atr "ncor int (0.04*barrarolagem "bcor) alteracor] (...) criebotão "principal "btnok "Ok 5 85 25 10 [atr "angulo pri textodacaixacombinação "entraang verangulo :angulo atr "velocidade pri textodacaixacombinação "entrapot desvetor :angulo :velocidade veralcance calcgrav 9.8] criebotão "principal "btnfogo "Fogo 35 85 25 10[lança :angulo:velocidade finaliza apagavetor :angulo :velocidade] (...) fim

aprenda Calcgrav :gravidade ;calcula e envia o valor da gravidade de acordo com a seleção feita nos botões de rádio. Os valores utilizados são valores reais

(...) envie :gravidade

aprenda Lança :angulo :velocidade ;faz o movimento balístico da tartaruga

(...) atribuições at (...) enquanto [não (elemento 2 pos) <-35] [movx pe 90 movy pd 90 atr "vely :vely-(calcgrav)*:dt un] (...) fim

prenda Atribuições ;calcula os valores das velocidade nos eixos cartesianos

...) tr "velx :velocidade*cos :angulo tr "vely :velocidade*sen :angulo im

Page 42: Manual Logo 3.0

Sugestões

Este projeto pode ser bastante explorado em diversos aspectos. Pode-se, por exemplo, limitar o alcance do tiro por meio do valor obtido no cálculo do alcance, ou seja, caso o alcance tiver um valor que ultrapassará os limites da tela, o tiro não é permitido, ou então ao atingir o limite da tela, o projétil explode. Outra sugestão é colocar um obstáculo entre o canhão e o alvo; assim, o usuário terá de variar o ângulo visando transpor o obstáculo e atingir o alvo. O fator vento não foi considerado nessa versão inicial. É um outro aspecto interessante a ser explorado. Em um nível um pouco mais avançado, pode-se calcular qual é a velocidade inicial necessária para que o projétil entre em órbita (isso depende da gravidade do local em que se encontra o canhão) e, a partir desses dados, limitar a velocidade inicial, emitindo mensagens de que o tiro levou o projétil a entrar em órbita. Cada planeta do sistema solar possui uma aceleração da gravidade diferente, tente descobri-las. Depois insira esses valores no programa.

Referência: http://educar.sc.usp.br/fisica/projlogo.html - Simulações em SuperLogo: Movimento Retilíneo Uniforme e Movimento Uniformemente Variado.

Page 43: Manual Logo 3.0

Fórmula Tat

Nome do arquivo: FormulaTat.lgo Comando para executar: Corrida

Apresentação Emerson Fittipaldi, Nelson Piquet, Ayrton Senna. Durante muitos anos, foi muito fácil acertar quem ganharia uma corrida de Fórmula 1! Felizmente, tivemos muitas alegrias e emoções! Que tal bolar sua própria pista de fórmulatat? Neste projeto, apresentamos uma pequena amostra de como ela pode ser feita. Faça a sua aposta e aguarde o resultado! Você poderá aprender a fazer animação por meio do Logo e a lidar com números aleatórios que garantem a surpresa no final da competição. Boa sorte!

O que faz este programa Este programa coloca quatro tartarugas na janela gráfica para apostar uma corrida. O usuário deve apostar em uma das quatro e tentar acertar qual irá ganhar. Ao som de um tiro será dada a largada.

Instruções de uso Após carregar o arquivo FormulaTat.lgo e clicar em Iniciar, o programa pede ao usuário que escolha uma das quatro tartarugas como vencedora. O usuário deve, obrigatoriamente, escolher um número entre 1 e 4, caso contrário a caixa de entrada volta a aparecer. Após digitar corretamente um dos números das tartarugas, a corrida tem início e só termina quando uma delas atinge uma certa posição na tela, que, no nosso caso, é tido como a linha de chegada. Após o término da corrida, o programa emite uma mensagem dizendo se a aposta feita pelo usuário teve êxito ou não.

Page 44: Manual Logo 3.0

Aspectos de programação Logo Este programa utiliza o conceito de recursão, múltiplas tartarugas e números aleatórios.

Estrutura geral do projeto

Principais procedimentos

aprenda Corrida ;procedimento principal que faz as chamadas de desenho de pista posicionamento das tats, além de pedir a aposta do usuário.

(...) corra (...) fim

Quadrado (Desenha os quadrados

do grid)

Posicionetat (Posiciona as tat’s)

Pódio (Desenha o pódio e coloca

a vencedora)

Ganhou (Mostra mensagem

acerto/erro)

Desenhapista (Desenha o traçado da

pista)

Corrida (Procedimento principal)

(Sort

aprenda Corra ;ativa aleatoriamente uma tat e a coloca 2 passos à frente das demais.

se ((pri pos)=280) [pare] atat sorteienúmero(4) (...) corra fim

Corra eia uma tat e põe

à frente)

Page 45: Manual Logo 3.0

Sugestões O usuário pode tentar fazer uma corrida com outros traçados, usando a posição da tartaruga como parâmetro para as curvas. Pode também inserir um número maior de tartarugas na pista original. Usando o conceito de listas em Logo, pode armazenar em uma lista as três tartarugas mais sorteadas, conhecendo, assim, as três primeiras colocadas e podendo depois colocar seus respectivos números no pódio.

Cata carta

Nome do arquivo: CataCarta.lgo Comando para executar: Catacarta

Apresentação Como anda sua memória? Você se lembra de onde colocou suas chaves? Seu guarda-chuva? Largou as compras no supermercado? Onde está seu carro? Será que foi roubado ou você simplesmente não se recorda mais como deve fazer para chegar até ele?... Hum... a coisa vai mal...Tente então observar a quantas andam a sua atenção e memória espacial. E mais: você também pode analisar como está sua capacidade para fazer inferências e relações indiretas a respeito de um domínio de conhecimento qualquer... Tudo isso dependerá das informações que escolher para compor seu banco de dados: pares de figuras idênticas, invenções e inventores, músicas e cantores, datas e celebrações, objetos relacionados entre si, símbolo químico e o nome do elemento correspondente, estados e capitais, operações matemáticas diversas e seus resultados...uma infinidade de possibilidades.

Page 46: Manual Logo 3.0

O que faz este programa? Neste projeto, 18 cartas vão sendo viradas pelo jogador e devem ser memorizadas por ele. O objetivo é parear as cartas para eliminá-las da tela. Os pares podem ser formados por igualdade ou por afinidade entre elas, isto é, assuntos correlacionados.

Instruções de uso Após carregar o arquivo Memoria.lgo e clicar em Iniciar, aparecerá uma caixa com botões de rádio em que o usuário deve escolher o tipo de par que as cartas formarão: igualdade ou afinidade. Escolhido o tipo de paridade, o programa irá sortear as posições das cartas na janela gráfica. As cartas serão dispostas de maneira aleatória. A tela é mapeada para receber o clique do mouse em cada carta. Clicando fora de qualquer carta nada acontece, exceto no espaço reservado ao botão Parar, que termina o jogo antes que se descubram todas as cartas. Quando todas as cartas são descobertas, uma mensagem aparece parabenizando o usuário. Aspectos de programação Logo Destaca-se o uso de figuras bitmap e de diversas tartarugas. As figuras são carregadas de diferentes diretórios, dependendo da escolha do usuário (igualdade/afinidade). Cada bitmap de carta é representado por uma tartaruga por meio do comando tartarugabitmap. Elas estão escondidas por um outro bitmap colocado em cima da tartaruga. Quando o usuário clica em cima de uma carta, esse bitmap é retirado da tela, mostrando ao usuário a carta (tartaruga). Se o usuário acertar o par, as cartas são escondidas por meio do comando desapareçatat; caso contrário, o bitmap que esconde as cartas volta a aparecer.

Page 47: Manual Logo 3.0

Estrutura geral do projeto

Principais procedimentos

Comparar (Abre cartas e as compara)

Escolhe_carta (Mapea a tela para escolha da carta)

Escolhebanco (Opção do tipo de

jogo)

Exclui_carta (Tira as cartas da tela)

Catacarta (Procedimento Principal)

Montatela (Dispõe as cartas na tela)

aprenda Comparar ;toma o número da carta e a mostra se ela já não tiver sido tirada (...) enquanto [(:carta=-1)] [escolhe_carta] ;caso o usuário clique fora de uma carta se :carta=100 [tat pare] ;opção de parada (...) senão (éelemento (lista :c1 :c2) :pares)[exclui_carta :c1 :c2][atat :c1 dt atat :c2 dt] ;exclui a carta da tela em caso de acerto fim

aprenda Catacarta ;chamada do jogo. (...) atr "pares [[0 1] [2 3] [4 5] [6 7] [8 9] [10 11] [12 13] [14 15] [16 17] [1 0] [3 2] [5 4] [7 6] [9 8] [11 10] [13 12] [15 14] [17 16]] ;Pares possíveis de serem formados (...) fim

Page 48: Manual Logo 3.0

Sugestões Uma implementação simples que o usuário pode fazer neste projeto é criar a possibilidade de que dois jogadores disputem uma partida. Além disso, pode-se criar mais bancos para aumentar a gama de cartas a serem utilizadas. Pode-se inclusive criar níveis de dificuldade mostrando a posição das cartas antes de ocultá-las.

Aperta o nó

Nome do arquivo: Forca.lgo Comando para executar: Forca

Apresentação Trata-se do popular jogo da forca. A brincadeira prevê o uso de variadas estratégias e bons momentos de diversão! Geralmente as pessoas bolam palavras pouco usuais para dificultar a descoberta do jogador. A versão em Logo apresentada tem uma novidade interessante. O jogador pode pedir uma dica ao computador para facilitar a descoberta da palavra-alvo. Da mesma forma, o jogador pode acrescentar novas palavras e suas respectivas dicas. A natureza da dica pode ser muito variada: um sinônimo, uma definição, um assunto correlacionado, um trocadilho...Escrever a dica é parte da brincadeira também! Em termos educacionais, percebe-se que o Aperta o nó pode ser usado de inúmeras maneiras... tudo depende da criatividade do usuário. A única forma de tirar o pescoço da corda é pensar em várias coisas ao mesmo tempo - número de letras, letras mais usadas na língua, conteúdo da dica, regras ortográficas - enquanto se diverte com o jogo! Mais uma observação: o usuário pode aproveitar esse mesmo jogo para brincar com outros idiomas e explorar qualquer domínio de conhecimento.

Page 49: Manual Logo 3.0

O que faz este programa? Basicamente, o usuário tem de adivinhar a palavra secreta, tendo como pista apenas o número de letras que compõe a palavra. A cada acerto, a letra é desvendada; a cada erro, um pedaço do boneco é desenhado, podendo-se errar um máximo de seis vezes. Cada tentativa do usuário aparece em uma janela de letras usadas. Nesta versão do jogo da forca existe a opção de se mostrar uma dica para facilitar a descoberta da palavra. Instruções de uso Após carregar o arquivo Forca.lgo e clicar em Iniciar, aparecerá uma caixa com botões de rádio em que o usuário deve escolher um tema entre os dez propostos. Escolhido o tema, o programa pede a opção entre jogar ou inserir uma palavra no banco de dados, de acordo com o tema escolhido. Na opção de inserir palavras, será pedido ao usuário a palavra a ser inserida e em seguida a dica a respeito daquela palavra. A palavra e sua respectiva dica serão gravadas no respectivo arquivo relacionado ao assunto escolhido. Será pedido ao usuário a opção de ver ou não a dica. Do lado esquerdo será montado o alfabeto para que se possa escolher uma letra com o clique do mouse sobre a letra. No centro da tela aparecerá a dica, os traços relativos ao número de letras da palavra e, do lado direito, uma caixa que mostra quais letras já foram utilizadas. Quando o usuário clica em uma letra que já tenha sido utilizada, um aviso de que aquela letra já foi usada é emitido. O jogo termina quando o usuário adivinha a palavra ou então quando erra pela sexta vez. Aspectos de programação Logo Neste projeto, é interessante notar o uso de arquivos em Logo. Os assuntos são lidos e gravados em arquivos textos comuns com a seguinte seqüência: palavra 1 dica 1

Page 50: Manual Logo 3.0

palavra 2 dica 2 ... e assim sucessivamente. Quando o jogo se inicia, é aberto um arquivo e feita a leitura nessa seqüência, colocando as palavras e dicas em uma lista para que possam ser sorteadas. Para gravar, o processo é parecido: o programa abre o arquivo e insere a palavra e a dica no final dele. Após qualquer uma dessas operações, o arquivo deve, obrigatoriamente, ser fechado.

Estrutura geral do projeto

Atribuitema (Verifica tema escolhido nos botões

de rádio)

Carregaba(Abre arquivo do tema e

variáveis)

Enforca (Desenha um pedaço

do boneco)

Entraletra (Mapeia a tela para escolha d

letras)

(Ces

Forca (Procedimento inicial)

(Avletr

(C do

Montat(Monta a tela grá

jogo)

Rotulaletra (Abre letra)

(Incai

(Tc

Escolhetema ria caixa para colha dos temas)

nco coloca nas

as (Inspala

(Peusu

ela fica para o

(Opçõinserir

Gravabanco ere e grava vra e dica no

Inserepalavra de palavra e dica ao ário)

JaConsta isa quando aa já foi usada)

Jogo ontrole jogo)

Opções es iniciais: palavra/jogar)

Tentativas sere letra na xa de letras

Trataacento rata das letras

om acento e

Page 51: Manual Logo 3.0

Principais procedimentos

aprenda Carregabanco :arq ;carrega as palavras e as dicas do arquivo paraserem usados durante o jogo abraparaler :arq (...) fechearq :arq fim

aprenda Jogo ;monta a caixa de letras usadas e faz a contagem dos erros e acertos

(...)

aprenda Forca ;procedimento principal que inicia o jogo e faz as atribuições iniciais

(...) escolhetema ;Chama procedimento para escolha do

tema (...) carregabanco (palavra "assuntos/ :temaesc ".txt) (...) enquanto [:n=0] [atr "n sorteienúmero ((numelem :palavras)+1)] ;sorteia um número para escolha da

palavra e da dica (...) opções ;Chamada de procedimento para

opções iniciais: Jogo/inserção senão ou (:op="A)(:op="a) [tat at forca][jogo] fim

Sugestões Em vez de a dica ser textual, pode-se implemensons. O usuário pode também inserir novos assuntos. pode ser uma outra forma de facilitar a descobersorteio da palavra, pode-se criar uma maneira depalavra do banco de dados.

se :contaacerto=numelem :palavra [ toquewave "aplauso.wav 0 mostrecaixamensagem (sentença "Fim "de "jogo)(sentença "Parabéns)] fim

Aprenda Opções

aprenda gravabanco :arq :palins :dicains ;grava uma palavra e uma dica no banco escolhido (...) fechearq :arq fim

aprenda Inserepalavra ;Monta tela para o usuário entrar com a palavra e dica no banco

(...) atribua "palavra minúscula pri caixadequestão [Insira a palavra](lista :temaesc ": ) (...) gravabanco (palavra "assuntos/ :temaesc ".txt) :palavra :dica fim

tá-la por meio de figuras e

Deixar uma letra aparente ta da palavra. No lugar do escolher uma determinada

Page 52: Manual Logo 3.0

OXO, XOX – deu empate! Versão usuário x computador

Nome do arquivo: Jogovel.lgo Comando para executar: Jogo.da.velha

Apresentação Todo mundo já brincou um dia de jogo da velha: rabiscando num guardanapo, na areia úmida da praia, escondido no fundo da classe. Com certeza, o desafio de fazer uma versão computadorizada deste jogo não está no desenho do tabuleiro nem nas peças dos jogadores. O desafio é outro. É preciso prestar atenção na diversidade de estratégias que os jogadores usam. A implementação de um jogo tem esse aspecto interessante. Se você não quer desenvolver um jogo "viciado", que sempre faz as mesmas jogadas e torna-se enfadonho, a dica é: preste muita atenção no modo como as pessoas jogam o jogo da velha. Depois é só descrever essas estratégias em Logo e "alimentar" a inteligência do seu próprio jogo. Não se esqueça de personalizá-lo, criando uma interface agradável e dando seu toque pessoal. Apresentamos duas versões: usuário versus computador e usuário versus usuário.

O que faz este programa? Neste programa, o usuário joga o conhecido "Jogo da Velha" contra o computador, que usa uma série de estratégias para tentar ganhar o jogo.

Page 53: Manual Logo 3.0

Instruções de uso Após carregar o arquivo Jogovel.lgo e clicar em Iniciar na tela de apresentação, o tabuleiro será desenhado na tela e será solicitado ao primeiro jogador que escolha sua marca no jogo (X ou O). No jogo da velha temos dois jogadores, um com a marca X e outro com O, e eles alternadamente marcam uma posição em um tabuleiro de 3x3 posições. O primeiro jogador que conseguir completar uma linha (vertical, horizontal ou diagonal) vence o jogo. Para efetuar a jogada, basta dizer a posição de acordo com o formato linha coluna (exemplo: linha a, coluna 3 ! a 3). As jogadas são alternadas entre o jogador e o computador, que jogará automaticamente (por meio de uma série de estratégias contidas no programa), e assim que houver um vencedor, ele avisará quem ganhou.

Aspectos de programação Logo Neste projeto, o conceito de listas de propriedades (veja o procedimento Represente.tabuleiro) é introduzido. A definição de vários predicados (ver procedimento Duas.ocupadas.uma.livre) é bem explorada. A possibilidade de construir programas que apresentam, de certa maneira, um comportamento inteligente (baseado em uma série de estratégias programadas) é outro conceito fundamental. Neste “Jogo da Velha”, o computador joga tentando quatro estratégias básicas (em ordem de prioridade):

1. Tentar fechar o jogo, se possível (preenchendo uma linha). 2. Tentar impedir que o adversário vença o jogo na próxima jogada. 3. Jogar em uma posição nos cantos ou no centro, se possível. 4. Sortear uma das posições livres (pior estratégia).

Page 54: Manual Logo 3.0

Estrutura geral do projeto

Jogo.da.velha (procedimento Inicial)

Tabuleiro (desenha tabuleiro)

Inicialize.variaveis (inicia as variáveis)

Represente.tabuleiro (representa o tabuleiro na

memória)

Escolha.marca (jogador escolhe a marca)

Jogue (recursivo)

Jogador (usuário joga)

Jogo.terminado (verifica fim de jogo)

Quem.ganhou (verifica o ganhador) Computador

(computador joga)

Tstentrada (testa entrada)

Jogada (verifica se casa ocupada) Desenhe.marca

(desenha a marca X/O) Registre.jogada

(registra na memória a jogada)

Jogada.computador (tenta as diversas estratégias)

Duas.ocupadas.uma.livre (estratégia)

Sorteie.posição (estratégia)

3Posição.livre (estratégia)

Umalivre (estratégia auxiliar)

Canto.ou.centro (estratégia)

Page 55: Manual Logo 3.0

Principais procedimentos

aprenda Jogo.da.velha ;procedimento inicial ;(...) Inicialize.variáveis ;prepara as variáveis necessárias Represente.tabuleiro :posições Jogue ;início do jogo fim

aprenda Represente.tabuleiro :pos ;representa o tabuleiro na lista de ;propriedades

se évazia :pos [pare] coloqueprop primeiro primeiro :pos último primeiro :pos "$

Represente.tabuleiro sp :pos fim

aprenda Jogue ;procedimento recursivo do jogo Jogador ;usuário joga se Jogo.terminado :posições [Esct1 Quem.ganhou :linhas termine pare] mudecl "vermelho Esct1 [Aguarde... computador pensando.] espere 50 Computador ;computador joga Esct1 [ ] se Jogo.terminado :posições [Esct1 Quem.ganhou :linhas termine pare] Jogue ;nova jogada... fim

aprenda Computador ;computador jogando Jogada.computador ;(...) Desenhe.marca :marca.computador :posição Registre.jogada :marca.computador :posição fim

aprenda Jogador ;usuário jogando coloque caixadequestão [Aonde vocêquer jogar agora?] [Formato linha coluna- exemplo: a 3] "posição ;(...) Desenhe.marca :marca.jogador :posição ;desenha a marca Registre.jogada :marca.jogador :posição ;registra a jogada na memória fi

enda Duas.ocupadas.uma.livre :marca torna verdadeiro se existir uma linha de aparece a mesma marca em duas ições e a terceira posição livre oque 3Posição.livre :linhas :marca

"posição ão évazia :posição [envie "falso]

[envie "verd]

aprenda Jogada.computador ;tenta as diversas estratégias parao computador se Duas.ocupadas.uma.livre :marca.computador [pare] ;tenta ganhar se Duas.ocupadas.uma.livre :marca.jogador [pare] ;impede usuário de ganhar se Canto.ou.centro :cantocentro [pare] ;joga nos cantos ou no centro Sorteie.posição [ [b 1] [b 3] [a 2] [c 2] ];sorteia uma das posições da lista fim

apr;re;onposcol

sen

fim

aprenda 3Posição.livre :l :m ;percorre a lista em :l, tomando cada sublista (uma linha) e retornando aposição onde ocorre a condição especificada em Duas.ocupadas.uma.livre se évazia :l [envie [ ] ] se não évazia Umalivre pri pri

:l pri sp pri :l último pri :l :m [envie Umalivre pri pri :l prisp pri :l último pri :l :m]

envie 3Posição.livre sp :l :m fim

Page 56: Manual Logo 3.0

Sugestões

O procedimento Jogue foi definido de maneira que sempre o usuário começa a jogar. Que tal tentar fazer com que o jogador que vai iniciar o jogo seja escolhido por sorteio? Você também pode tentar eliminar o aspecto previsível das estratégias usadas pelo computador, incluindo alguns sorteios (exemplo: quando existir mais de um canto livre, escolher um deles aleatoriamente). Uma estratégia mais complexa é tentar escolher uma posição que permite completar mais de uma seqüência (com isso, o jogo estaria praticamente ganho na jogada seguinte). Gostou do Logo3D? Então o que você acha de elaborar um Jogo da Velha em 3 dimensões ? Vamos lá! Referência LOGO : conceitos, aplicações e projetos, José Armando Valente & Ann Berger Valente, São Paulo, McGraw-Hill, 1988.

Page 57: Manual Logo 3.0

OXO, XOX – deu empate!2 Versão usuário x usuário

Nome do arquivo: jogovel2.lgo Comando para executar: jogo.da.velha2 O que faz este programa? Nesta versão, o usuário joga o conhecido "jogo da velha" contra outro usuário. Diferentemente do “Jogo da Velha 1”, o computador limita-se a verificar a validade da jogada e quem ganhou o jogo quando este acabar.

Instruções de uso

Após carregar o arquivo jogovel2.lgo, e clicar em Iniciar na tela de apresentação, o tabuleiro será desenhado na tela e será solicitado ao jogar que digite seu nome e depois que escolha sua marca no jogo (X ou O). As regras são as mesmas do jogo da velha tradicional (ganha quem conseguir primeiro preencher uma linha, coluna ou diagonal com sua marca), e para efetuar a jogada basta dizer a posição de acordo com o formato linha coluna (exemplo: linha a, coluna 3 ! a 3). Nesta versão o computador se limita a informar o final do jogo e quem foi o vencedor.

2 Devido à similaridade desta versão 2 com a versão 1 do Jogo da Velha, serão destacadas apenas as diferenças entre as duas versões. Vários procedimentos usados são os mesmos, portanto para maiores detalhes consulte o material sobre a versão 1 ou a própria listagem do projeto.

Page 58: Manual Logo 3.0

Estrutura geral do projeto

Referência LOGO : conceitos, aplicações e projetos, José Armando Valente & Ann Berger Valente, São Paulo, McGraw-Hill, 1988.

Jogo.da.velha2 (proc. Inicial)

Tabuleiro (des. tabuleiro)

Inicialize.variaveis (inic. as variáveis)

Represente.tabuleiro (repr. do tabul. na memória)

Escolha.marca (jogadores escolhem as

marcas)

Jogue (recursivo) Jogo.terminado

(verif. fim de jogo)

Quem.ganhou (verif. o ganhador)

Tstentrada (testa entrada)

Jogada (ver. se casa ocupada)

Desenhe.marca (desenha a marca X/O)

Registre.jogada (registra na mem. a jogada)

troca.marca (troca o jogador)

Page 59: Manual Logo 3.0

Tatgoshi

Nome do arquivo: Tatgoshi.lgo Comando para executar: Tatgoshi

Apresentação Alguém já ouviu isso? Quando a gente gosta É claro Que a gente Cuida... Fala que me ama Só que é da boca pra fora...( Sozinho – Peninha) Pois é. Não adianta dizer que gosta e quer bem. É preciso fazer muito mais: pequenas ações que garantem o bem-estar de quem a gente gosta. Que tal criar um ser amado virtual? Transformar a tartaruga em um pequeno robozinho que precisa de seus cuidados: carinho, alimentação, passeios, higiene. Tudo o que você mesmo precisa para manter mente e corpo em perfeita harmonia. Quando surgiu o bichinho virtual, foi uma verdadeira febre. As crianças adoraram, mas os professores ficaram incomodados com tantos bips bips no meio da aula. O negócio é tirar partido daquilo que a moçada curte. Que tal aproveitar a ocasião para falar de responsabilidade, solidariedade, afetividade, ecologia e desenvolver uma consciência voltada para os valores que realmente importam à humanidade? Pode-se falar até mesmo de disciplina. Sem falar que muitos assuntos estão relacionados entre si, formando uma verdadeira teia: biologia, química, história, geografia, ética, economia, estética, política. Eu cuidarei do seu jantar Do céu e do mar E de você e de mim... (Nando Reis ... ) Cuide. Do seu Tatgoshi, das pessoas que estão à sua volta, da Mãe-Terra e de você mesmo!

Page 60: Manual Logo 3.0

O que faz este programa? Este programa simula um bichinho de estimação, semelhante aos famosos bichinhos virtuais. O objetivo do jogo é fazer com que o bichinho permaneça vivo o máximo de tempo possível (mas ele nunca ultrapassa a idade de 30 anos). Instruções de uso Após carregar o arquivo Tatgoshi.lgo e clicar em Iniciar, o programa ativa um temporizador que a cada “contagem” decresce as variáveis de controle do bichinho. Caso o usuário queira uma pausa no jogo, pode fazer o bichinho dormir. Este comando desativa o temporizador até que seja clicado o botão “acordar”. Cada caixa com seu respectivo botão é auto-explicativa. As barrinhas gráficas logo acima do bichinho indicam o estado em que se encontra cada variável de controle. É necessário cuidar para que o nível de limpeza e de peso não cheguem a zero. O bichinho pode morrer por vários motivos: 1) Inanição (motivo: alimentação inadequada); 2) Obesidade (motivo: excesso de alimentação); 3) Doenças (motivo: falta de limpeza); 4) Idade avançada. Além disso, o usuário tem a opção de terminar o jogo clicando sobre o botão Fim. Caso o bichinho morra devido à idade avançada, o usuário atingiu o objetivo do jogo. Aspectos de programação Logo Este programa trabalha com aspectos bastante interessantes para o controle de variáveis. Por exemplo, a variável de controle de peso do bichinho é alterada de acordo com o comportamento da alimentação e da idade do bichinho. O comportamento do Tatgoshi depende exclusivamente de todas as variáveis que controlam seus estados de humor, carência, higiene, fome etc.

Page 61: Manual Logo 3.0

Estrutura geral do projeto

Acariciar (Faz carinho)

Acordar (Retoma as atividades)

Alimentar (Alimenta)

Banhar (Dá banho)

Brincar (Brinca)

Calculapeso (Faz cálculo do

peso)

Criarcomandos (Cria as janelas de

controle)

Decrescevariáveis (Decresce variáveis de

controle)

Dormir (Paralisa as atividades)

Estudar (Estuda)

Final (Verifica motivo da

morte)

Finaliza (Encerra o programa)

Iniciavar (Zera variáveis de

controle)

Inserepeso (Insere valor na lista de

cálculo do peso)

Mostraidade (Mostra idade na

janela gráfica)

Mudaestado (Altera barra

gráfica)

Negar (Desenha negação)

Tatgoshi (Procedimento

principal)

Veridade (Escolhe idade do

fim do jogo)

Verificaestado (Verifica variáveis de

controle)

Page 62: Manual Logo 3.0

Principais procedimentos

aprenda Tatgoshi ;procedimento principal Mudefjangr[[MS Sans Serif] 22 0 0 0 10] Iniciavar ;zera variáveis Criarcomandos ;cria janelas de

controle acordar ;retoma as atividades fim

aprenda AlimAtr "aliment(...) mudaestadofim

Procedimentos chamados pelos botões das janelas de controle do bichinho.

aprenda Calculapeso :ListaPesos ;Calcula o peso atual do bichinho

(...) enquanto [não évazia :ListaPesos] [Atr "peso :peso+ pri :ListaPesos Atr "ListaPesos sp :ListaPesos] (...) fim

aprenda Final :idade :motivo ;verifica o motivo da morte do bichinho

se :motivo="peso [Esc [Meu peso estava excessivo]] (...) espere 20 finaliza fim

aprenda Veridade :idade ;verifica a idade do Tatgoshi (...) Se (:idade = 200)[Esc (sentença "me "sinto "velho) enquanto[:idadefim<200][Atr "idadefim sorteienúmero(300)]] se :idade=:idadefim [final :idadefim "idade] fim

eo

[-

aprenda Verificaestado :idade ;verifica estado do Tatgoshi e manda mensagem de acordo com cada variável se :alimento=0 [esc [estou com fome]] (...) fim

aprenda Acordar ;reinicia a atividade do bichinho e decresce as variáveis uma vez

(...) decrescevariáveis (...) ativetemporizador 1 5000 [decrescevariáveis inserepeso verificaestado :contaidade calculapeso :UltPesos atr "contaidade :contaidade+2 veridade :contaidade] fim

aprenda Decrescevariáveis ;a cada contagem decresce as variáveis de estado

se :alimento>0 [Atr "alimento :alimento-1] (...) mudaestado [-200 170] "Felicidade :carinho*10 (...) se ou ((resto :contaidade 10)=0)(:contaidade=0)[mostraidade] fim

ntar ;incrementa alimentação :alimento+3

200 150] "Alimentação :alimento*12.5

Page 63: Manual Logo 3.0

Sugestões Este projeto pode ser enriquecido de diversas formas. Em relação à alimentação, pode-se variar o cardápio fazendo com que o bichinho coma frutas, verduras, doces, cereais, para que se consiga controlar seu peso e, portanto, sua longevidade. Aproveitando o projeto ponteiro_a_ponteiro e modificando a contagem do tempo, pode-se utilizá-lo para controlar os horários de alimentação, estudo, brincadeira, descanso do Tatgoshi. O bichinho também pode estudar até a universidade, basta fazer o estudo em diferentes níveis. Tente relacionar a afetividade de seu bichinho a outras variáveis. Por exemplo: acariciá-lo demasiadamente pode deixá-lo mimado, sem vontade de tomar banho ou se alimentar no horário indicado.

E com vocês... MovimentaSom! Nome do arquivo: Movimenta_som.lgo Comando para executar: Movimenta_som

Apresentação Você gosta de música? Já pensou em criar sua própria trilha sonora ou fazer a sonoplastia de seus programas computacionais? Transformar ruído em som com sentido é trabalho mesmo para artista! Este projeto pode ajudar a compreender um pouco melhor alguns dos aspectos que compõem o fenômeno sonoro, como altura e duração. À medida que o usuário vai mexendo com uma série de parâmetros, pode produzir seqüências de sons bem interessantes, de forma interativa. Depois, é só criar um arquivo próprio e reutilizar em outros projetos para criar efeitos sonoros inesperados, como uma história em quadrinhos cujo enredo é contado por meio de sons. A representação gráfica dos sons gerados pelo programa não só permite a compreensão da função de cada parâmetro, como também produz efeitos visuais bem bonitos. Afine-se!

Page 64: Manual Logo 3.0

O que faz este programa?

Neste programa, pode-se produzir seqüências de sons a partir de determinadas alturas e durações escolhidas pelo usuário. Para auxiliar a compreensão do fenômeno sonoro, o usuário pode acionar uma representação gráfica do movimento sonoro escolhido. Também a partir desse projeto é possível estabelecer uma correspondência entre o nome tradicional dos sons (notas musicais) e os comandos MIDI (números que representam as freqüências dos sons).

Instruções de uso

Após carregar o arquivo Movimenta_som.lgo e clicar em Iniciar na tela de apresentação, uma janela com as caixas Seqüência, Altura inicial, Duração inicial e Quantidade de notas é exibida. Altere esses parâmetros como desejar e então clique em Toque (se Gráfico estiver selecionado, um desenho correspondente ao som será produzido pela tartaruga na tela). Estas seqüências estarão sendo, além de tocadas, armazenadas na memória (em uma lista). Depois de produzir diversos sons, você pode clicar em Toque Tudo para ouvir (e ver) toda a seqüência de sons produzida (até o último Toque Tudo – a memória é limpa).

No programa, temos as seguintes caixas e botões:

1. Seqüências: lista de conjuntos de notas que tem direções e velocidade predeterminadas com as seguintes características:

• Permanece – sem variação de altura e duração das notas • Permanece_acelera – sem variação de altura e diminuindo o valor

da duração das notas (acelerando) • Permanece_desacelera – sem variação de altura e aumentando o

valor da duração das notas (desacelerando) • Desce – diminuição de altura (caminha do agudo para o grave) e sem

variação na duração das notas

Page 65: Manual Logo 3.0

• Desce_acelera – diminuição de altura (caminha do agudo para o grave) e diminuindo o valor da duração das notas (acelerando)

• Desce_desacelera – diminuição de altura (caminha do agudo para o grave) e aumentando o valor da duração das notas (desacelerando)

• Sobe - aumento da altura (caminha do grave para o agudo) e sem variação na duração das notas

• Sobe_acelera – aumento da altura (caminha do grave para o agudo) e diminuindo o valor da duração das notas (acelerando)

• Sobe_desacelera – aumento da altura (caminha do grave para o agudo) e aumentando o valor da duração das notas (desacelerando)

2. Altura: é o parâmetro sonoro que diz respeito à freqüência do som. É o universo do grave-agudo e é representado, na notação tradicional, pelas notas e pelo número que está em frente do nome (C3 é o dó central, o C2 é um dó mais grave e o C4 um dó mais agudo). Aparece também ao lado do nome da nota o número MIDI correspondente. 3. Duração: determina o tempo de emissão do som a partir da seguinte relação: 60 corresponde a 1 segundo. 4. Quantidade de notas: especifica o número de notas que compõe a seqüência de som escolhida. 5. Toca: toca uma determinada seqüência de sons com os respectivos valores escolhidos pelo usuário. 6. Toca Tudo: toca todas as seqüências feitas e, em seguida, limpa a memória.

Aspectos de programação Logo Neste projeto são trabalhados principalmente os comandos que envolvem o tratamento de sons no SuperLogo (comandos MIDI). Usa-se também a manipulação de listas para produzir as seqüências musicais. A recursão é um conceito muito importante usado neste projeto. No procedimento tocaseqsons, a recursão é usada para percorrer a lista da seqüência de sons e assim tocar o som correspondente (primitiva faça). Observe que a cada chamada recursiva, o parâmetro é alterado (é usada a primitiva sp – semprimeiro). Esta possibilidade de usar recursão com a

Page 66: Manual Logo 3.0

mudança no parâmetro de chamada é poderosa e pode ser usada em muitas outras situações.

Estrutura geral do projeto

Movimenta_som (procedimento Inicial) Info

(cria a janela de instruções)

Restauratela (limpa a tela)

Caixacombdu (duração)

Caixacombv (volume)

Caixacombsom (seqüências)

Armazenaseqsons (armazena a seqüência de sons)

Janseqsons (cria a janela de controle)

Tocaseqsons (toca a seqüência na

memória)

Desce (altera som)

Desce_acelera (altera som)

Desce_desacelera(altera som)

S (procedimento auxiliar)

Sommidi (mensagem para o midi)

Permanece(alt

era som)_

Permanece_acelera (altera som)

Sobe (altera som)

Sobe_acelera (altera som)

Permanece_desacelera(altera som)

Sobe_desacelera

(altera som)

Soarver (toca a nota +

gráfico)

Grafo (desenha gráfico)

Page 67: Manual Logo 3.0

Principais procedimentos

ac f

aprenda Combinasom ;procedimento principal atr "seqsons [ ] Info ;janela de instruções Janseqsons ;cria janela de controle fim

aprenda Janseqsons ;cria a janela de controle Restauratela criejanela "main "movesom [Seqüências de sons: Combinando ALTURA E DURAÇÃO] 5 150 350 70 Caixacombaltu "movesom crieestático "movesom "estseq [Seqüência] 5 0 40 10 ;(...) criecaixamarcação "movesom "grupo "marcação [Gráfico] 235 10 45 13 criebotão "movesom "botão "Toque 230 30 30 15 [Armazenaseqsons Vermarca] criebotão "movesom "botão3 [Toque Tudo] 265 30 40 15 [Tocaseqsons :seqsons atr "seqsons [ ] ] criebotão "movesom "botão2 "Fechar 310 30 30 15 [apaguejanela "movesom tat atr "seqsons [ ] ] Caixacombsom "movesom fim

aprenda Tocaseqsons :seqsons ;toca a seqüência de sons armazenada na memória se :seqsons = [] [atribua "seqsons [ ] pare] faça pri :seqsons Tocaseqsons sp :seqsons fim

aprenda Armazenaseqsons ;armazena a seqüência de sons em uma fila inserefila "seqsons (lista pri textodacaixacombinação "combsom ~ pri textodacaixacombinação "altu1 ~ pri textodacaixacombinação "du1 ~ pri textodacaixacombinação "vezesrepet) fim

aprenda Desce_acelera :nota :duraçao :v Soarver :nota :duraçao :v -3 -2 fim

aprenda Soarver :nota :duraçao :v :p1 :p2 ;toca a nota e desenha o gráfico correspondente se ou :v = 0 :duraçao < 1 [pare] Grafo :nota :duraçao ;gráfico S :nota :duraçao ;nota Soarver (:nota + :p1) (:duraçao + :p2) (:v - 1) :p1 :p2 un fim

aprenda S :nota :duraçao Sommidi :nota :duraçao 127 0 0 fim

prenda Sommidi :nota :duraçao :volume :timbre :canal oloque abramidi "nomesaidamidi mensagemmidi (lista 192+:canal :timbre) mensagemmidi (lista 144+:canal :nota :volume ) espere :duraçao mensagemmidi (lista 128+:canal :nota :volume - :volume) fechemidi im

Page 68: Manual Logo 3.0

Sugestões

Que tal tentar exportar os sons produzidos para um arquivo de forma que possam ser executados no futuro? Dê uma olhada no projeto “Tirando som de A a Z” para uma idéia de como trabalhar com manipulação de arquivos e comandos de midi. Você também pode tentar mudar o desenho que a tartaruga faz. Gosta de violino? Saxofone? Então tente mudar o timbre para simular diversos instrumentos musicais. Outra idéia interessante: você pode fazer a sonoplastia de um outro projeto – uma cena de trânsito, por exemplo.

Tirando som de A a Z

Nome do arquivo: Tirando_som.lgo Comando para executar: Teclado

Apresentação Que tal transformar o teclado alfanumérico do seu computador em um teclado sonoro? Para quem gosta de composição musical, este projeto cai muito bem. Explorando diferentes instrumentos musicais e timbres variados, pode-se compor músicas para todos os gostos. Explore os diversos ritmos brasileiros: samba, axé, bossa nova, rock. Embarque nessa e dê uma viajada pelo mundo: passe pelo tango em Buenos Aires, dance com os cubanos ao som de uma rumba ou vá até o outro lado do oceano para ouvir um bom fado! Aproveite para conhecer a história e a cultura desses lugares. Pesquise sobre as características geográficas e econômicas de cada lugar e aprenda muito mais. Com os recursos de gravação e exportação de sons, você encontrará neste projeto uma ferramenta extremamente útil que poderá se incorporado a qualquer outro projeto computacional. Experimente!

Page 69: Manual Logo 3.0

O que faz este programa? Este programa simula um teclado musical eletrônico usando os comandos de interação com a interface Midi. É possível criar músicas, gravá-las e depois exportá-las para usar em outros projetos do SuperLogo.

Instruções de uso Após carregar o arquivo Tirando_som.lgo e clicar em Iniciar na tela de apresentação, uma janela (figura ao lado) será exibida. Nela, é possível configurar os diversos parâmetros do teclado midi (volume, oitava, canal), além do instrumento musical. Após escolher o instrumento na caixa de listagem, clique em Selecionar para ativá-lo. Para tocar as notas, você deve usar o teclado: a tecla “C” representa o primeiro Dó da oitava selecionada; na linha do teclado iniciada pelo “A” encontram-se os sustenidos, as teclas pretas do piano. Existe ainda o recurso do gravador. Por meio do botão Gravar, o gravador registra todas as notas tocadas até que o botão Parar seja pressionado. É possível então ouvir o som gravado e até mesmo exportá-lo para um arquivo do Logo contendo um aprenda nome_da_música (botão exportar) que pode ser usado em outros projetos feitos em Logo. Aspectos de programação Logo Neste projeto são usados os recursos da interface midi que o SuperLogo oferece. Além disso, o conceito de manipulação de arquivos é utilizado para implementar o recurso de exportação da música produzida. Veja no procedimento Tecla_pressionada um exemplo de como mandar uma mensagem para a interface midi com o objetivo de tocar uma determinada nota musical (neste procedimento também é usado a primitiva asciitecla, que devolve o valor ascii da tecla pressionada).

Page 70: Manual Logo 3.0

O procedimento Exportar faz uso das primitivas do SuperLogo relacionadas com a manipulação e escrita de arquivos. Este é um recurso poderoso (mas não tão complicado) do SuperLogo e que vale a pena conhecer. Estrutura geral do projeto

Usuário pressiona/solta tecla

Teclado (procedimento inicial)

(prepara

Configura_midi (cria os elementos de interface)

(corre

(barra d

(barra

(barra dGravador_inicia (inicia a gravação)

(t

(exppara

(exppara

(semusi

Procedimentos chamados devido a eventos em elementos da interface (botõ

Inicializa as caixas de listagem)

Tecla_pressionada (toca a nota correspondente

a tecla pressionada)

Tecla_solta para de tocar a nota spondente a tecla solta)

o

es, barras de rolagem etc.)

Canal e rolagem Canal)

u

o u

Volume de rolagem volume)

Oitava e rolagem Oitava)

Gravador_pare (encerra a

gravação/execução)

Gravador_toca oca a seqüência de notas

gravadas)

Exportar rta a música gravadam arquivo do Logo)

Meu_fim rta a música gravadam arquivo do Logo)

Instrumento leção do instrumento cal – caixa de listagem)

Mude_velocidade_grava (barra de rolagem velocidade)

Gravador_mensagem(grava a nota)

Page 71: Manual Logo 3.0

Principais procedimentos

an;ameeee"eemff

aprenda Teclado ;procedimento inicial ;(...) (ativetecla [Tecla_pressionada][Tecla_solta]) ;(...) Configura_midi ;cria os elementos de interface Inicializa ;prepara as caixas de listagem da janela principal e as demais variáveis ;(...) fi

aprenda Tecla_pressionada ;verifica a tecla e começa a tocar a nota correspondente local "atecla atr "atecla asciitecla local "nota atr "nota elemento :atecla :omapa se não sãoiguais :nota -10 [~

mensagemmidi (lista 144+:canal :oitava+:nota :velocidade)

se :gravando [Gravador_mensagem (lista 144+:canal :oitava+:nota :velocidade)]~

] fim

aprenda Gravador_mensagem :arg ;adiciona ao vetor de notas gravadas a nota :arg atr "contador_gravacao :contador_gravacao + 1 atribuaelemvetor :contador_gravacao :notasgravadas :arg fim

prenda Exportar ;exporta a música gravada para um arquivo do Logo contendo um aprenda ome_da_música (...) início da manipulação do arquivo braparaescrever :arquivo_exportado udeescrita :arquivo_exportado ;a partir de agora, ao usar a primitiva esc, estamos screvendo no arquivo e não mais na janela de comandos sc sentença [aprenda] :nome_musica sc [esc abramidi] sc (lista "repita :contador_gravacao (lista "mensagemmidi "elemento "cv :notasgravadas espere :veloci_grava) ) sc [fechemidi] sc [fim] udeescrita [ ] echearq :arquivo_exportado ;(...) im

Page 72: Manual Logo 3.0

Sugestões Neste projeto, exportamos a música produzida para um arquivo contendo um procedimento em Logo. Que tal estudar a possibilidade de gravar as músicas geradas no formato midi (.mid) do Windows?

Dr. BiruTat

Nome do arquivo: Dr_birutat.lgo Comando para exexutar: Psiquiatra

Apresentação Você já pensou em bancar um cientista da Inteligência Artificial? Este projeto tem uma raiz histórica muito interessante. Ele foi inspirado em um dos primeiros grandes projetos da área de IA. Saber como manter uma conversação sem dúvida requer colocar inteligência no programa computacional. Para isso, nada como a conversa entre um psiquiatra e seu cliente: eis o desafio deste projeto. Bolar assuntos possíveis que tenham algum tipo de ligação não é tão simples como parece. Modificar oportunamente o fluxo de execução do programa produz resultados bem interessantes que imitam uma conversação real. Tente pensar em como seria seu psiquiatra: sisudo, calado, brincalhão, astuto? Que personalidade você criaria para ele? Brinque um pouquinho, será muito divertido!

O que faz este programa?

Este programa simula a interação entre um psiquiatra e seu paciente. O “psiquiatra” pode manter uma conversa com o “paciente” sobre qualquer assunto, pois o programa não toma partido na conversa – ele simplesmente cria condições para que ela continue.

Page 73: Manual Logo 3.0

Instruções de uso Após carregar o arquivo Dr_birutat.lgo e clicar em Iniciar na tela de apresentação, o psiquiatra iniciará a conversa fazendo uma pergunta na Janela de Comandos. Você deve acompanhar a conversa na Janela de Comandos e interagir com o programa por meio da caixa de questão.

Aspectos de programação em Logo O aspecto mais importante deste projeto é a manipulação de listas, em conjunto com a possibilidade de tornar os programas “inteligentes”. O procedimento Palavra.chave é um exemplo onde são usadas primitivas de manipulação de listas (éitem, sortel). A inteligência do programa está na capacidade de manipulação da sentença fornecida pelo usuário e no grau de sofisticação da resposta. O programa processa a sentença fornecida procurando palavras-chave, verbos etc. e, baseado nestas informações, constrói a resposta. Em vários casos, a resposta é tão apropriada que os usuários têm a sensação de que estão conversando com um psiquiatra.

Page 74: Manual Logo 3.0

Estrutura geral do projeto

Psiquiatra (procedimento inicial)

(aju

Preparação

ste inicial dos bancos)

Conversa (controla o diálogo)

Verbo (procura um verbo)

Pronome (procura um pronome)

(

Palavra.chave (procura uma palavra.chave)

(fo

Frase.geral responde com uma

frase geral

Tem.resp i encontrada uma

estratégia)

Procure.verbo (procura um verbo da

lista de verbos)

Substitui.verbo (procura o verbo e

constrói sufixo usando o verbo encontrado)

Procure.pronome (procura um pronome da

lista de pronomes )

Substitui.pronome (procura o pronome e

constrói sufixo usando oencontrado)

Mensagem.de.suporte (caso onde nada foi digitado)

Page 75: Manual Logo 3.0

Principais procedimentos

aprenda Psiquiatra ;procedimento inicial ;(...) Preparação ;ajuste dos bancos ;(...) Conversa ;início da conversa fim

aprenda Conversa ;controla o diálogo coloque caixadequestão [Dr. BiruTat - Digite aqui] ~

[Acompanhe a conversa na Janela de Comandos] "frase

;(...) ;tenta responder por uma das 4 estratégias a seguir Palavra.chave Verbo Pronome Frase.geral ;(...) Conversa ;chamada recursiva fim

aprenda Palavra.chave ;procura uma palavra chave no texto digitado ;(...) se Éitem [raiva chato chata nervoso nervosa] :frase ~

[esc sentença [Dr. BiruTat : ] [por que isto irrita você tanto ?] Tem.resp pare]

se Éitem [deprimido deprimida aborrecido aborrecida chorar lágrimas dor dores triste] :frase ~ [esc sentença [Dr. BiruTat : ] sortel [[sinto muito saber sobre isso][por que você sente isso?]] Tem.resp pare]

;(...) fim

aprenda Verbo ;tenta construir a resposta a partir de verbos se :tem.resposta [pare] se ou Procure.verbo :verbos.pres Procure.verbo

:verbos.pas [esc (sentença [Dr. BiruTat : ] sortel :prefixos.de.verbo :sufixo) Tem.resp]

fim

aprenda Procure.verbo :lista.verbos ;procura um verbo da lista se évazia :lista.verbos [envie "falso] se Substitui.verbo pri :lista.verbos :frase

[envie "verd] envie Procure.verbo sp :lista.verbos fim

aprenda Substitui.verbo :lista1 :lista2 ; ;constrói o sufixo da frase usando o verbo se évazia :lista2 [envie "falso] se sãoiguais pri :lista1 pri :lista2

[coloque ji último :lista1 sp:lista2 "sufixo envie "verd]

envie Substitui.verbo :lista1 sp :lista2 fim

Page 76: Manual Logo 3.0

Sugestões

A partir deste programa podemos pensar em outras situações nas quais o diálogo entre pessoas é importante. Por exemplo: pode-se simular um garçom de um restaurante. Você deve apresentar ao freguês o cardápio, pedir que ele selecione o que deseja e ir adicionando seus pedidos em uma lista. Pode, por exemplo, dividir o cardápio em várias categorias (entrada, prato principal, salada, sobremesa etc.) e servi-las uma de cada vez. Ao final, pode fazer o fechamento da conta e até permitir que o cliente escolha a forma de pagamento.

Referência: LOGO: conceitos, aplicações e projetos, José Armando Valente & Ann Berger Valente, São Paulo, McGraw-Hill, 1988.

Fábrica de português maluco

Nome do arquivo: Fabrica_portugues.lgo Comando para executar: Fábrica

Apresentação Divirta-se a valer com as frases inesperadas que esta fábrica pode criar! Quase sempre o programa acerta a sintaxe da frase mas, quanto ao sentido, é coisa para doido! Além disso, quem oferece a matéria-prima para a fábrica é o usuário: dê asas à sua imaginação e garanta originalidade à sua fábrica. De uma forma interativa e bastante gostosa, pode-se brincar um pouquinho com a Língua Portuguesa analisando suas características, regularidades, exceções. Se preferir, mude de idioma: what about playing a game? Experimente também armazenar no banco de dados informações de um domínio específico, por exemplo, História. Imagine só quanta confusão vai dar! Se a sua preocupação é educacional, acrescente uma opção para guardar as frases corretas. A professora gritou o mouse de maneira encantadora. Epa! Uma frase maluca apareceu por aqui!

Page 77: Manual Logo 3.0

O que faz este programa? Este programa gera (quase sempre) frases sintaticamente corretas, mas muitas vezes semanticamente “malucas”, a partir de um banco de dados formado por coleções de sujeitos + verbos + objetos + complementos.

Instruções de uso Após carregar o arquivo Fabrica_portugues.lgo e clicar em Iniciar na tela de apresentação, será exibida uma janela de controle contendo seis botões: Montar frase, Inserir sujeito, Inserir verbo, Inserir objeto, Inserir complemento e Fechar. Para que o programa crie as frases aleatoriamente a partir do banco de dados, basta clicar em Montar frase. Também é possível adicionar novos termos ao banco de dados por meio dos demais botões (Inserir sujeito, por exemplo). Aspectos de programação Logo A manipulação de listas é o principal conceito usado neste programa. Operações de inserção e sorteio de elementos são as mais usadas. No procedimento montafrase, por exemplo, são usadas operações de listas como sentença e sorteieelemento (sortel). Já no procedimento inssuj, observamos o uso da primitiva juntenofim (jf), usada para inserir elementos no final de uma lista.

Page 78: Manual Logo 3.0

Estrutura geral do projeto

Principais procedimentos

Fábrica (procedimento Inicial)

Menucontrole (menu com os botões)

Inssuj (insere sujeito)

Insver (insere verbo)

Inscomp1 (insere objeto)

Inscomp2 (insere complemento) Jogo

(inicia o jogo)

Testa_entrada (testa a entrada)

Montafrase (monta a frase louca a partir de um sorteio das diversas listas do banco)

aprenda Montafrase ;monta a frase louca a partir de um sorteio das diversas listas do banco rotule sentença sortel :sujeitos sentença sortel :ações ~

sentença sortel :complementos sortel :complementos2 fim

aprenda Inssuj ;inserir sujeito (...) atr "sujeitos jf tst caixadequestão [Inserir sujeito]

[Digite o sujeito da frase ...] :sujeitos (...) fim

Page 79: Manual Logo 3.0

Sugestões Que tal criar um botão para listar todas as frases que foram criadas? Ou então um botão para guardar somente as frases que o usuário considerar como corretas? Seria interessante podermos exportar as frases que mais gostamos para um arquivo texto, que depois pode ser impresso. Dê uma olhada nos projetos “Tirando som de A a Z” e “Deu branco no texto!” para ver exemplos de manipulação de arquivos em Logo. É possível também algumas abordagens interessantes voltadas ao ensino de línguas, como, por exemplo, concordância, verificação da semântica da frase formada, entre outras atividades.

Page 80: Manual Logo 3.0

A palavra é... Nome do arquivo: A_palavra_e.lgo Comando para executar: Frases

Apresentação O Ministério da Saúde adverte: ______ causa muitos males à saúde. Adivinhar a palavra que falta é muito fácil, não? Sabe por quê? Porque faz parte da nossa cultura "televisiva" ouvir e ler esta frase quase todos os dias. Agora tente esta: Nos últimos dez anos, o Brasil conquistou ótimos resultados no ________ . E então? Conseguiu? Um pouquinho mais complicado, não é? Afinal, há várias possibilidades: vôlei, automobilismo, futebol, vôlei de praia, cinema, Grammy... (veja só, pelo menos nos esportes e nas artes vamos indo bem!). Perceba como uma frase deste tipo desencadeia muitas idéias e, conseqüentemente, aciona vários conhecimentos ao mesmo tempo. Um jogo desse tipo pode ser superinteressante. Além de tratar de vários assuntos e testar conhecimentos, pode-se recorrer ao conjunto de dicas que o jogo fornece. Então, exercite-se!

O que faz este programa? O programa apresenta uma frase (ou um pequeno texto) contendo lacunas. O usuário deve preencher as lacunas dando palavras como entrada (uma de cada vez, mas sem uma ordem específica). O usuário pode buscar

Page 81: Manual Logo 3.0

auxílio na dica da palavra que se encontra ao lado da lacuna. O uso de textos mais longos faz parte do projeto "Deu branco no texto!".

Instruções de uso Após carregar o arquivo A_palavra_e.lgo e clicar em Iniciar na tela de apresentação, uma janela com as opções Inserir nova frase e Jogar será apresentada. Para jogar, selecione esta opção e clique Ok. Uma frase será então apresentada na tela, já com as lacunas (e as respectivas dicas ao lado de cada lacuna). É na caixa de questão Tentativa que devem ser digitadas as tentativas de palavras. Não há nenhuma ordem para tentar as palavras (apenas tente uma de cada vez). Conforme o usuário for acertando, as lacunas irão sendo preenchidas e, ao terminar, ele será informado se conseguiu completar a frase (ou o pequeno texto). Ao escolher a opção Inserir nova frase, o usuário deve digitar a frase, depois as palavras a serem retiradas e as respectivas dicas. O jogo será então executado com essa frase inserida e, ao terminar, haverá a opção de confirmar ou não a nova inserção. Aspectos de programação Logo Este projeto trabalha principalmente com manipulação de listas e recursão. Em vários procedimentos são usadas diversas operações de listas, como, por exemplo, trocar um determinado elemento de uma lista (Trocaelem), contar o número de caracteres em uma frase no formato de lista (Contacaracteres), além de operações básicas como inserção (juntenofim, juntenoinício), remoção (retire) e consulta de elementos na lista (éelem, pri, elemento). Outro recurso poderoso, a recursão, pode ser observado tanto no procedimento Montajogo quanto em Trocaelem. No procedimento Trocaelem, por exemplo, a chamada recursiva é feita sobre os valores dos parâmetros modificados (no caso :lista sem o primeiro elemento).

Page 82: Manual Logo 3.0

Estrutura geral do projeto

(in

(respon

(verific (rempala

Trocaele(troca um eleme

outro em uma

Frases (procedimento

Inicial)

Inserirnovo (módulo de inserção)

Jogo icia o jogo)

ov

m nto por lista)

Rotonde (rotula um texto em

local específico

Limpatela (prepara a tela)

Contacaracteres (conta os caracteres de

uma frase)

Jogada sável pela tentativa)

(prepmesm

Tente a se a tentativa é correta )

Montajogo nta a frase retirando as

ras a serem escondidas)

um )

Sublinhado ara um sublinhado do o tamanho da palavra)

Page 83: Manual Logo 3.0

Principais procedimentos

Sugestões Que tal buscar na tentativa do usuário se ele digitou algo próximo de uma das palavras corretas (por exemplo, uma subseqüência da palavra), ou se ele digitou a palavra mas cometeu algum erro de ortografia? Tente implementar outros tipos de dicas: imagens e sons, por exemplo, associados a uma lacuna.

aprenda Jogo ; inicia o módulo do jogo, sorteando uma frase do banco ;(...) local "jogada atr "jogada sortellistafrase ;escreve na Tela Rotonde 50 Montajogo pri :jogada pri sp :jogada ;responsável pelas tentativas do usuário Jogada pri :jogada pri sp :jogada Frases fim

aprenda Jogada :jfrase :jpal ; responsavel pela Jogada (tentativa) enquanto[não évazia :jpal][ Tente pri

caixadequestão [Tentativa][Tente uma palavra] numelem :jpal Limpatela Rotonde 50 Montajogo :jfrase :jpal ~ se (évazia :jpal)[Toqueaudio "aplauso mostrecaixamensagem [Parabéns!][Você acertou todas as palavras!]] ]

fim

aprenda Tente :tentativa :j ;verifica se a palavra jogada é parte da frase para [i 1 :j] [se(meuéelem :tentativa elemento :i :jpal)

[atr "jpal retire elemento :i :jpal :jpal PARE]] mostrecaixamensagem [Jogo da frase com lacunas][Tente outra palavra...]

fim

aprenda Montajogo :frase :palavra ; remonta a frase retirando as palavras aserem escondidas se (évazia :palavra) [envie :frase] se (meuéelem meupri meupri :palavra :frase)

[envie montajogo trocaelem :frase meupri meupri :palavra sentença sublinhado meupri meupri :palavra sp meupri :palavra sp :palavra ]

envie montajogo :frase sp :palavra fim

aprenda Trocaelem :lista :velho :novo ; dada uma lista, troca um elemento por outro se (évazia :lista)[envie [ ]] se (sãoiguais pri :lista :velho)

[envie trocaelem ji pri :novo ji pri sp :novo sp :lista :velho :novo]

envie ji pri :lista trocaelem sp :lista :velho :novo fim

Page 84: Manual Logo 3.0

Deu branco no texto!

Nome do arquivo: Deu_branco.lgo Comando para executar: Deu_branco

Apresentação Ah, não!!! O computador apagou algumas palavras! E agora? Este projeto apresenta um texto todo esburacado. A brincadeira consiste em descobrir as palavras que lhe dão sentido. Aí, sim, é que a coisa fica legal. Porque muitas vezes dá para mudar sutilmente seu sentido original sem que haja comprometimento da inteligibilidade do texto todo. Trata-se de um exercício criativo com a língua, que envolve alguns conhecimentos específicos: saber quando é um verbo ou um substantivo o que falta ali, qual é a regência de um certo verbo ou a concordância verbal e nominal. Não há dica alguma disponível no projeto, o usuário precisa interpretar o que lê. Pode-se variar indefinidamente o tipo de texto, tanto em relação ao seu estilo literário quanto em relação ao assunto que comenta. Também pode ser bem explorado no ensino de línguas. Dê uma ! Temos certeza de que este vai interessá-lo!

O que faz este programa? Este programa apresenta um texto com diversas lacunas3. Cabe ao usuário tentar encontrar as palavras que estão faltando, realizando um exercício de interpretação do texto. Também existe a possibilidade de inserir novos textos no banco.

Instruções de uso Após carregar o arquivo Deu_branco.lgo e clicar em Iniciar na tela de apresentação, uma janela com as opções Inserir novo texto no banco e Jogar será apresentada. Para jogar, selecione esta opção e clique Ok. Um texto será então apresentado na Janela de Comandos (somente no caso do texto ser

3 Este projeto é uma versão do “A palavra é...” e por esta razão tem alguns procedimentos idênticos. Aqui, nos deteremos nos procedimentos específicos deste projeto que ainda não foram comentados.

Page 85: Manual Logo 3.0

pequeno, ele será apresentado na Janela Gráfica), já com as lacunas. É na caixa de questão Tentativa que devem ser digitadas as de palavras para o preenchimento das lacunas. Não há nenhuma ordem para tentar as palavras (apenas tente uma de cada vez). Conforme for acertando, as lacunas irão sendo preenchidas e, ao terminar, você será informado de que concluiu o preenchimento do texto. Ao escolher a opção Inserir novo texto no banco, digite o nome do arquivo com o texto4 (este já deve se encontrar no subdiretório textos deste projeto). Veja abaixo como deve estar o texto:

Na linha seguinte ao texto, digite === (3 sinais de igual) e na outra linha comece a digitar as

palavras que deseja retirar do texto. Após a ultima palavra, na linha seguinte digite novamente ===

Exemplo: blabla bla bla blabla bla palavra1 bla bla bla palavra2 bla bla blablabla === palavra1 palavra2 ===

O jogo será executado com este texto para que você possa conferi-lo. Ao terminar, confirme ou não a inserção do texto no banco.

Aspectos de programação em Logo O principal diferencial deste projeto com relação ao projeto “A palavra é...” são os recursos usados para trabalhar com arquivos. Dê uma olhada no procedimento Preparejogo para verificar como esse aspecto é utilizado. Consulte também a documentação do projeto “A palavra é...” para verificar como é feita a manipulação de listas e a definição dos procedimentos recursivos.

4 O arquivo deve estar no formato .txt puro, ou seja, sem formatação. Pode-se usar qualquer editor de texto para produzi-lo.

Page 86: Manual Logo 3.0

Estrutura geral do projeto

Jogo (inicia o jo

(respon

(verific

Troca(troca um e

outro em

Deu_branco (procedimento Inicial)

go)

(remopalavr

elem lemento por uma lista)

Limpatela (prepara a tela)

Carregabanco (inicializa o banco)

Inserirnovo (insere texto no

banco)

Rotonde (rotula um texto em um

Preparejogo (prepara o arquivo)

local específico)

Jogada sável pela tentativa)

(premesm

Tente a se a tentativa é correta )

Montajogo nta a frase retirando as as a serem escondidas)

Sublinhado para um sublinhado do

o tamanho da palavra)

Chamados por botões

Page 87: Manual Logo 3.0

Principais procedimentos5

Sugestões Que tal buscar na tentativa do usuário se ele digitou algo próximo de uma das palavras corretas (por exemplo, uma subseqüência da palavra, ou então se ele digitou a palavra mas cometeu algum erro de ortografia)? Tente implementar outros tipos de dicas: imagens e sons, por exemplo, associados a uma lacuna. Pode-se alimentar o banco de texto com os mais diversos assuntos, que podem ser usados em praticamente qualquer disciplina (exemplos: preenchimento de fatos históricos, personagens importantes, dados geográficos, conceitos físicos, exercícios de línguas, entre outros).

5 Destaque para o procedimento que difere dos demais encontrados em “A palavra é...”. Recomendamos a consulta da documentação do referido projeto.

aprenda Preparejogo :nomearq ;lê o texto do arquivo fechetodosarq ;fecha eventuais arquivos abertos abraparaler :nomearq ;abre o arquivo para leitura mudeleitura :nomearq ;muda o modo de leitura para o arquivo ;agora vamos ler... atr "l leial enquanto [& não éelemento "=== :l não éfimarq]

[atr "jfrase sentença :jfrase :l atr "l leial] enquanto [não éfimarq]

[atr "l leial se meuéelem meupri :l :jfrase [atr "jpal jf :l :jpal]] mudeleitura [ ] ;volta o modo de leitura para o teclado fechearq :nomearq ;fecha o arquivo ;(...) fim

Page 88: Manual Logo 3.0

Fuja: calorias à vista! Nome do arquivo: Calorias_a_vista.lgo Comando para executar: Refeição

Apresentação Foi-se o tempo em que arroz, feijão, bife, batatinha frita e salada era a nossa refeição "quase" diária. Embora os nutricionistas continuem afirmando que é uma ótima refeição, quem é que pode comer uma comidinha caseira todos os dias? Cada vez mais os fast foods entram em nossas vidas. Agora temos que nos preocupar com nossas necessidades nutricionais e aprender mais sobre o assunto. Bolar um cardápio implica conhecer nossos próprios hábitos (sedentarismo, vida de atleta, atleta de escritório etc.) e também conhecer o valor nutricional dos alimentos e os horários adequados para consumi-los. Integrando conceitos de biologia, nutrição, matemática, culinária, química (e até onde nossa imaginação puder levar – pense, por exemplo, nos cardápios exóticos dos mexicanos, indianos, chineses e por que eles consomem o que consomem; vem aí a história, geografia e muito mais), este programa é bem diversificado conceitualmente.

O que faz este programa? A partir das informações da pirâmide alimentar a respeito das quantidades recomendadas para o consumo diário, este projeto analisa as três refeições diárias do usuário – café da manhã, almoço e jantar – e aponta as mudanças necessárias para balancear sua refeição.

Na pirâmide, os alimentos estão agrupados primariamente de acordo com os nutrientes que eles fornecem, e não, simplesmente, pela quantidade de calorias. Para a maioria dos grupos alimentares, a unidade de porção é comparável à quantidade tipicamente relatada nas pesquisas de consumo

Page 89: Manual Logo 3.0

alimentar. Por exemplo: 1/2 xícara de vegetais cozidos ou 1 xícara de vegetais folhosos crus.

Assim, as porções são simples. Apenas para os grupos das carnes, as porções variam mais e são medidas em gramas.

Pirâmide alimentar

Instruções de uso Após carregar o arquivo Refeicao.lgo e clicar em Iniciar na tela de apresentação, uma caixa de questão irá aparecer solicitando que o usuário digite a quantidade de porções de cada grupo de alimentos (pães, vegetais, frutas, laticínios e carnes) em cada uma das três refeições diárias (café da manhã, almoço e jantar). O programa realiza então os cálculos do total de porções ingeridas por grupo de alimentos e imprime na tela se a refeição foi balanceada ou não (e em quais grupos e em que quantidade houve o excesso, se este existir).

Aspectos de programação Logo Neste projeto é introduzido o conceito de vetor em Logo: um vetor pode ser considerado uma espécie de lista, só que com um tamanho fixo que é predeterminado na sua inicialização e também com seus elementos indexados – o acesso é direto ao elemento. Os vetores são úteis neste projeto, pois o número de informações é fixo (são sempre cinco grupos alimentares, por exemplo) – obviamente também poderíamos ter usado listas na implementação: que tal você tentar fazer isso? Além de manipulação de vetores (procedimento entra_ref), algumas operações matemáticas simples são usadas no cálculo do total de porções

Page 90: Manual Logo 3.0

ingeridas em cada refeição e na comparação destes valores com os considerados ideais (procedimentos analisa_dados e soma_tudo ). Iterações usando enquanto são utilizadas na manipulação dos vetores (para preencher os valores, por exemplo (ver entra_ref). Variáveis locais também são utilizadas para auxiliar a manipulação dos dados dentro de um determinado procedimento.

Estrutura geral do projeto

Refeição (procedimento inicial)

Analisa_dados (consumo por categoria)

Soma_tudo (soma todos os valores)

Resultado (resultado final)

Entra_ref (entrada dos dados)

Testa_entrada (testa a coerência da

entrada)

(m

(escreve m

Msg_erro ensagem de erro)

Esctela e na Janela Gráfica uda a “linha”)

Page 91: Manual Logo 3.0

Principais procedimentos

aprenda Refeição ;procedimento inicial ;;;;;;;;;;;;;;;; ;entrada dos dados... local "caf atr "caf entra_ref [Café da Manhã] local "alm atr "alm entra_ref [Almoço] local "jan atr "jan entra_ref [Janta] ;;;;;;;;;;;;;;;; Resultado Soma_tudo Analisa_dados :caf ~

Analisa_dados :alm Analisa_dados :jan fim

aprenda Resultado :revalores consumidos natabela e verifica se eatr "valores [11 4.5 3 (...) senão émenor elemen

elemento 1 :r[escestádife:ref_:valoquan

[Esctela [Rem relação ao grup(...) fim

aprenda Analisa_dados :ref ;analisa a lista com ;uma refeição devolve um vetor com os ;consumos de cada categoria

local "vetor_valores atr "vetor_valores {0 0 0 0 0} local "i atr "i 1 ;percorrendo o vetor e atribuindo valores aos ;elementos enquanto [não émaior :i numelem :ref] ~

[atribuaelemvetor :i :vetor_valores pri elemento :i :ref ~ atr "i :i + 1] envie :vetor_valores fim

aprenda Soma_tudo :cafe :almoco :janta ;dados os 3 vetores de quantidades, um para cada refeição, soma os três e devolve o vetor com os valores de todas as refeições do dia local "vetsoma atr "vetsoma {0 0 0 0 0} local "i atr "i 1 enquanto [não émaior :i 5] [ ~

stribuaelemvetor :i :vetsoma (soma ~ elemento :i :cafe elemento :i :almoco ~ elemento :i :janta) atr "i :i + 1]

envie :vetsoma fim

f_dia ;compara os s refeições com uma

stá ou não de acordo 3 190]

to 1 :valores ~ ef_dia tela (sentença [Você excedendo em ] ~ rença elemento 1 ~ dia elemento 1 ~

res [porções a tidade de pães!] ) ] ~ efeição Balanceada o de pães.]

Page 92: Manual Logo 3.0

Sugestões

Quer saber quantas calorias está ingerindo por dia? Então pesquise sobre as calorias fornecidas por cada um dos diferentes tipos de alimentos que constam na pirâmide e depois calcule o total de calorias consumidas durante as três refeições do dia. Que tal diferenciar as dietas de acordo com a idade e o sexo do usuário? Você também pode mostrar os resultados da dieta que o usuário forneceu, por meio de gráficos na tela (em vez de texto somente – veja o exemplo “barrasobe, barradesce”), comparando as informações fornecidas por ele com as que constam na pirâmide. Referência Projeto: Guia da pirâmide alimentar usando Logo / Luciana Alivim Santos Romani, Sabine Sirimarco Gomes, in http://www.cnptia.embrapa.br/~luciana/disciplinas/mo642/proj_logo.html

Page 93: Manual Logo 3.0

De AA a aa, que bicho vai dar? Nome do arquivo: Coelhos.lgo Comando para executar: Coelhos

Apresentação A genética tem sido alvo de muitas discussões na atualidade. Quem não ouviu falar da Srta. Dolly? Ela e seu criador ganharam páginas e páginas nos jornais do mundo inteiro. Porém, para entender como a Engenharia Genética chegou a esse ponto, é preciso conhecer alguns conceitos elementares. Neste projeto, aproveitamos o "dom natural" dos coelhos para a procriação para explorar algumas dessas noções. Tomando essa espécie de mamífero como exemplo, pode-se produzir diferentes tipos de cruzamento para aprender um pouco mais sobre como funciona a famosa Lei de Mendel. Noções como fenótipo/ genótipo, recessivo/dominante podem ser exploradas neste programa computacional. Esta discussão remete a outros assuntos do maior interesse: as influências socioculturais e geográficas que incidem no desenvolvimento da vida animal (inclusive sobre as nossas vidas), as mutações genéticas, as condições ambientais do planeta etc. Por meio de um programa de simulação feito em Logo, pode-se mexer à vontade nos parâmetros do programa computacional com o objetivo de produzir os mais loucos resultados e analisá-los. Este projeto favorece o estabelecimento de diversas relações que interferem no fenômeno em si a um só tempo. Trata-se de uma boa maneira de entender a vida.

O que faz este programa? Este programa simula a transmissão de características genéticas até a 2ª geração de coelhos, como, por exemplo, a cor dos olhos [claros (aa) ou escuros (Ax)] e a cor da pele [albina (cc) ou aguti (Cx)]. No cruzamento de um casal, para cada filho sorteia-se um gene do pai e um da

Page 94: Manual Logo 3.0

mãe, formando então a característica do filho. Deve-se lembrar que as duas características (cor dos olhos e da pele) são independentes.

Instruções de uso Após carregar o arquivo Coelhos.lgo e clicar em Iniciar na tela de apresentação, duas janelas serão apresentadas. Deve-se então escolher as características do casal 1 (cor dos olhos e tipo de pêlo) em uma janela e do casal do 2 na outra. Então, a partir de um painel com botões, pode-se cruzar a 1ª geração (faça isso várias vezes para ver as diferentes possibilidades), a 2ª geração ou até mesmo ir mudando as características de um dos casais e verificando o que ocorre. O resultado apresentado na tela é composto pelo fenótipo e abaixo dele pelo genótipo. Aspectos de programação Logo

Neste projeto, pode-se destacar o conceito de iterações (comando repita) e também operações de manipulação de listas e palavras. O uso do comando repita (para realizar iterações) em conjunto com a operação cv (conte-vezes – retorna o número da repetição que está sendo executada) pode ser observado no procedimento Cruzar. Destaca-se o procedimento Juntapalavra, no qual, dadas 2 palavras, monta-se uma terceira, formada por uma sílaba da primeira (sorteada) e uma sílaba da segunda (também sorteada) e esta palavra será usada no cruzamento dos coelhos – um cromossomo do pai e um da mãe. Elementos de interface podem ser encontrados no procedimento Centrodecontrole1.

Page 95: Manual Logo 3.0

Estrutura geral do projeto

Desenhacoelho (carrega o bitmap

correspondente do coelho)

Fenótipopelo (retorna o fenótipo do

pelo do coelho)

Coelhos (procedimento Inicial)

Centrodecontrole1 (botões de controle)

Cruzar (números)

Cruzar2 (operações)

Casal1 (configura genótipo)

Casal2 (configura genótipo)

Filhos1 (filhos casal1)

Filhos2 (filhos casal2)

Filhos3 (filhos 2 geração)

Juntapalavra (dadas 2 sílabas monta uma palavra

Sorteiasílaba (sorteia uma sílaba de uma palavra)

Chamados por botões

Fenótipoolhos (retorna o fenótipo dos

olhos do coelho)

Chamados por botões

Page 96: Manual Logo 3.0

Principais procedimentos

aprenda Coelhos ;procedimento inicial atr "1ger "falso atr "2ger "falso tat dt un Centrodecontrole1 ;configuração dos casais Casal1 Casal2 fim

aprenda Centrodecontrole1 ;janela central de controle criejanela "main "centrocontrole1 [Coelhos e Genética] 40 40 120 150 criebotão "centrocontrole1 "btcruzar1 [Cruzar - 1a Geração] 10 10 95 20 [Cruzar] criebotão "centrocontrole1 "btcruzar2 [Cruzar - 2a Geração] 10 35 95 20 [Cruzar2] criebotão "centrocontrole1 "btmudacasal1 [Mudar Genótipo do Casal 1] 10 60 95 20 [Casal1 se :1ger [Cruzar]] criebotão "centrocontrole1 "btmudacasal2 [Mudar Genótipo do Casal 2] 10 85 95 20 [Casal2 se :1ger [Cruzar]] criebotão "centrocontrole1 "btfecha [Fechar esta janela] 10 110 9520 [apaguejanela "centrocontrole1] fim

aprenda Cruzar ;cruza a primeira geração de coelhos ;(... trechos principais) ;prepara os filhos do casal 1 Filhos1 6 :p1pelo :p1olhos :m1pelo :m1olhos ;prepara os filhos do casal 2 Filhos2 6 :p2pelo :p2olhos :m2pelo :m2olhos ;desenha os filhos na tela repita 3 [Desenhacoelho Fenótipopelo elemento cv :gpfilho1 Fenótipoolhos elemento cv :gofilho1 soma cv*80 -410 -75 mudexy soma cv*85 -410 -75 rotule lista elemento cv :gpfilho1 elemento cv :gofilho1 ] fim

aprenda Filhos1 :cruzamentos :ppai :opai :pmãe :omãe ;filhos casal1 atr "gpfilho1 [ ] ;pelo - genótipo atr "gofilho1 [ ] ;olhos - genótipo repita :cruzamentos [atr "gpfilho1 ~

jf juntapalavra :ppai :pmãe :gpfilho1] repita :cruzamentos [atr "gofilho1 ~

jf juntapalavra :opai :omãe :gofilho1] fim

aprenda Desenhacoelho :pelo :olho :px :py ;desenha o coelho... un mudexy :px :py

se(:pelo = "Aguti)[senão(:olho = "Claros) [carreguebitmap “cagucla.bmp] [carreguebitmap "caguesc.bmp]]

se(:pelo = "Albino)[senão(:olho = "Claros) [carreguebitmap "calbcla.bmp] [carreguebitmap "calbesc.bmp]]

fim

aprenda Juntapalavra :palavra1 :palavra2 ;dadas 2 palavras, monta uma terceira ;formada por uma sílaba da primeira e uma ;sílaba da segunda ;;;;;;;;;;;;;;;;;; ;sorteia uma ordem para executar(sortear ;primeiro da pal 1 e depoisda 2 e vice-versa) senão (sorteienúmero 2)=0 ~

[envie lista sorteiasílaba :palavra1 sorteiasílaba :palavra2] ~ [envie lista sorteiasílaba :palavra2 sorteiasílaba :palavra1]

aprenda Fenótipopelo :genótipo ;dado o genótipo, retorna o fenótipo senão (ou (não émaior ascii primeiro :genótipo ascii "Z) (não émaior ascii último:genótipo ascii "Z ))

[envie "Aguti] [envie "Albino]

fim

Page 97: Manual Logo 3.0

Sugestões Será que se aplicarmos as regras da probabilidade obteremos resultados mais precisos do que no caso de sortearmos os cruzamentos? Tentar fazer isso e observar os resultados pode ajudar a compreender melhor os fenômenos que ocorrem. Que tal estudar e inserir características como hemofilia e polidactilia, que se manifestam só em pessoas do sexo masculino? Você já pensou como é sua árvore genealógica? Que tal pesquisar com seus pais e avós características como cor dos olhos e tentar simular sua família? Observe em seus pais algumas características fenotípicas como cor dos olhos, do cabelo e da pele e verifique como seriam seus possíveis irmãos (se você tem irmãos, as características fenotípicas coincidem com as obtidas em seu programa?). É possível até tentar prever que cor de olhos terão seus filhos (caso você já não os tenha).

Conexão tartaruga

Nome do arquivo: Conexao_tat.lgo Comando para executar: Conexao_tat

Apresentação A tônica do momento é trabalhar colaborativamente via rede. Você já tentou? Consegue dividir e discutir suas idéias com um parceiro? O trabalho em equipe tem sido bastante incentivado nos últimos tempos, ainda mais agora que a web pode encurtar a distância entre as pessoas. Quer experimentar? Aventure-se! O SuperLogo dispõe de recursos para o trabalho colaborativo. Agora é possível desenvolver um mesmo projeto em tempo real, tirar dúvidas e palpitar no trabalho alheio. Assim, pode-se comparar diferentes formas de resolução de um mesmo projeto, incorporar aos seus programa procedimentos de outros usuários, aumentando em muito as possibilidades de trabalho com o Logo.

Page 98: Manual Logo 3.0

O que faz este programa? Este programa torna possível a conexão de dois computadores via rede (Internet, por exemplo) e a realização de uma sessão de bate-papo em conjunto com a execução de comandos em Logo na máquina remota. Também é possível, por meio do procedimento exporta_proc, exportar pela rede um procedimento da máquina local para a máquina remota (esse procedimento passa então a fazer parte do Editor de Procedimentos da outra máquina, permitindo ao outro usuário executá-lo, editá-lo, salvá-lo etc.).

Instruções de uso Após carregar o arquivo Conexao_tat.lgo e clicar em Iniciar na tela de apresentação, uma caixa de questão irá aparecer solicitando que você digite o nome da máquina com a qual deseja se conectar. Será então exibida outra caixa de questão solicitando que você digite seu nome ou apelido (assim você será identificado de maneira mais simples na sessão). Depois, uma caixa de mensagem solicitará que você (e o outro usuário em sua máquina remota) pressionem Ok quando as duas máquinas estiverem prontas6 . A partir de agora a conexão está estabelecida e é possível conversar com o outro usuário por meio de bate-papo (chat) ou então enviar comandos para serem executados na outra máquina, bastando para isso preceder a frase que contém os comandos do seguinte caractere: # . Exemplo: # pf 30 pd 90 (os espaços são importantes). Se quiser, você pode exportar um procedimento que esteja em seu Editor para o Editor da máquina remota. Basta digitar (na caixa de questão mesmo) Exporta_proc "nome_do_procedimento (sem o caractere #).

6 Você só deve pressionar Ok se essa mensagem também tiver aparecido para o outro usuário. Para ter certeza de que a mensagem chegou para o seu parceiro, pode-se, caso vocês não estejam no mesmo ambiente, usar outros programas (como ICQ ou IRC) para conversar e sincronizar a conexão.

Page 99: Manual Logo 3.0

Aspectos de programação em Logo Neste projeto, destaca-se os aspectos que possibilitam o desenvolvimento de aplicativos que usem os recursos de rede do SuperLogo (veja os procedimentos Par_na_rede e Envia_dados para exemplificar as primitivas de rede).

Estrutura geral do projeto

Conexao_tat (procedimento inicial)

Rede (inicia a rede)

(exp

(inPar_na_rede

(estabelece a conexão)

Exporta_proc porta um procedimento ara a máquina remota)

Envia_dados icia o modo bate-papo com Logo remoto)

Page 100: Manual Logo 3.0

Principais procedimentos

apren;(...) senão

[moest

[mose nã [mofim

aprenda Envia_dadapenas texto enquanto [1=1]

fim

aprenda Exporta_p senão édefinido :n atr "proc atr "np pa ignore env

esc sn :np:nome_pro

fim

aprenda Conexao_tat ;procedimento inicial Rede caixadequestão [Nome da Máquina]~

[Qual o nome da máquina para

aprenda Rede :maqremota ;máquina remota é o nome da outra máquina com a qual você deseja se conectar ;(...) Par_na_rede :maqremota ;estabelece a conexão Envia_dados ;inicia o modo bate-papo com logo remoto fim

da Par_na_rede :maqremota ;conecta com outra máquina na rede

aceiteconexão 5124 [] [faça recebavalorconexãoaceita] ~ strecaixamensagem "Situação [Pressione Ok quando as duas máquinas iverem prontas]] ~ strecaixamensagem "Situação [Falha na Recepção da Rede]] o ligueconexão :maqremota 5124 [esc [Pronto]] []~ strecaixamensagem "Situação [Falha no Envio da Rede]]

os ;bate-papo integrado com o Logo remoto comando precedido de # ou

[atr "texto caixadequestão [Bate papo - Digite aqui] [Comando precedido de # ou texto] ~

senão sãoiguais pri :texto "Exporta_proc [faça :texto] [ senão sãoiguais pri :texto "# ~

[faça sp :texto ignore envievalorconexão sp :texto] ~ [esc (sentença :nome [> ] :texto) ~ ignore envievalorconexão (lista "esc "sn "sn :nome [> ] :texto) ] ]

]

roc :nome_proc ;exporta um procedimento para a máquina remota ome_proc [ texto :nome_proc ~ l "" :nome_proc ignore envievalorconexão (lista "defina :np :proc) ~ ievalorconexão (lista "esc "sn :np [ definido pela máquina remota.]) ~ [ definido.] ] [esc sn sn [Não há nenhum procedimento com o nome ] c [ definido.]]

Page 101: Manual Logo 3.0

Sugestões Que tal modificar o projeto “OXO, OXO – deu empate!” para funcionar a distância? Com os comandos de rede é possível implementar programas que conversem com FTP, telnet ou mesmo sendmail. Pesquise sobre esses protocolos na rede e tente implementar um programa que envia um e-mail, por exemplo. Se estiver na Internet, use o SuperLogo em conjunto com outros programas que permitem video-conferência, por exemplo, para discutir com outras pessoas problemas e atividades a serem realizadas no SuperLogo.

Page 102: Manual Logo 3.0

Ajuda, projetos, exemplos, manual eletrônico e site Quase todos os comandos contidos no arquivo de ajuda possuem um exemplo de como utilizá-lo. Dê uma olhada nos exemplos em Ajuda. Após a execução do SuperLogo, os Projetos estão localizados em D:\Projetos (ou no diretório padrão do CD). O usuário deve abrir as extensões .lgo de cada projeto. Os Exemplos estão em D:\Exemplos. O manual eletrônico do Kit Educacional Multimídia SuperLogo é instalado automaticamente. Caso não consiga lê-lo, vá em D:\manual\manual.pdf. Consulte o site www.superlogo.com.br para ver o manual online, fazer downloads de novos projetos, saber as últimas novidades e contribuir com sugestões e programas. Suporte técnico Em caso de dúvidas ou esclarecimentos técnicos sobre qualquer um de nossos produtos, entre em contato com nosso serviço de suporte técnico, de segunda a sexta-feira, no horário das 08h30 às 18h00, pelo telefone (011) 3154-0305, pelo fax (011) 3154-0342 ou pelo e-mail: [email protected].

Page 103: Manual Logo 3.0

Ajuda do SuperLogo Copyright © 1989 Reitores da Universidade da Califórnia. Este software pode ser copiado e distribuído para fins educativos e de pesquisa, e não para fins lucrativos, desde que este copyright e esta declaração estejam incluídos em todas as cópias. Copyright © 1993-1997 George Mills. Este software pode ser copiado e distribuído para fins educativos e de pesquisa, e não para fins lucrativos, desde que este copyright e esta declaração estejam incluídos em todas as cópias. EDITOR DE PROCEDIMENTOS JANELA DE COMANDOS MENU INICIANDO E SAINDO DO SUPERLOGO SINTÁXE PRIMITIVAS PARA DADOS ESTRUTURADOS ENTRADA E SAÍDA ARITMÉTICA OPERAÇÕES LÓGICAS GRÁFICOS GERENCIADOR DA ÁREA DE TRABALHO ESTRUTURAS DE CONTROLE COMANDOS DE MACRO ERRO DE PROCESSAMENTO VARIÁVEIS ESPECIAIS COMANDOS DE AJUDA COMANDOS DE DIRETÓRIO FUNÇÕES DO WINDOWS FUNÇÕES DE BITMAPS REDE MULTIMÍDIA/MÍDIA/SOM ABREVIATURAS EDITOR DE PROCEDIMENTOS Quando você sai do Editor de Procedimentos, o SuperLogo carrega as definições revisadas e altera a área de trabalho de acordo com a nova configuração. A última ação de sair (e salvar) do editor é a que prevalece.

Page 104: Manual Logo 3.0

Verifique também se você realmente excluiu os procedimentos, listas de propriedades ou nomes. No editor, eles são apagados (veja Elimine) do ambiente de trabalho no momento em que você sai (e salva) a sessão de edição. Erros de edição Editando com a área de transferência Ajuda sensível a contexto Menu do Editor de Procedimentos Erros de edição Se um erro ocorrer enquanto você estiver editando, entre novament no Editor. Essa situação ocorre freqüentemente quando uma continuação “~” está perdida dentro da lista. Quando o editor recarrega, você é colocado no início da definição que provocou o erro. Verifique a janela de comando para obter uma dica sobre o problema ocorrido enquanto o editor carregava. Editando com a área de transferência O editor do SuperLogo e muitos controles suportam a área de transferência. A área de transferência é onde a maior parte dos aplicativos do Windows armazena os dados durante as operações de recortar e colar. Isso significa que quando você recorta um texto de um aplicativo, como o Bloco de Notas, ele pode ser copiado no editor do SuperLogo (e o inverso também ocorre). A Ajuda do Windows suporta a área de transferência. Isso significa que você pode copiar exemplos neste documento diretamente para o editor (veja o comando Ajuda). A Caixa de entrada também suporta a área de transferência. Somente uma linha de texto é suportada entre a caixa de entrada e a área de transferência. Observe que a caixa de entrada não tem um menu de edição semelhante ao editor. Você deve usar teclas de atalho para as ações desejadas (para recortar CTRL e X, para copiar CTRL e C, para colar CTRL e V). A Caixa de listagem de saída/retorno de comando também suporta a área de transferência. Isto significa que você pode converter o código que havia inserido no controlador em procedimento copiando o Controlador de Saída para a área de transferência e colando-o no editor. Ou selecionar o texto gerado e colá-lo em ouro aplicativo. Ajuda sensível a contexto

Page 105: Manual Logo 3.0

Tanto a caixa Editor quanto a Caixa de listagem de saída/retorno de comando do SuperLogo são compatíveis com Ajuda sensível a contexto. Se você selecionar uma palavra-chave (como PARAFRENTE) nesses locais (o clique duplo funciona melhor no editor) poderá solicitar que o SuperLogo pesquise-a sem precisar navegar pelo Menu Ajuda. Basta perguntar clicando com o botão direito do mouse (ou pressionando a tecla F1); as abreviações são admitidas. Veja também Ajuda sensível a contexto para recuperar a informação a partir do sistema de ajuda (como um código de exemplo) e você poder trabalhar com ela. Menu do Editor de Procedimentos O menu editor mostra como você se comunica com o editor para executar algumas tarefas. Menu Área de Trabalho Menu Editar Menu Pesquisar Menu Formatar Menu Testar Menu Ajuda Menu Área de Trabalho Comando Área de Trabalho Atualizar Comando Área de Trabalho Imprimir Comando Área de Trabalho Sair Comando Área de Trabalho Atualizar Atualiza o conteúdo do Editor de Procedimentos na Área de Trabalho (ou seja, as alterações feitas passam a valer sem a necessidade de Sair do Editor). Comando Área de Trabalho Imprimir Imprime o contéudo do Editor de Procedimentos. Comando Área de Trabalho Sair Sai do editor e exibe uma mensagem perguntando se você deseja salvar seu

Page 106: Manual Logo 3.0

trabalho no espaço de trabalho do SuperLogo. Quando você sai do editor, o SuperLogo carrega as novas definições e as modifica de acordo com o espaço de trabalho. Veja também Erros de edição. Menu Editar Comando Editar Desfazer Comando Editar Recortar Comando Editar Copiar Comando Editar Colar Comando Editar Limpar Comando Editar Limpar tudo Comando Editar Desfazer Desfaz a última operação de edição. Comando Editar Recortar Copia o texto selecionado para a área de transferência e o exclui. Veja também Editando com a área de transferência. Comando Editar Copiar Copia o texto selecionado para a área de transferência. Veja também Editando com a área de transferência. Comando Editar Colar Cola o texto na área de transferência de acordo com a posição do cursor. Se tiver algum texto selecionado, ele sera substituído pelo texto colado. Veja também Editando com a área de transferência. Comando Editar Limpar Exclui o texto selecionado. Comando Editar Limpar tudo

Page 107: Manual Logo 3.0

Exclui o texto todo. Menu Pesquisar Comando Pesquisar Localizar Comando Pesquisar Substituir Comando Pesquisar Próximo Comando Pesquisar Localizar Realiza a busca de uma palavra no texto contido no Editor de Procedimentos. Comando Pesquisar Substituir Realiza a busca e substituição de uma palavra por outra no texto contido no Editor de Procedimentos. Comando Pesquisar Próximo Tenta encontrar a próxima ocorrência da palavra pesquisada usado o comando Localizar do menu Pesquisar. Menu Formatar Comando Formatar Fonte Comando Formatar Fonte É possível alterar a fonte no Editor de Procedimentos selecionando o comando Fonte do menu Formatar e escolhendo a fonte desejada. A nova fonte será aplicada no texto inteiro, e não apenas no texto selecionado. A fonte escolhida permanecerá selecionada até que seja iniciada uma nova sessão do SuperLogo. Menu Testar Comando Teste

Page 108: Manual Logo 3.0

Comando Teste Você pode testar seu código selecionando uma seção do código e clicando em Teste no menu Testar (ou tecla de atalho <Ctrl>+<t>). Esta ação irá selecionar cada uma das linhas e enviá-las para execução na Janela de Comandos. Lembre-se de que se você selecionar código que possui variáveis ou outro conteúdo que precisa ser definido na seleção ou já definido no espaço de trabalho. Usar este recurso é a mesma coisa que digitar a seleção dentro da Janela de Comandos. Menu Ajuda Comando Ajuda Índice Comando Ajuda Editor Comando Ajuda Busca por Tópico Comando Ajuda Índice Apresenta a ajuda do SuperLogo. Veja também Ajuda sensível a contexto. Comando Ajuda Editor Apresenta a ajuda do Editor. Veja também Ajuda sensível a contexto. Comando Ajuda Busca por Tópico Pesquisa pelo tópico selecionado pelo mouse na linha on-line da ajuda.Veja também Ajuda sensível a contexto. JANELA DE COMANDOS A Janela de Comandos é onde você instrui o SuperLogo a fazer o que você deseja. A caixa mais importante da Janela de Comandos é a caixa de entrada, localizada à esquerda. Para obter informações sobre os diferentes controles, veja as caixas específicas abaixo.

Page 109: Manual Logo 3.0

Caixa de entrada Caixa de listagem saída/retorno de comando Botão Executar Botão Estado Botão Restaurar Janela Gráfica Botão Restaurar Janela Comandos Botão rastrear Botão terminar Botão reiniciar Botão passoapasso Botão Pausa Botão Parar Botão Tat Caixa de entrada A caixa de entrada está ligada à Caixa de listagem saída/retorno de comando e ao Botão executar. Você também pode editar o texto que está na caixa de entrada. Se o que estiver digitando não couber na caixa de entrada, ela rolará automaticamente. Uma vez digitado o comando, será necessário executá-lo. Para isso você pode teclar Enter ou clicar sobre o botão executar. Usando as setas para cima ou para baixo, você pode pular automaticamente para a Caixa de listagem saída/retorno de comando. Esse controle também suporta a Ajuda sensível a contexto e Editando com a área de transferência. Caixa de listagem saída/retorno de comando Na caixa de listagem saída/retorno de comando serão gravadas todas as entradas digitadas na Caixa de entrada. Você pode selecionar um comando clicando sobre a linha desejada ou usando as setas para cima ou para baixo. Se algo estiver fora do campo de visão, utilize a barra de rolagem. Quando você clica em uma linha, automaticamente ela é copiada para a caixa de entrada. Um duplo clique executará o que está sendo apontado. Esse controle também suporta Ajuda sensível a contexto e Editando com a área de transferência. Botão Executar O botão executar executa o que estiver na Caixa de entrada. Botão Estado Esse botão abre uma janela que mostra diversos parâmetros do SuperLogo no momento. Veja também os comandos Estado e Semestado.

Page 110: Manual Logo 3.0

Botão Restaurar Janela Gráfica Apaga a Janela Gráfica, restaurando todos os parâmetros da tartaruga (cor do lápis, espessura, cor de preenchimento) para o padrão. Botão Restaurar Janela de Comandos Apaga o conteúdo da caixa de listagem na Janela de Comandos. Botão Pausa Esse botão interrompe o SuperLogo e permite que você examine variáveis e faça alterações, entre outras coisas. Uma vez interrompida a execução por meio do botão pausa, o SuperLogo mostrará em que lugar você interrompeu. Para continuar você deverá digitar o comando Continue. Você também pode digitar um comando Pausa dentro do código para agir como um Ponto de Interrupção. Botão Parar Esse botão interrompe os procedimentos em execução. Botão Tat Apaga a tela gráfica, colocando a tartaruga na sua posição original , com direção 0 (norte). Veja comando Tartaruga. MENU O MENU é onde você executa as tarefas avançadas no SUPERLOGO, como o carregar um programa do SUPERLOGO, carregar uma imagem BITMAP, configurar uma impressora ou até mesmo ler um arquivo de ajuda. Veja o item Menu para obter mais informações. Menu arquivo Menu procedimento Menu modo de execução Menu bitmap Menu formatar Menu zoom Menu ajuda Menu arquivo

Page 111: Manual Logo 3.0

Comando novo arquivo Comando abrir arquivo Comando salvar arquivo Comando salvar arquivo como Comando salvar tudo Comando sair arquivo Comando novo arquivo Limpa todos os procedimentos correntes carregados na memória. Assemelha-se à inicialização de uma nova sessão. Comando abrir arquivo Permite carregar um arquivo do SuperLogo do disco para a memória e então este poderá ser executado ou editado. Veja também o comando Carregue. Comando salvar arquivo Permite salvar no disco tudo o que está na memória. Veja também o comando Salve. Comando salvar arquivo como Faz o mesmo que o Comando salvar arquivo, porém permite que seja digitado um novo nome para o arquivo. Comando salvar tudo Faz o mesmo que o Comando salvar arquivo mais o Comando salvar bitmap, ou seja, permite gravar a memória em um arquivo do SuperLogo e a imagem na tela em um arquivo bitmap. Comando sair arquivo Utilizado para finalizar o SuperLogo. Veja também o comando Sair. Menu procedimento Comando novo procedimento Comando editar procedimento Comando editar todos Comando apagar procedimento Comando apagar todos

Page 112: Manual Logo 3.0

Comando novo procedimento É utilizado para inserir um procedimento novo no Editor de Procedimentos. Será exibida uma janela do editor, onde poderá ser inserido o novo procedimento. Comando editar procedimento É utilizado para editar procedimentos que já estão carregados (ou que foram desenvolvidos) na memória. Você terá uma janela com todos os procedimentos existentes, onde poderá selecionar um deles para editar. Veja também o comando Edite. Comando editar todos É utilizado para editar procedimentos que já estão carregados (ou que foram desenvolvidos) na memória. O Editor de Procedimentos será mostrado e será então possível editar todos os procedimentos que estão na memória. Comando apagar procedimento Permite apagar os procedimentos que já estão carregados (ou que foram desenvolvidos) na memória. Você terá uma janela com todos os procedimentos existentes, na qual deverá selecionar o procedimento a apagar. Veja também o comando Elimine. Comando apagar todos Permite apagar todos os procedimentos que já estão carregados (ou que foram desenvolvidos) na memória. Veja também o comando Eltudo. Menu modo de execução Comando rastrear Comando passo-a-passo Comando rastrear O comando rastrear é usado para depuração de programas. Clique novamente para inibir o rastreamento. Você pode habilitar ou desabilitar o rastreamento mesmo enquanto estiver executando o SuperLogo. Observe que o comando rastrear funciona independentemente do que você está rastreando com o comando rastrear. Veja também os comandos Rastrear e Nãorastreie.

Page 113: Manual Logo 3.0

Comando passo-a-passo O comando passo-a-passo ativa um procedimento simples e direto para a depuração de seus programas. Clique novamente para desativar esse recurso. Você pode deixar essa ferramenta ativada ou desativada durante a execução do SuperLogo.Veja também os comandos Passoapasso e Nãopassoapasso. Menu bitmap O menu bitmap inclui comandos que permitem a você operar arquivos bitmap. Para maiores informações, veja o menu específico. Comando novo bitmap Comando abrir bitmap Comando salvar bitmap Comando salvar bitmap como Comando configurar página Comando imprimir bitmap Comando área ativa do bitmap Comando novo bitmap Esse comando limpa o trabalho feito no vídeo e cria um novo ambiente para as coisas novas que serão desenvolvidas. Comando carregar bitmap Esse comando permite que você leia uma imagem que está na pasta. O formato desse arquivo tem de seguir o padrão Bitmap do Windows (extensão .BMP). Você pode fazer com que esses arquivos interajam com outros aplicativos, como o Paint Brush. Observe que eles podem ser grandes e por isso levam algum tempo para carregar. Veja também o comando Carreguebitmap. Veja também a seção Usando cores. Comando salvar bitmap Permite que você salve uma gravura (imagem bitmap) do seu trabalho no disco do computador. Se sua imagem foi gerada com um programa SuperLogo, você não precisa salvá-la a menos que queira usá-la com outro aplicativo como Paint Brush ou similar. Veja também o comando Salvebitmap.

Page 114: Manual Logo 3.0

O formato do arquivo a ser salvo deve seguir o padrão Bitmap do Windows (extensão .BMP). Você pode fazer com que esses arquivos interajam com outros aplicativos, como o Paint Brush. Observe que eles podem ser grandes e por isso levam algum tempo para carregar. Veja também Comando área ativa do bitmap. Comando salvar bitmap como Faz o mesmo que o Comando salvar bitmap, porém permite que seja digitado um novo nome para o arquivo. Comando configurar página Esse comando permite configurar a página antes de efetuar a impressão. Comando imprimir bitmap Permite imprimir o trabalho (tela gráfica do SuperLogo) na impressora selecionada. Comando área ativa do bitmap Permite selecionar a área de trabalho a imprimir ou salvar. A proposta inicial dessa opção é performance e espaço. Você não precisa ficar esperando o software construir uma imagem por inteiro. Ele ocupa menos tempo e menos memória para imprimir e menos espaço em disco para salvar uma imagem parcialmente. Como um efeito colateral, você pode definir onde sua imagem termina na página selelecionando diferentes extensões Você também pode definir a área ativa com o comando Selecioneáreaativa do SuperLogo. Menu formatar O menu formatar permite que você altere algumas das características do SuperLogo. Comando formatar tamanho do lápis Comando formatar fonte da Janela Gráfica Comando formatar fonte da Janela de Comandos Comando formatar cor do lápis Comando formatar cor de preenchimento Comando formatar cor do fundo

Page 115: Manual Logo 3.0

Comando formatar tamanho do lápis Esse comando permite que você selecione o tamanho do lápis com o qual a tartaruga irá desenhar. Você também pode selecionar o tamanho do lápis usando o comando Mudeespessuradolápis e obtê-lo com o comando Espessuradolápis. Comando formatar fonte da Janela Gráfica Esse comando define a fonte com a qual o comando Rotule irá escrever. A fonte também pode ser definida com o comando Mudefontejanelagráfica e ser obtida com o comando Fontejanelagráfica. Comando formatar fonte da Janela de Comandos Esse comando define a fonte que será utilizada na Janela de Comandos do SuperLogo. Comando formatar cor do lápis Esse comando define a cor do lápis que a tartaruga irá usar para escrever. A cor do lápis também pode ser definida com o comando Mudecl e obtida com o comando Cl. Comando formatar cor de preenchimento Esse comando define a cor de preenchimento com a qual a tartaruga irá pintar (comando Pinte). A cor de preenchimento também pode ser definida com o comando Mudecp e obtida com o comando Cp. Comando formatar cor do fundo Esse comando define a cor do fundo da tela. A cor do fundo também pode ser definida com o comando Mudecf e obtida com o comando Cf. Menu zoom O menu zoom permite que você restaure o fator de zoom (aproximação ou distanciamento da imagem). Comando mais zoom Comando menos zoom Comando zoom normal Comando mais zoom Esse comando permite que você aumente o zoom. Você também pode selecionar o fator de zoom utilizando o comando Zoom.

Page 116: Manual Logo 3.0

Comando menos zoom Esse comando permite que você diminua o zoom. Você também pode selecionar o fator de zoom utilizando o comando Zoom. Comando zoom normal Esse comando permite que você restaure o zoom. Você também pode selecionar o fator de zoom utilizando o comando Zoom. Menu ajuda O menu ajuda permite que você aprenda mais sobre o SuperLogo. Para obter mais informações, selecione o nome do comando desejado no menu Ajuda. Veja também o comando Ajuda. Comando índice da ajuda Comando mci ajuda Comando usando a ajuda Comando demo Comando comandos básicos Comando notas adicionais Comando sobre o SuperLogo Comando índice da ajuda Este comando abre o índice da ajuda do SuperLogo. Comando mci ajuda Este comando abre o arquivo de ajuda Mci. Ele explica a sintaxe dos argumentos para o comando Mci. (multimídia) Comando usando a ajuda Este comando abre um índice com tópicos explicando o funcionamento da ajuda.. Comando demo Executa o programa DEMO a partir da biblioteca do SuperLogo. Comando comandos básicos É possível escolher alguns comandos básicos do SuperLogo e executá-los como exemplo.

Page 117: Manual Logo 3.0

Comando notas adicionais Utiliza o Bloco de Notas para exibir as notas de versão para a versão do SuperLogo. Comando sobre Oferece alguns detalhes sobre o SuperLogo, como sua versão. INICIANDO E SAINDO DO SUPERLOGO Para iniciar o programa, basta clicar no ícone SuperLogo. Para sair, digite o comando Sair. Ou selecione Comando sair arquivo. Se você chamar um procedimento que não estava definido, o SuperLogo primeiro verifica em um arquivo no diretório atual chamado nome_proc.lgo, onde "nome_proc" é o nome do procedimento em letras minúsculas. Se esse arquivo existir, o SuperLogo o carrega. Se o procedimento solicitado ainda estiver indefinido, ou se não há nenhum arquivos desses, o SuperLogo verifica no diretório de biblioteca se existe um arquivo chamado nome_proc (sem a extensão ".LGO") e, caso exista, o carrega. Se nenhum arquivo contiver uma definição para o procedimento, então o SuperLogo envia uma mensagem de erro. SINTÁXE Em nomes de procedimentos, variáveis e listas de propriedades são diferenciadas letras maiúsculas de minúsculas. Dentro de colchetes, as palavras são delimitadas apenas por espaços e colchetes. [2+3] é uma lista que contém uma palavra. Depois de um sinal de aspas fora dos colchetes, uma palavra é imediatamente delimitada por um espaço, um colchete ou um parêntese. Uma linha (uma linha de instrução ou uma que é lida por Leialista ou Leiapalavra) pode ser prosseguida na linha seguinte se seu último caractere é um til (~). Leiapalavra preserva o til e a última linha; Leialista, não. Um ponto-e-vírgula inicia um comentário em uma linha de estrutura. O SuperLogo ignora os caracteres a partir do ponto-e-vírgula até o final da linha. Um til como o último caractere indica que ainda há uma linha de continuação, mas não uma continuação do comentário.

Page 118: Manual Logo 3.0

Um ponto-e-vírgula não possui nenhum significado especial em linhas de dados lidas por Leiapalavra ou Leialista, mas, como uma linha, pode ser analisada novamente usando Runparse e, assim, os comentários serão reconhecidos. Se for digitado um til no final para a continuação da linha, o SuperLogo interpretará o til como um caractere de prompt para a linha de exibição. Para adicionar um outro caractere delimitador (incluindo um ponto-e-vírgula ou um til) em uma palavra, coloque uma barra invertida (\) antes dela. Se o último caractere da linha é uma barra invertida, então o caractere da nova linha que sucede a barra invertida será parte da última palavra na linha e a linha continua na linha seguinte. Para adicionar uma barra invertida em uma palavra, use \\. Tudo isso aplica-se às linhas de dados lidas como Leiapalavra ou Leialista, assim como para as linhas de instrução. No SuperLogo não há nenhum "caractere de prompt" nem <CR> (retorno de carro - carriage return) passado da caixa de controle de entrada da Janela de Comandos. Porém, o SuperLogo possui o caractere de comando "\n", que pode ser interpretado como um <CR>. Exemplo: escreva "Olá\ncomo\nvai\nvocê Olá como vai você Isso irá funcionar em um procedimento ou em uma caixa de controle de entrada. Uma notação alternativa para incluir outros caracteres de delimitação em palavras é colocar um grupo de caracteres dentro de duas barras verticais (|). Todos os caracteres colocados dentro de barras verticais são interpretados como se fossem letras. Na leitura dos dados com Leiapalavra, as barras verticais são preservadas na palavra resultante. Na leitura dos dados com Leialista (ou o resultado a partir de Parse ou Runparse de uma palavra), as barras verticais não aparecem explicitamente; todos os caracteres potencialmente delimitadores (incluindo espaços, colchetes, parênteses e operadores de infixos) aparecem como se tivessem sido inseridos com uma barra invertida. Ainda é possível usar uma barra invertida dentro das barras verticais, os únicos caracteres que

Page 119: Manual Logo 3.0

exigem o uso da barra invertida neste contexto são a própria barra invertida e a barra vertical. Os caracteres inseridos entre barras verticais são sempre especiais, mesmo que a palavra ou lista que os contém seja posteriormente interpretada com Parse ou Runparse. Podemos afirmar o mesmo para um caractere inserido após uma barra invertida, exceto quando uma palavra que está entre aspas contendo um caractere entre barras invertidas é reinterpretado, o caractere entre barras invertidas perde sua qualidade especial e age, conseqüentemente, como se fosse digitado normalmente. Essa distinção é importante somente se você está construindo uma expressão do Logo em partes, para ser feita posteriormente, e quer usar parênteses. Por exemplo: ESCREVA FAÇA (SN " \ ( 2 "+ 3 "\) ) irá escrever 5, mas FAÇA (SN "ATRIBUA ""| ( | 2) irá criar uma variável cujo nome é um parênteses de abertura. (Cada exemplo pode falhar se as barras verticais e as barras invertidas estiverem trocadas.) PRIMITIVAS PARA DADOS ESTRUTURADOS Construtores Seletores Modificadores Predicados (Dados) Operações Construtores Palavra Lista Sentença Juntenoinício Juntenofim Vetor Matriz Listaparavetor

Page 120: Manual Logo 3.0

Vetorparalista Combine Inverte Gerenome Palavra Palavra palavra1 palavra2 pal palavra1 palavra2

Retorna uma palavra composta pela concatenação de palavra1 e palavra2. Se houver mais de dois parâmetros de entrada, deve-se usar parênteses. Exemplo:

esc pal "LO "GO LOGO esc (pal "a "pren "der) aprender

Lista lista objeto1 objeto2

Retorna uma lista constituída por objeto1 e objeto2. Se houver mais de dois parâmetros de entrada deve-se usar parênteses. Exemplo:

mostre lista "a "b [a b] coloque [a b] "letras coloque lista :letras "c "letras mostre :letras [[a b] c] mostre (lista "L "O "G "O) [L O G O] mostre lista [1 2 3] [a b c]

Page 121: Manual Logo 3.0

[[1 2 3][a b c]] Sentença sentença objeto1 objeto2 sn objeto1 objeto2

Retorna uma lista formada pela concatenação de objeto1 e objeto2. Se houver mais de dois parâmetros de entrada deve-se usar parênteses. Exemplo:

mostre sn "cachorro "quente [cachorro quente] coloque (sn [criar] "com "LOGO) "frase esc :frase criar com LOGO

Juntenoinício juntenoinício objeto lista ji objeto lista

Retorna a lista do parâmetro de entrada acrescida do objeto no seu início. Exemplo:

esc ji "l [o g o] l o g o mostre ji "1 [2 3 4] [1 2 3 4]

Juntenofim juntenofim objeto lista jf objeto lista

Retorna a lista do parâmetro de entrada acrescida do objeto no seu final.

Page 122: Manual Logo 3.0

Exemplo: coloque jf "u [a e i o] "vogais esc :vogais a e i o u mostre jf "5[1 2 3 4] [1 2 3 4 5]

Vetor vetor número (vetor número origem)

Retorna um vetor de número elementos. O primeiro parâmetro é um número inteiro e positivo que corresponde ao tamanho do vetor. Uma vez definido um vetor, seus elementos são listas vazias até que sejam substituídos por outros elementos por meio do comando Atribuaelemvetor.

O segundo parâmetro é um número inteiro que corresponde ao valor de origem do vetor. A partir deste valor serão indexadas todas as demais posições do vetor. O primeiro elemento do vetor é o elemento1, a menos que a origem seja dada na entrada (segundo parâmetro); neste caso, o primeiro elemento do vetor terá este número como índice (geralmente 0 é usado como origem). Exemplo:

atribua "meuvetor (vetor 3 0) mostre :meuvetor {[] [] []} atribuaelemvetor 2 :meuvetor 1 atribuaelemvetor 1 :meuvetor 2 atribuaelemvetor 0 :meuvetor 3 mostre :meuvetor {3 2 1} Uma outra forma de inicializar o vetor do exemplo acima (utilizando o símbolo @) é: atr "meuvetor {3 2 1}@0 mostre :meuvetor {3 2 1}

Page 123: Manual Logo 3.0

Matriz matriz lista (matriz lista origem)

Retorna uma matriz (vetor multidimensional). O primeiro parâmetro é uma lista formada de um ou mais números inteiros positivos que definem o tamanho desta matriz. Para uma matriz bidimensional, o primeiro elemento da lista refere-se ao número de linhas e o segundo elemento refere-se ao número de colunas. O segundo parâmetro é um número inteiro que corresponde ao valor de origem da matriz. A partir deste valor serão indexadas todas as demais posições da matriz. Caso o segundo parâmetro seja omitido, o primeiro elemento da matriz bidimensional será o elemento [1 1]. Exemplo:

atribua "jogo (matriz [2 3]0) atribuaelmatriz [0 0] :jogo 1 atribuaelmatriz [0 1] :jogo 2 atribuaelmatriz [0 2] :jogo 3 atribuaelmatriz [1 0] :jogo 4 atribuaelmatriz [1 1] :jogo 5 atribuaelmatriz [1 2] :jogo 6 mostre :jogo {{1 2 3}{4 5 6}} Outra forma de se definir uma matriz atribuindo valor: atribua "jogo {{o x x}{x o x}{x o o}}@0 mostre :jogo {{o x x}{x o x}{x o o}}

Listaparavetor listaparavetor lista lpv lista (listaparavetor lista origem) (lpv lista origem)

Retorna um vetor de mesmo tamanho e com os mesmos elementos da lista dada como parâmetro de entrada. O segundo parâmetro é um número

Page 124: Manual Logo 3.0

inteiro que corresponde ao valor de origem do vetor a partir do qual todas as demais posições serão indexadas. Caso o segundo parâmetro seja omitido, o primeiro elemento do vetor será o elemento 1. Exemplo:

mostre listaparavetor [1 2 3] {1 2 3}

Vetorparalista vetorparalista vetor vpl vetor

Retorna uma lista formada pelos mesmos elementos do vetor dado como parâmetro de entrada. Exemplo:

mostre vetorparalista {1 2 3} [1 2 3] mostre vetorparalista {azul amarelo verde} [azul amarelo verde]

Combine combine objeto1 objeto2

Se o segundo parâmetro for uma palavra, retorna o mesmo resultado da operação Palavra. Se o segundo parâmetro for uma lista, retorna o mesmo resultado da operação Juntenoinício. Exemplo:

esc combine "a "b ab mostre combine "a [b] [a b] esc combine "12 "34

Page 125: Manual Logo 3.0

1234 mostre combine [a] [12 34] [[a] 12 34]

Inverte inverte objeto

Retorna uma lista invertida ou seja, uma lista com os mesmos elementos do objeto de entrada, porém em ordem invertida. Exemplo:

mostre inverte[1 2 3] [3 2 1] mostre inverte "abc [c b a]

Gerenome gerenome gn

Retorna nomes de g1 a gn dependendo do número de vezes que é executado Exemplo:

atribua gerenome 1 mostre :g1 1 atribua gerenome "olá mostre :g2 olá

Seletores Primeiro Primeiros Último

Page 126: Manual Logo 3.0

Semprimeiro Semprimeiros Semúltimo Elemento Elementomatriz Sorteieelemento Retire Retiredup Primeiro primeiro objeto pri objeto

Retorna o primeiro elemento de objeto. Se objeto for uma palavra, retorna o primeiro caracter da palavra. Se objeto for uma lista, retorna o primeiro elemento da lista. Se objeto for um vetor, retorna a origem do vetor (isto é, o índice do primeiro elemento do vetor). Exemplo:

esc pri [a b c d] a esc pri "LOGO L esc pri [[L][O][G][O]] L esc pri {a b c} 1 esc pri {a b c}@0 0

Primeiros primeiros [lista1 lista2 ... listan] pris [lista1 lista2 ... listan]

Retorna uma lista contendo o Primeiro elemento de cada lista de entrada

Page 127: Manual Logo 3.0

(lista1, lista2,..., listan). Se algum elemento das listas de entrada for vazio, retornará erro. Exemplo:

mostre primeiros [[1 2 3][a b c ]] [1 a]

Último último objeto ult objeto

Retorna o último elemento do objeto. Se objeto for uma palavra, retorna o último caractere da palavra. Se objeto for uma lista, retorna o último elemento da lista.

esc último [1 2 3] 3 esc ult "aqui i

Semprimeiro semprimeiro objeto sp objeto

Retorna objeto sem seu primeiro elemento. Exemplo:

esc sp "LOGO OGO coloque [1 2 3] "x esc sp :x 2 3

Semprimeiros semprimeiros lista1 lista2 .... listan sps lista1 lista2 .... listan

Page 128: Manual Logo 3.0

Retorna uma lista contendo as listas de entrada sem seus primeiros elementos. Se algum dos parâmetros de entrada for vazio, retornará uma mensagem de erro. Exemplo:

mostre sps [[1 2 3][a b c]] [[2 3][b c] mostre sps [[abc][51 43]] [[][43]]

Semúltimo semúltimo objeto su objeto

Retorna objeto sem seu último elemento. Exemplo:

esc su "LOGO LOG coloque [1 2 3] "x esc su :x 1 2

Elemento elemento número objeto elem número objeto

Retorna o elemento de posição número no objeto. Se objeto for uma palavra, retorna caractere que está na posição número da palavra. Se objeto for uma lista, retorna o elemento que está na posição número da lista. Se objeto for um vetor, retorna o elemento que está na posição número do vetor. O número inicial para listas e palavras é 1; o número inicial para vetores é especificado quando o vetor é criado. Exemplo:

esc elemento 4 "praia i

Page 129: Manual Logo 3.0

esc elemento 3 [rosa cravo violeta] violeta atr "x [azul verde] esc elemento 2 :x verde esc elemento 2 {janeiro fevereiro março}@0 março

Elementomatriz elementomatriz lista matriz elmatriz lista matriz

Retorna o elemento lista de matriz. A entrada lista deve ser formada de um ou mais números inteiros positivos, onde o primeiro elemento indica a linha e o segundo elemento indica a coluna. O segundo parâmetro é a definição de uma matriz multi-dimensional onde o elemento será pesquisado.

mostre elementomatriz [2 2] {{0 1} {2 3}} 3 mostre elementomatriz [2] {{0 5 1} {2 5 3}} {2 5 3}

Sorteieelemento sorteielemento objeto sortel objeto

Retorna aleatoriamente um elemento de objeto, o qual pode ser uma lista ou uma palavra. Exemplo :

mostre sorteieelemento [1 2 3] 2

Page 130: Manual Logo 3.0

mostre sorteieelemento [1 2 3] 3 mostre sortel "cola o mostre sortel "cola l

Retire retire objeto1 objeto2 (procedimento de biblioteca)

Retorna objeto2 após retirar o objeto1 especificado, sem distinção de letras maiúsculas e/ou minúsculas. Exemplo:

mostre retire "b [a b c b] [a c] mostre retire "e "Olá Olá

Retiredup retiredup objeto (procedimento de biblioteca)

Retorna o objeto dado após retirar a(s) repetição(ões) do(s) elemento(s) duplicado(s), sem distinção de letras maiúsculas e/ou minúsculas. O elemento duplicado que permanece na saída da operação é sempre o que estiver ocupando a posição mais à direita do parâmetro. Exemplo:

mostre retiredup [a b c b] [a c b] mostre retiredup "Olá

Page 131: Manual Logo 3.0

Olá Modificadores Atribuaelemvetor Atribuaelmatriz Inserepilha Retirepilha Inserefila Retirefila Atribuaelemvetor atribuaelemvetor elemento vetor valor atrelemvetor elemento vetor valor

Comando que atribui o novo valor ao elemento do vetor. Valor não pode ser uma lista ou um vetor que contém vetor. Exemplo:

atribua "meuvetor (vetor 3 0) atribuaelemvetor 2 :meuvetor 1 atribuaelemvetor 1 :meuvetor 2 atribuaelemvetor 0 :meuvetor 3 mostre :meuvetor {3 2 1 }

Atribuaelmatriz atribuaelmatriz lista matriz valor

Atribui o novo valor ao elemento da matriz definido em lista. Exemplo:

atribua "minhamatriz (matriz [2 3]0) atribuaelmatriz [0 0] :minhamatriz 1 atribuaelmatriz [0 1] :minhamatriz 2

Page 132: Manual Logo 3.0

atribuaelmatriz [0 2] :minhamatriz 3 atribuaelmatriz [1 0] :minhamatriz 4 atribuaelmatriz [1 1] :minhamatriz 5 atribuaelmatriz [1 2] :minhamatriz 6 mostre :minhamatriz {{1 2 3}{4 5 6}}

Inserepilha inserepilha pilha objeto ip pilha objeto

Insere o objeto na pilha. A pilha deve ser uma lista cujo valor inicial é vazio. Os novos objetos são incluídos no topo da lista. Para retirar o último objeto colocado na lista use o comando Retirepilha. Exemplo:

atribua "minhapilha [] inserepilha "minhapilha 8 inserepilha "minhapilha 6 mostre :minhapilha [6 8]

mostre retirepilha "minhapilha 6

mostre :minhapilha [8]

Retirepilha retirepilha pilha rp pilha

Retira e retorna o objeto mais recente inserido na pilha por meio do comando Inserepilha. Exemplo:

Page 133: Manual Logo 3.0

atribua "minhapilha [] inserepilha "minhapilha 4 inserepilha "minhapilha 7 mostre :minhapilha [7 4] mostre retirepilha "minhapilha 7 mostre :minhapilha [4] mostre retirepilha "minhapilha 4 mostre :minhapilha []

Inserefila inserefila fila objeto if fila objeto

Insere o objeto na fila. A fila deve ser uma lista cujo valor inicial é vazio. Os novos objetos são incluídos no final da lista. Para retirar o objeto mais antigo colocado na fila use o comando Retirefila. Exemplo:

atribua "minhafila [] inserefila "minhafila 1 inserefila "minhafila 3 mostre :minhafila [1 3]

Retirefila retirefila objeto rf objeto

Page 134: Manual Logo 3.0

Retira e retorna o objeto mais recente inserido na fila por meio do

comando Inserefila. Exemplo:

atribua "minhafila [] inserefila "minhafila 5 inserefila "minhafila 9 mostre :minhafila [5 9]

mostre retirefila "minhafila 5 mostre :minhafila [9] mostre retirefila "minhafila 9 mostre "minhafila []

Predicados (Dados) Épalavra Élista Évetor Évazia Sãoiguais Éanterior Éelemento Ésubseqüência Énúmero Tembarrainvertida Épalavra épalavra objeto

Page 135: Manual Logo 3.0

epalavra objeto

Retorna a palavra verd sempre que o objeto for uma palavra. Caso contrário, retorna a palavra falso. Exemplo:

esc épalavra "casa verd

coloque [tartaruga] "animal esc épal :animal falso

Élista élista objeto

Retorna a palavra verd sempre que o objeto for uma lista. Caso contrário, retorna a palavra falso. Exemplo:

coloque [a b c d] "letras esc élista :letras verd

coloque 2 "num esc élista :num falso

Évetor évetor objeto

Retorna a palavra verd sempre que o objeto for um vetor. Caso contrário, retorna a palavra falso. Exemplo:

Page 136: Manual Logo 3.0

mostre évetor "casa falso mostre évetor {azul amarelo verde} verd

Évazia évazia objeto

Retorna a palavra verd sempre que o objeto de entrada for vazio. Caso contrário, retorna a palavra falso. Exemplo:

coloque [azul] "cor esc évazia sp :cor verd coloque " "vazia esc évazia :vazia verd

Sãoiguais sãoiguais objeto1 objeto2

Retorna verd (verdadeiro) se as entradas objeto1 e objeto2 são iguais. Caso contrário, retornam FALSO. Dois números são iguais se eles possuem o mesmo valor numérico. Duas palavras não-numéricas são iguais se elas contêm os mesmos caracteres na mesma ordem. Caso haja uma variável chamada ignorecaixaalta definida como verd, então uma letra maiúscula possui o mesmo valor que uma letra minúscula. (Este é o valor definido como padrão.) Duas listas são iguais se os seus membros são iguais. Um vetor é igual somente a ele próprio; dois vetores criados separadamente nunca são iguais, mesmo que seus elementos sejam iguais. Exemplo:

mostre são iguais 1 1 verdadeiro

Page 137: Manual Logo 3.0

mostre sãoiguais 1 2 falso mostre sãoiguais [1 2 3] [1 2 3] verdadeiro mostre sãoiguais [1 2 3] [3 2 1] falso

Éanterior éanterior palavra1 palavra2 eanterior palavra1 palavra2

Retorna a palavra verd se palavra1 vem antes de palavra2, conforme a tabela ASCII (ordem alfabética). Caso contrário, retorna a palavra falso. Lembre-se de que se as entradas forem números, o resultado pode não corresponder a Émenor; por exemplo, Éanterior 3 12 é falso porque 3 aparece antes de 1. Observação: a comparação é feita caractere a caractere. Exemplo:

mostre éanterior "abc "abd verd mostre éanterior "abd "abc falso mostre éanterior "3 "123 falso

Éelemento éelemento objeto1 objeto2 eelemento objeto1 objeto2

Se objeto2 for uma lista ou um vetor, retorna a palavra verd se objeto1 for igual a um membro ou a um elemento de objeto2; caso contrário, retorna a palavra falso. Se objeto2 for uma palavra, retorna verd se objeto1 estiver contido em objeto2; caso contrário, retorna falso.

Page 138: Manual Logo 3.0

mostre éelemento 1 [1 2 3] verd mostre éelemento 4 [1 2 3] falso

Ésubseqüência ésubseqüência objeto1 objeto2 esubseq objeto1 objeto2

Se objeto1 for uma lista ou um vetor, retorna VERD, se objeto1 for igual (Sãoiguais) a um membro ou elemento de objeto2, caso contrário retorna FALSO. Se objeto2 for uma palavra, retorna VERD se objeto1 for igual (Sãoiguais) a uma substring do objeto2, caso contrário retorna FALSO. Note que seu comportamento para palavras é diferente de outros comandos, por exemplo, para que éelemento objeto1 objeto2 retornasse VERD, objeto1 deveria ser um único caractere. Exemplo:

mostre ésubseqüência "ab "abc verd mostre ésubseqüência "ac "abc falso

Énúmero énúmero objeto enumero objeto

Retorna a palavra verd sempre que o objeto for um número. Caso contrário, retorna a palavra falso. Exemplo:

esc énúmero [1 2] falso

Page 139: Manual Logo 3.0

esc énúmero 3 verd

Tembarrainvertida tembarrainvertida caractere tembarrainv caractere

Emite VERDADEIRO se a entrada caractere foi digitada originalmente no SuperLogo com uma barra invertida (\) antes dela para prevenir interpretação sintática especial, de outra forma, emite FALSO. (Na Europa, emite VERDADEIRO somente se o caractere é um espaço com uma barra invertida, um caractere de tabulação, uma nova linha ou um desses a seguir: ()[]+-*/=<>:;\~?) Exemplo:

mostre tembarrainvertida "a falso

Operações Numelem Ascii Rawascii Caractere Minúscula Maiúscula Parse Runparse Diahora Tempomili Numelem numelem objeto

Retorna o número de elementos que compõem objeto. Se objeto for uma palavra, retorna o número de caracteres da palavra; se objeto for uma lista ou um vetor, retorna o número de elementos da lista ou vetor.

Page 140: Manual Logo 3.0

Exemplo:

esc numelem [renato e alice] 3

esc nel "flávio 6

Ascii ascii caractere

Retorna o valor correspondente ao caractere de entrada na tabela ASCII. O caractere pode ser uma letra, um número ou um caractere especial. O valor retornado é um número inteiro entre 0 e 255. Exemplo:

esc ascii "A 65 esc ascii "1 49 esc ascii "a 97

Rawascii rawascii caractere

Retorna o inteiro (nos Estados Unidos, entre 0 e 127) que representa o caractere no código ASCII. Exemplo:

mostre rawascii "a 97 mostre rawascii "A

Page 141: Manual Logo 3.0

65 mostre rawascii "b 98

Caractere caractere número car número

Retorna o caractere correspondente a número na tabela ASCII. O parâmetro de entrada deve variar entre 0 e 255. Exemplo:

esc car 65 A esc car 91 [

Minúscula minúscula palavra minus palavra

Retorna uma cópia da palavra de entrada com todas as letras maiúsculas alteradas para letras minúsculas. Algumas letras precedidas de "\" não serão convertidas. Exemplo: \n, o qual é interpretado como caracter de fim de linha. Exemplo:

mostre minúscula "Casa casa mostre minúscula "PROJETO projeto

Maiúscula maiúscula palavra

Page 142: Manual Logo 3.0

maius palavra

Retorna uma cópia da palavra de entrada com todas as letras maiúsculas alteradas para minúsculas. Algumas letras precedidas de "\" não serão convertidas. Exemplo: \n, o qual é interpretado como caractere de fim de linha. Exemplo:

mostre maiúscula "Casa CASA mostre maiúscula "projeto PROJETO

Parse parse palavra

Retorna a lista que resultaria se a entrada palavra fosse inserida em resposta a uma operação. Ou seja, Parse Leiapalavra possui o mesmo valor que Leialista para a mesma leitura de caracteres. Exemplo:

mostre parse "Olá [Olá]

Runparse runparse objeto

Retorna a lista que resultaria se a entrada objeto (palavra ou lista) fosse digitada como uma linha de instrução; caracteres como operadores de infixo e parênteses são membros separados da saída. Note que as sublistas de uma lista runparsed não são runparsed por elas próprias. Exemplo:

mostre runparse "a<b [a < b]

Page 143: Manual Logo 3.0

Diahora diahora dh

Retorna o dia e a hora corrente do sistema no formato de lista. Observação: retornará na língua do país que estiver definido no Windows. Exemplo:

mostre diahora [qua jul 14 23:34:08 1993]

Tempomili tempomili

Retorna a data e hora de inicialização do Windows em milisegundos, usado para o registro preciso de data/hora. Exemplo:

atribua "inicio tempomili repita 36 [circunferência 100 pd 5] mostre tempomili - :inicio 8189

ENTRADA E SAÍDA Observação: se existir uma variável denominada profundidadeimpressão com um valor inteiro não negativo, então listas complexas e estrututras de vetores serão impressas apenas até a profundidade permitida. Isto é, membros de membros de ...de membros vão ser exibidos apenas até certa distância. Os elementos ou membros omitidos por estarem em uma profundidade além do limite são indicados por uma reticências para cada um; assim, uma lista com profundidade acima do limite de dois elementos será escrita como [... ...]. Se existir uma variável denominada tamanhoimpressão com um valor inteiro não negativo, apenas um certo número de elementos ou membros de qualquer vetor ou lista serão impressos a partir do início. Uma única reticências substitui todos os objetos ausentes da estrutura. O tamanho limite também se

Page 144: Manual Logo 3.0

aplica ao número de caracteres impressos em uma palavra; contudo, um tamanholimitedeimpressão entre 0 e 9 será sempre tratado como se fosse 10 quando aplicado a palavras. Esse limite se aplica não apenas ao objeto impresso de nível mais alto, mas a qualquer subestrutura dentro dele. Escreva Guardeparaescrever Mostre Leialista Leiapalavra Leiacaractere Leiacaracteres Shell Abraparaler Abraparaescrever Abraparaadicionar Abraparaatualizar Fechearq Arqabertos Fechetodosarq Eliminearq Registre Nãoregistre Mudeleitura Mudeescrita Arqleitura Arqescrita Mudeposleitura Mudeposescrita Posleitura Posescrita Éfimarq Escreva escreva objeto esc objeto

Page 145: Manual Logo 3.0

Comando que imprime a entrada ou entradas para o fluxo de escrita atual (inicialmente o terminal). Todas as entradas são escritas em uma linha simples, separadas por espaços, terminando com uma nova linha. Se uma entrada é uma lista, os colchetes não são colocados ao seu redor, mas os colchetes são colocados ao redor das sublistas. Colchetes sempre são inseridos ao redor de vetores. Se houver mais de um parâmetro de entrada, deve-se usar parênteses. Exemplo:

escreva "Olá Olá escreva [Olá como vai você] Olá como vai você

Guardeparaescrever guardeparaescrever objeto (guardeparaescrever objeto1 objeto2 ...)

Comando que escreve a entrada ou entradas como Escreva, exceto quando nenhum caractere da linha nova é impresso no final e múltiplas entradas não são separadas por espaço. Nota: os caracteres que você escreve usando Guardeparaescrever não aparecerão na tela até que seja escrito o caractere de uma linha nova (por exemplo, usando Escreva ou Mostre) ou até que o SuperLogo tente fazer a leitura a partir do teclado (atendendo à solicitação do seu programa). Esta buferização torna o programa muito mais rápido do que ele seria se cada caractere aparecesse imediatamente, na maioria dos casos o efeito não desagrada. Exemplo:

guardeparaescrever "Olá guardeparaescrever "Olá guardeparaescrever "Are escreva "Você OláComoVaiVocê

Mostre mostre objeto

Page 146: Manual Logo 3.0

mo objeto (mostre objeto1 objeto2 ...)

Mostra na janela de comandos o objeto, conservando os colchetes externos se o objeto for uma lista ou as chaves, se o objeto for um vetor. Exemplo:

mostre "LOGO LOGO mostre [aprendendo com LOGO] [aprendendo com LOGO] mostre leial

(digite LOGO e clique Ok) [LOGO] mo {sol terra mar} {sol terra mar}

Leialista leialista leial

Permite a entrada de caractere, palavra, frase ou arquivo via teclado, retornando uma lista. Se a entrada for um arquivo, o retorno da leitura de fim de arquivo será uma palavra vazia (e não uma lista vazia). Se a entrada contém barra invertida (\), barra vertical ( | ) ou til (~), esses caracteres não farão parte da lista de saída pois eles serão tratados no seu uso efetivo. O ponto-e-vírgula (;) não será tratado como comentário. Exemplo:

mostre leialista (digite: LOGO teste e clique Ok) [LOGO teste]

Page 147: Manual Logo 3.0

coloque leialista "a (digite: casa bela e clique Ok) mostre :a [casa bela]

Leiapalavra leiapalavra leiap

Permite a entrada de um caractere, palavra, frase ou arquivo via teclado, retornando uma palavra. Se a entrada for um arquivo, o retorno da leitura de fim de arquivo será uma lista vazia (e não uma palavra vazia). Nos casos em que o til (~) for usado para continuação de linha, a palavra de retorno incluirá o til (~) e os caracteres da nova linha, mostrando exatamente o que o usuário entrou. Barras verticais também serão preservadas na saída, mas o caracter seguinte à barra invertida terá 128 somado a sua representação. Exemplo:

mostre leiapalavra (digite: casa bela e clique Ok) casa bela

coloque leiapalavra "a (digite: LOGO teste e clique Ok) mostre :a LOGO teste

Leiacaractere leiacaractere leiac

Permite a entrada de um caractere via teclado, retornando uma palavra. Se a entrada for um arquivo, o retorno da leitura de fim de arquivo será uma lista vazia. Os caracteres barra invertida ( \ ), barra vertical ( | ) e til (~) não tem significado especial para este comando.

Page 148: Manual Logo 3.0

Exemplo: esc leiacaractere o LOGO espera a entrada de um caractere qualquer. Digite a e clique Ok. a

coloque leiacaractere "letra o LOGO espera a entrada de um caractere qualquer. Digite 2 e clique Ok. esc :letra 2

Leiacaracteres leiacaracteres número leiacs número (Não compatível com o SuperLogo quando o leitor é [] (teclado), Veja Ativetecla)

Lê caracteres numéricos a partir do fluxo de leitura e emite esses caracteres como uma palavra. Se o fluxo de leitura é um arquivo, e o final do arquivo é alcançado, LEIACARACTERES emite a lista vazia (não a palavra vazia). Se o fluxo de leitura é um terminal, echoing é desativado quando LEIACARACTERES é invocado, e permanece assim até que Leialista ou Leiapalavra sejam invocados ou seja escrito um prompt do SuperLogo. Os caracteres barra invertida e til não possuem nenhum significado especial neste contexto. Exemplo:

abraparaescrever "texto.txt mudeescrita "texto.txt escreva Olá mudeescrita [] fechearq "texto.txt abraparaler "texto.txt mudeleitura "texto.txt mostre leiacs 5 Olá

Page 149: Manual Logo 3.0

Mudeleitura [] Fechearq "texto.txt

Shell shell comando

Usado para executar arquivos (.exe por exemplo). Se comando é uma lista literal em uma linha de instrução, e se você quer que seja enviado um caractere de barra invertida à Shell, use \\ para pegar a barra invertida por meio do SuperLogo. A saída é um booleano (verd ou falso) baseado em uma execução bem-sucedida. Exemplo:

mostre shell [notepad c:\\teste.txt] verdadeiro

Abraparaler abraparaler arquivo abraler arquivo

Abre o arquivo para leitura apontando para o início dele. Exemplo:

abraparaler "nomes.dat mudeleitura "nomes.dat repita 2 [mostre leialista] [marcos] [paulo] mudeleitura [] fechearq "nomes.dat

Abraparaescrever abraparaescrever arquivo abraesc arquivo

Abre o arquivo para escrita. Se o arquivo já existe, ele será deletado e

Page 150: Manual Logo 3.0

um novo arquivo vazio será criado. Exemplo:

abraparaescrever "cores.dat mudeescrita "cores.dat escreva "vermelho escreva "azul mudeescrita [] fechearq "cores.dat abraparaler "cores.dat mudeleitura "cores.dat repita 2 [mostre leialista] [vermelho] [azul] mudeleitura [] fechearq "cores.dat

Abraparaadicionar abraparaadicionar arquivo abraadi arquivo

Abre o arquivo para adicionar novos dados. Se o arquivo já existe, ele será mantido e os novos dados serão colocados no final dele. Exemplo:

abraparaescrever "semana.dat mudeescrita "semana.dat escreva "segunda escreva "terça mudeescrita [] fechearq "semana.dat abraparaadicionar "semana.dat mudeescrita "semana.dat escreva "quarta escreva "quinta mudeescrita []

Page 151: Manual Logo 3.0

fechearq "semana.dat abraparaler "semana.dat mudeleitura "semana.dat repita 4 [mostre leialista] [segunda] [terça] [quarta] [quinta] mudeleitura [] fechearq "semana.dat

Abraparaatualizar abraparaatualizar arquivo abraatu arquivo

Abre o arquivo para leitura e escrita apontando para o final dele. Observação: cada arquivo aberto tem somente uma posição, a qual serve para leitura e escrita ao mesmo tempo, portanto todos os comandos que operam com arquivos farão com que essa posição seja alterada. Exemplo:

abraparaescrever "frutas.dat mudeescrita "frutas.dat escreva "uva escreva "banana mudeescrita [] fechearq "frutas.dat abraparaatualizar "frutas.dat mudeleitura "frutas.dat repita 2 [mostre leialista] [uva] [banana] mudeescrita "frutas.dat mudeposescrita 4

Page 152: Manual Logo 3.0

escreva "laranja mudeescrita [] mudeleitura "frutas.dat mudeposleitura 0 repita 3 [mostre leialista] [uva] [banana] [laranja] fechearq "frutas.dat

Fechearq fechearq arquivo

Fecha o arquivo especificado. Exemplo:

abraparaescrever "estações.dat mudeescrita "estações.dat escreva "primavera escreva "verão escreva "outono escreva "inverno mudeescrita [] fechearq "estações.dat

Arqabertos arqabertos

Retorna uma lista cujos elementos membros são os nomes dos arquivos abertos. Exemplo:

abraparaescrever "semana.dat abraparaescrever "meses.dat mostre arqabertos [meses.dat semana.dat]

Page 153: Manual Logo 3.0

Fechetodosarq fechetodosarq

Fecha todos os arquivos abertos. Exemplo:

fechetodosarq abraparaescrever "nomes.dat abraparaescrever "cidades.dat mostre arqabertos [cidades.dat nomes.dat] fechetodosarq mostre arqabertos []

Eliminearq eliminearq arquivo

Elimina o arquivo especificado, o qual não poderá estar aberto. Exemplo:

abraparaescrever "cores.dat mudeescrita "cores.dat escreva "azul escreva "amarelo mudeescrita [] fechearq "cores.dat abraparaler "cores.dat mudeleitura "cores.dat repita 2 [mostre leialista] [azul] [amarelo] mudeleitura [] fechearq "cores.dat eliminearq "cores.dat

Page 154: Manual Logo 3.0

abraparaler "cores.dat erro: arquivo não encontrado

Registre registre arquivo

Cria um novo arquivo de entrada e registra neste arquivo todas as coisas que são lidas por meio do teclado ou escritas no vídeo. O objetivo é criar uma cópia de uma sessão SUPERLOGO, que contém caracteres, prompt e instruções. Exemplo:

registre "comandos.dat pf 100 pd 90 nãoregistre abraparaler "comandos.dat mudeleitura "comandos.dat repita 3 [mostre leialista] [pf 100] [pd 90] [nãoregistre] mudeleitura [] fechearq "comandos.dat

Nãoregistre nãoregistre

Pára de registrar informações no arquivo definindo com registre e fecha este arquivo. Exemplo:

registre "comandos.dat pf 100 pd 90 nãoregistre

Page 155: Manual Logo 3.0

abraparaler "comandos.dat mudeleitura "comandos.dat repita 3 [mostre leialista] [pf 100] [pd 90] [nãoregistre] mudeleitura [] fechearq "comandos.dat

Mudeleitura mudeleitura arquivo

Ativa o arquivo para leitura de dados, o qual será usado por Leialista, etc. É necessário que o arquivo tenha sido anteriormente aberto com Abraparaler ou Abraparaatualizar. Se no lugar do arquivo for especificado uma lista vazia, a leitura de dados será por meio do teclado. Exemplo:

abraparaescrever "meses.dat mudeescrita "meses.dat escreva "janeiro escreva "fevereiro mudeescrita [] fechearq "meses.dat abraparaler "meses.dat mudeleitura "meses.dat repita 2 [mostre leialista] [janeiro] [fevereiro] mudeleitura [] fechearq "meses.dat

Mudeescrita

Page 156: Manual Logo 3.0

mudeescrita arquivo mudeesc arquivo

Ativa o arquivo para gravação de dados, o qual será usado por Escreva, etc... É necessário que o arquivo tenha sido anteriormente aberto com Abraparaescrever, Abraparaadicionar ou Abraparaatualizar. Se no lugar do arquivo for especificada uma lista vazia, os dados serão mostrados no vídeo. Exemplo:

abraparaescrever "tarefas.dat mudeescrita "tarefas.dat escreva "estudar escreva "lavar mudeescrita [] fechearq "tarefas.dat abraparaler "tarefas.dat mudeleitura "tarefas.dat repita 2 [mostre leialista] [estudar] [lavar] mudeleitura [] fechearq "tarefas.dat

Arqleitura arqleitura

Retorna o nome do arquivo ativo para leitura. Se o retorno for uma lista vazia, a leitura de dados será feita por meio do teclado. Exemplo:

abraparaler "semana.dat mudeleitura "semana.dat mostre arqleitura semana.dat fechearq "semana.dat

Page 157: Manual Logo 3.0

Arqescrita arqescrita

Retorna o nome do arquivo ativo para gravação. Se o retorno for uma lista vazia, os dados serão mostrados no vídeo. Exemplo:

abraparaescrever "semana.dat mudeescrita "semana.dat mostre arqescrita semana.dat

Mudeposleitura mudeposleitura número

Modifica o ponteiro do arquivo de leitura. O próximo Leialista (ou comando similar) começará a partir da posição definida em número. Por exemplo, Mudeposleitura 0 começará a ler no início do arquivo. Este comando não tem sentido se a leitura de dados estiver sendo feita por meio do teclado. Exemplo:

abraparaescrever "cores.dat mudeescrita "cores.dat escreva "verde escreva "vermelha mudeescrita [] fechearq "cores.dat abraparaler "cores.dat mudeleitura "cores.dat mostre leialista [verde] mudeposleitura 0

Page 158: Manual Logo 3.0

mostre leialista [verde] mudeleitura [] fechearq "cores.dat

Mudeposescrita mudeposescrita número

Modifica o ponteiro do arquivo de saída. O próximo Escreva (ou comando similar) começará a partir da posição definida em número. Por exemplo, mudeposescrita 0 começará a escrever no início do arquivo. Este comando não tem sentido se a saída estiver sendo feita por meio do vídeo. Exemplo:

abraparaescrever "jogos.dat mudeescrita "jogos.dat escreva "peteca mudeposescrita 0 escreva "bon mudeescrita [] fechearq "jogos.dat abraparaler "jogos.dat mudeleitura "jogos.dat mostre leialista [bon] mostre leialista [a] mudeleitura [] fechearq "jogos.dat

Posleitura posleitura

Retorna a posição do arquivo de leitura de dados.

Page 159: Manual Logo 3.0

Exemplo:

abraparaescrever "animal.dat mudeescrita "animal.dat escreva "cavalo escreva "gato mudeescrita [] fechearq "animal.dat abraparaler "animal.dat mudeleitura "animal.dat repita 2 [mostre posleitura mostre leialista] 0 [cavalo] 8 [gato] mudeleitura [] fechearq "animal.dat

Posescrita posescrita

Retorna a posição do arquivo de gravação de dados. Exemplo:

abraparaescrever "esportes.dat mudeescrita "esportes.dat atribua "pontos [] atribua "pontos jf posescrita :pontos escreva "natação atribua "pontos jf posescrita :pontos escreva "corrida atribua "pontos jf posescrita :pontos mudeescrita []

Page 160: Manual Logo 3.0

fechearq "esportes.dat mostre :pontos [0 9 18]

Éfimarq éfimarq

Retorna verd se não há mais caracteres para serem lidos do arquivo de entrada; retorna falso caso contrário. Exemplo:

abraparaescrever "cores.dat mudeescrita "cores.dat escreva "vermelho escreva "amarelo mudeescrita [] fechearq "cores.dat abraparaler "cores.dat mudeleitura "cores.dat repita 2 [mostre leialista mostre éfimarq ] [vermelho] falso [amarelo] verd mudeleitura [] fechearq "cores.dat

Comunicações Abraporta Fecheporta Descarregueporta Mudemodoporta Leiavetorporta

Page 161: Manual Logo 3.0

Leiacaractereporta Escrevavetorporta Escrevacaractereporta Portaentrada Portasaída Portaentradab Portasaídab PortaJoystick Carreguedll Chamedll Liberedll Abraporta abraporta palavra

Usado para obter acesso às portas seriais e paralelas do computador. Uma vez que a porta desejada estiver aberta, você pode ler (Leiavetorporta, Leiacaractereporta) ou gravar (Escrevavetorporta, Escrevacaractereporta). As características da porta podem ser modificadas com Mudemodoporta. Apenas uma porta pode ser aberta por vez. Uma vez encerrado o uso de uma porta, esta deverá ser fechada com Fecheporta. Não confundir este comando com Portaentrada e Portasaída, que são para portas de comunicação com o hardware. Observação: em palavra deverá ser definida a porta a ser aberta: com1-com4 e lpt1-lpt3. Exemplo:

abraporta "com1 fecheporta

Fecheporta fecheporta

Fecha uma porta que foi aberta com o comando Abraporta. Exemplo:

Page 162: Manual Logo 3.0

abraporta "com1 fecheporta

Descarregueporta descarregueporta número

Descarrega as filas para as porta de entrada ou saída. Observação: em número deverá ser especificado a fila a ser descarregada: 0 (saída) ou 1 (entrada). Exemplo:

abraporta "com1 descarregueporta 1 fecheporta

Mudemodoporta mudemodoporta palavra mudemp palavra

Usado para modificar as características (velocidade, paridade, data bits e stop bits) da porta, as quais também podem ser modificadas pelo ícone PORTAS do Painel de Controle do Windows. Observação: em palavra deve ser definido o que se quer modificar ("com: velocidade, paridade, data, stop) no mesmo formato do comando MODE do DOS. Exemplo:

abraporta "com1 mudemodoporta "com1:9600,n,8,1 fecheporta

Leiavetorporta

Page 163: Manual Logo 3.0

leiavetorporta número1 número2 leiavp número1 número2

Lê a porta que está aberta e armazena os dados em um vetor de buffer definido em número2. O comando tentará ler tantos caracteres quanto for o valor de número2, (se estiverem disponíveis), e devolverá o atual número de bytes lidos. número1: é o número de caracteres a serem lidos pela porta. Você pode usar um

número maior que o tamanho do vetor apenas para preenche-lo. número2: é um vetor de buffer para onde os dados serão transferidos. Exemplo:

abraporta "com1 escreva sentença [Enviando...] escrevavetorporta 3 listaparavetor mapeie [ascii ?] vetorparalista listaparavetor "at Enviando 2 atribua "y escrevacaractereporta 13 espere 60 atribua "buff {0 0 0 0 0 0 0 0 0 0} escreva sentença [Recebendo...] leiavetorporta 10 :buff Recebendo 9 escreva sentença [Data Rx...] mapeie [car ?] retire [] vetorparalista :buff Data RX...at|| ok | fecheporta

Leiacaractereporta leiacaractereporta leiacp

Lê um byte da porta que está aberta e o devolve como um inteiro. O comando retornará "-1" se nenhum caractere estiver disponível.

Page 164: Manual Logo 3.0

Exemplo:

abraporta "com1 atribua "y escrevacaractereporta ascii "a atribua "y escrevacaractereporta ascii "f atribua "y escrevacaractereporta 13 espere 60 escreva "lendo... lendo... repita 10 [atribua "x leiacaractereporta se não :x=-1 [escreva car :x]] escreva " at || ok | fecheporta

Escrevavetorporta escrevavetorporta número1 número2 escvp número1 número2

Envia um dado vetor de buffer para a porta que está aberta. Este comando devolve o número atual de bytes enviados. número1: é o número de caracteres a serem escritos. número2: é um vetor de buffer onde os dados de saída serão lidos. saída: é o número de bytes escritos na porta. Exemplo:

abraporta "com1 escreva sentença [Enviando...] escrevavetorporta 3 listaparavetor mapeie [ascii ?] vetorparalista listaparavetor "at Enviando 2 atribua "y escrevacaractereporta 13 espere 60 atribua "buff {0 0 0 0 0 0 0 0 0 0}

Page 165: Manual Logo 3.0

escreva sentença [Recebendo...] leiavetorporta 10 :buff Recebendo 9 escreva sentença [Data Rx...] mapeie [car ?] retire [] vetorparalista :buff Data RX...at|| ok | fecheporta

Escrevacaractereporta escrevacaractereporta número esccp número

Envia um byte para a porta que está aberta e retorna o número de bytes enviados (0 ou 1). número: é o byte que será enviado para a porta. saída: é o número de bytes escritos (0 ou 1). Exemplo:

abraporta "com1 atribua "y escrevacaractereporta ascii "a atribua "y escrevacaractereporta ascii "f atribua "y escrevacaractereporta 13 espere 60 escreva "lendo... lendo... repita 10 [atribua "x leiacaractereporta se não :x=-1 [escreva car :x]] escreva " at || ok | fecheporta

Portaentrada portaentrada id_da_porta

Page 166: Manual Logo 3.0

Este comando vai ler 2 bytes (word) da porta especificada em

id_da_porta e retorná-los com um inteiro. O id_da_porta especifica uma porta de "hardware". Não confunda este comando com Abraporta e Leiacaractereporta que são para comunicação via portas Serial e Parelela. Veja também Portaentradab e Portasaída. id_da_porta: (INTEIRO) Especifica de qual porta de hardware você deseja ler. Exemplo:

mostre portaentrada 198 25730

Portasaída portasaída id_da_porta dado portasaida id_da_porta dado

Este comando vai escrever dado como 2 bytes na porta especificada em id_da_porta. O id_da_porta especifica uma porta de "hardware". Não confunda este comando com Abraporta e Escrevacaractereporta que são para comunicação via portas Serial e Parelela. Veja também Portasaídab e Portaentrada. id_da_porta: (INTEIRO) Especifica em qual porta de hardware você deseja escrever. dado: (INTEIRO) São os 2 bytes de dados que devem ser escritos na porta. Exemplo:

portasaída 198 0 Portaentradab portaentradab id_da_porta

Page 167: Manual Logo 3.0

Este comando vai ler 1 byte (caractere) da porta especificada em id_da_porta e retorná-lo com um inteiro. O id_da_porta especifica uma porta de "hardware". Não confunda este comando com Abraporta e Leiacaractereporta que são para comunicação via portas Serial e Parelela. Veja também Portaentrada e Portasaídab. id_da_porta: (INTEIRO) Especifica de qual porta de hardware você deseja ler. Exemplo:

mostre portaentradab 198 130

Portasaídab portasaídab id_da_porta dado portasaidab id_da_porta dado

Este comando vai escrever dado como 1 byte na porta especificada em id_da_porta. O id_da_porta especifica uma porta de "hardware". Não confunda este comando com Abraporta e Escrevacaractereporta que são para comunicação via portas Serial e Parelela. Veja também Portasaída e Portaentradab. id_da_porta: (INTEIRO) Especifica em qual porta de hardware você deseja escrever. dado: (INTEIRO) É o byte de dados que deve ser escrito na id_da_porta. Exemplo:

portasaídab 198 0 PortaJoystick portajoystick máscara [portajoystick id_da_porta]

Este comando irá ler o valor do canal da porta de joystick especificada pela máscara. Você pode ler o estado do botão diretamente usando

Page 168: Manual Logo 3.0

Portaentrada 513. Se nada estiver conectado ao canal de porta do game, o comando sairá de funcionamento e retornará -1. máscara: (INTEIRO) Especifica que canal você deseja ler para a porta do game (1, 2, 4 ou 8). id_da_porta: (INTEIRO) Especifica a porta de hardware a partir da qual você deseja fazer a leitura (o padrão é 513). Exemplo:

repita 10000 [mostre PortaJoystick 1] <Movimente o JoyStick para ver o resultado> Carreguedll carreguedll nomedll

Carrega a dll (Dynamic Linked Library – Biblioteca de Ligação Dinâmica) chamada nomedll no SuperLogo. Uma vez carregada, você pode chamar funções da dll usando Chamedll e assim que você terminar de trabalhar com a dll ou precisar usar outra dll você pode liberar a dll com o comando Liberedll. nomedll: (PALAVRA) especifica qual dll você deseja carregar (nomes de dll precisam necessariamente terminar em .dll). Exemplo:

carreguedll "user.exe liberedll

Chamedll chamedll [tipo_função função tipo1 arg1 tipo2 arg2 tipo3 arg3 ...]

Este comando chamará a função especificada e terá como saída o retorno da função como tipo tipo_função. Ele vai passar como parâmetros da função arg1 como tipo1, arg2 como tipo2 e assim por diante. A função deve estar dentro da dll que foi carregada com o comando Carreguedll. A lista dada deve ter um número par de elementos e conter pelo menos 4 itens (tipo_função, função, tipo1 e arg1) mesmo que arg1 não seja usado. Este

Page 169: Manual Logo 3.0

comando é bastante conhecido por usuários experientes e você deve ser familiar com as convenções de chamada do Windows para utilizá-lo. Se você não associar apropriadamente a lista de argumentos, os resultados podem ser indesejáveis (inclusive o Windows pode travar). Esta função pode trabalhar com uma grande variedade de funções, mas certamente não trabalhará com todas. Porém, como ela permite que se utilize funções externas ao SuperLogo, você pode escrever sua própria dll com uma interface de chamadas compatível para acessar interfaces mais complexas. Note que se a lista de argumentos for “void” (não retornar valores) deve-se usar [... "v 0]. tipo_função: (palavra) especifica de qual tipo é a função ou o argumento. Onde: v void w word l dword f double s lpstr função: (palavra) é o nome da função a ser chamada. arg: (objeto) Qualquer tipo suportado pelo Logo que possa ser

mapeado a um dos tipos acima.

Exemplo:

carreguedll "user.exe chamedll [w MessageBox w 0 s MyMessage s [Hello How are you] w 0] <veja a caixa de mensagem> liberedll

Liberedll liberedll

Este comando vai liberar a dll que foi carregada com Carreguedll. Exemplo:

Page 170: Manual Logo 3.0

carreguedll "user,exe liberedll

Acesso ao mouse e teclado Temarq Ativetecla Desativetecla Asciitecla Ativemouse Desativemouse Posmouse Limpejanelacomandos Temarq temarq

Retorna verd se houver caracteres esperando para serem lidos. Se a entrada for um arquivo, este comando é equivalente a Éfimarq. Se a entrada for o teclado, então o eco é desligado e o terminal é colocado em modo cbreak (um caracter por vez em vez de uma linha por vez). Ela permanece nesse modo até que alguma leitura de modo-de-linha seja registrada (ex.: Leialista). Ativetecla ativetecla tecla

Habilita a rastrear diretamente os eventos do teclado. Para saber qual tecla está envolvida utilize Asciitecla em seu procedimento. Lembre-se de que a Janela Gráfica do SuperLogo precisa ter o foco para capturar os eventos principais. Você pode mudar o foco para a Janela de Comandos do SuperLogo usando o comando Mudefocojangr. Exemplo:

ativetecla [escreva car asciitecla] mudefocojangr (Digite: a)

Page 171: Manual Logo 3.0

a (Digite: b) b desativetecla

Desativetecla desativetecla

Desabilita o rastreamento de eventos do teclado. Exemplo:

ativetecla [escreva car asciitecla] mudefocojangr

(Digite: a) a (Digite: b) b desativetecla

Asciitecla asciitecla

Retorna o valor (em ascii) da última tecla pressionada ou liberada. Exemplo:

ativetecla [escreva car asciitecla] mudefocojangr (Digite: a) a (Digite: b) b desativetecla

Page 172: Manual Logo 3.0

Lembre-se de que a Janela Gráfica do SuperLogo precisa estar sob o foco (selecionada) quando você pressiona as teclas. Ativemouse ativemouse lista1 lista2 lista3 lista4 lista5

Habilita o controle direto dos eventos do mouse. Para saber onde se encontrava o mouse quando um botão foi apertado ou quando foi movido use Posmouse no seu procedimento de botão ou movimentação. Observe que a Janela Gráfica deve ter o foco para interceptar comandos do mouse. Lembre-se de que todos os "retornos de chamada" para o mouse são executados automaticamente no modo Monotarefa. lista1: é uma lista de comandos LOGO (ou um nome de procedimento) a serem executados quando o botão esquerdo do mouse for pressionado. lista2: é uma lista de comandos LOGO (ou um nome de procedimento) a serem executados quando o botão esquerdo do mouse for liberado. lista3: é uma lista de comandos LOGO (ou um nome de procedimento) a serem executados quando o botão direito do mouse for pressionado. lista4: é uma lista de comandos LOGO (ou um nome de procedimento) a serem executados quando o botão direito do mouse for liberado. lista5: é uma lista de comandos LOGO (ou um nome de procedimento) a serem executados quando o mouse é movimentado. Exemplo:

un ativemouse [mudepos posmouse ul][un][][][mudepos posmouse] => mova o mouse na janela [SuperLogo para Windows] e pressione o botão esquerdo para desenhar. desativemouse

Desativemouse desativemouse

Desabilita o controle dos eventos do mouse.

Page 173: Manual Logo 3.0

Exemplo:

un ativemouse [mudepos posmouse ul][un][][][mudepos posmouse] => mova o mouse na janela [Slogo para Windows] e pressione o botão esquerdo para desenhar. desativemouse

Posmouse posmouse

Retorna a posição do mouse no último evento do mouse. Primeiramente o mouse precisa ser ativado por meio do comando Ativemouse. Exemplo:

un ativemouse [mudepos posmouse ul][un][][][mudepos posmouse] => mova o mouse na janela [Slogo para Windows] e pressione o botão esquerdo para desenhar. desativemouse

Limpejanelacomandos limpejanelacomandos ljc

Apaga o conteúdo da Janela de Comandos. Exemplo:

escreva "teste teste ljc

ARITMÉTICA

Page 174: Manual Logo 3.0

Operações numéricas Predicados (Aritméticos) Números randômicos Formatação de impressão Operações bitwise Operações numéricas Soma Diferença Oposto Produto Quociente Resto Inteiro Arredonde Abs Sinal Raizq Potência Exponencial Log10 Ln Pi Tan Tanrad Sen Senrad Cos Cosrad Arctan Arctanrad Arcsen Arcsenrad Arccos Arccosrad Soma soma número1 número2

Page 175: Manual Logo 3.0

(soma número1 número2...númeron) Retorna o valor da soma dos números especificados Exemplo:

esc soma 200 300 500 pf (soma 50 30 20)

Diferença diferença número1 número2

Retorna o resultado da diferença entre número1 e número2. Exemplo:

esc diferença 50 10 40

Oposto oposto número

Retorna o valor oposto do número (ou resultado de expressão) dado como parâmetro. Exemplo:

mostre oposto -3 3 mostre oposto 3 + 4 -7 mostre oposto -3 + 4 -1

Produto

Page 176: Manual Logo 3.0

produto número1 número2 (produto número1 número2...númeron)

Retorna o produto dos números especificados. Exemplo:

esc produto 300 2 600 coloque 5 "n1 coloque 6 "n2 esc produto :n1 :n2 30

Quociente quociente número1 número2

Retorna o quociente da divisão inteira de número1 por número2. Exemplo:

esc quociente 1000 2 500 coloque 50 "n1 coloque 25 "n2 esc quociente :n1 :n2 2 esc quociente 100 quociente 10 2 20

Resto resto número1 número2

Retorna o valor do resto da divisão inteira de número1 por número2. Exemplo:

Page 177: Manual Logo 3.0

esc resto 10 3 1 atribua "a 5 atribua "b 3 esc resto :a :b 2

Inteiro inteiro número

Envia sua entrada com a parte fracionada removida; por exemplo, um inteiro com o mesmo sinal que o da entrada, cujo valor absoluto é o maior inteiro menor ou igual ao valor absoluto da entrada.

Dentro dos computadores, os números são representados de duas formas diferentes, uma para inteiros e outra para números com partes fracionadas. Porém, na maioria dos computadores, o maior número que pode ser representado em formato inteiro é menor que o maior inteiro que pode ser representado (mesmo com precisão exata) em formato de ponto flutuante (fração). A operação INTEIRO sempre emitirá um número cujo valor é matematicamente um inteiro, mas se sua entrada é muito grande, a saída pode não ser em formato inteiro. Nesse caso, operações como Resto, que exigem uma entrada em inteiro, não aceitarão esse número. Exemplo:

mostre int 8.2 8 mostre int 8.7 8

Arredonde arredonde número

Retorna número, arredondado para o inteiro mais próximo. Exemplo:

Page 178: Manual Logo 3.0

esc arredonde 2.45 2 esc arredonde 2.5 3 Abs abs número (procedimento de biblioteca)

Retorna o valor absoluto (magnitude) da sua entrada. Exemplo:

mostre abs 5 5 mostre abs -5 5

Sinal sinal número (procedimento de biblioteca)

Retorna o sinal (-1 se negativo, 0 se zero e 1 se positivo) de número. Útil, por exemplo, quando você deseja tirar o sinal de um número e aplicá-lo a outro. Exemplo:

mostre sinal 5 1 mostre sinal 0 0 mostre sinal -98.6 -1

Raizq raizq número

Page 179: Manual Logo 3.0

Retorna a raiz quadrada de número. Exemplo:

esc raizq 2 1.41

Potência potência número1 número2

Retorna número1 (base) elevado à potência de número2 (expoente). Se número1 for negativo, então número2 precisa ser inteiro. Exemplo:

mostre potência 2 3 8 mostre potência 2 -3 0,125 mostre potência 9 0 1 mostre potência -2 3 -8

Exponencial exponencial número

Retorna e (2.718281828+) elevado à potência de número. Exemplo:

mostre exponencial 2 7.38905609...

Page 180: Manual Logo 3.0

Log10 log10 número

Retorna o logaritmo na base 10 de número. Exemplo:

mostre log10 1 0 mostre log10 100 2

ln ln número

Retorna o logaritmo natural (base e) de número. Exemplo:

mostre ln 1 0 mostre ln exp 2 2

Pi pi (procedimento de biblioteca)

Retorna o valor de pi (3.141592653586793227020265931059839203954) Exemplo:

mostre senrad pi/2 1

Page 181: Manual Logo 3.0

Tan tan ângulo_graus

Retorna a tangente de ângulo_graus (valor do ângulo medido em graus). Veja também Tanrad. Exemplo:

mostre tan 0 0 mostre tan 90 Error mostre tan 45 1

Tanrad tanrad ângulo_rad

Retorna a tangente de ângulo_rad (valor do ângulo medido em radianos). Veja também Tan. Exemplo:

mostre tanrad 0 0 mostre tanrad pi/2 Error mostre tanrad pi/4 1

Sen sen ângulo_graus

Retorna o valor do seno de ângulo_graus (valor do ângulo medido em graus).. Veja também Senrad.

Page 182: Manual Logo 3.0

Exemplo: esc sen 0 0.00 esc sen 90 1

Senrad senrad ângulo_rad

Retorna o seno de ângulo_rad (valor do ângulo medido em radianos). Veja também Sen. Exemplo:

atribua "pi 4 * arctanrad 1 mostre senrad 0 0 mostre senrad :pi 1.2e-16

Cos cos ângulo_graus

Retorna o cosseno de ângulo_graus (valor do ângulo medido em graus).. Veja também Cosrad. Exemplo:

esc cos 45 0.707... esc cos 90 0 esc cos 180

Page 183: Manual Logo 3.0

-1

Cosrad cosrad ângulo_rad

Retorna o cosseno de ângulo_rad (valor do ângulo medido em radianos). Veja também Cos. Exemplo:

atribua "pi 4 * arctanrad 1 mostre cosrad 0 1 mostre cosrad :pi -1

Arctan arctan número (arctan número1 número2)

Retorna o arcotangente, em graus, de número. Com 2 entradas (x y), retorna o arcotangente de y/x, se x for diferente de zero, ou 90 ou -90 dependendo do sinal de y, se x = zero. Exemplo:

esc arctan 1 45 esc arctan 0 0

Arctanrad arctanrad número (arctanrad número1 número2)

Page 184: Manual Logo 3.0

Retorna o arcotangente, em radianos. Com 2 entradas (x,y), retorna o arcotangente de y/x, se x for diferente de zero, ou pi/2 ou -pi/2 dependendo do sinal de y, se x for igual a zero. Exemplo:

mostre arctanrad 1 0.785398163397448

Arcsen arcsen número

Retorna o arcoseno de nûmero, em graus. Veja também Arcsenrad. Exemplo:

mostre arcsen 0.5 30 mostre arcsen sen 45 45

Arcsenrad arcsenrad número

Retorna o arcoseno de número, em radianos. Veja também Arcsen. Exemplo:

mostre (arcsenrad 1) - pi/2 verdadeiro

Arccos arccos número

Retorna o arcocosseno de número, em graus. Veja também Arccosrad. Exemplo:

mostre arccos 0.5 60

Page 185: Manual Logo 3.0

mostre arccos cos 45 45

Arccosrad arccosrad número

Retorna o arcocosseno de número, em radianos. Veja também Arccos. Exemplo:

mostre (arccosrad (raizq 2)/2) = pi/4 verdadeiro

Predicados (Aritméticos) Émenor Émaior Émenor émenor número1 número2

Retorna verd se número1 for menor que número2. Caso contrário, retorna falso. Exemplo:

mostre émenor 4 3 falso mostre émenor 7 9 verd

Émaior émaior número1 número2

Retorna verd se número1 for maior que número2. Caso contrário, retorna falso.

Page 186: Manual Logo 3.0

Exemplo: mostre émaior 5 6 falso mostre émaior 8 3 verd

Números randômicos Sorteienúmero sorteienúmero número sortnum número

Retorna um número aleatório inteiro e positivo entre 0 (zero) e o número especificado. Exemplo:

esc sorteienúmero 40 (será gerado um número aleatoriamente) esc sorteienúmero 40 (será gerado um número aleatoriamente) esc sorteienúmero 40 (será gerado um número aleatoriamente)

Resorteienúmero resorteienúmero número resortnum número

Reproduz o resultado do comando Sorteienúmero. Originalmente a sequência dos números randômicos é diferente para cada vez que o LOGO é usado. Se for necessário que a mesma sequência seja repetida, use resorteienúmero antes da primeira chamada do Sorteienúmero. Se for necessário mais de uma sequência de repetição, resorteienúmero deve ser seguido de um número inteiro; cada entrada possível seleciona uma sequência

Page 187: Manual Logo 3.0

única de números. Exemplo:

(resorteienúmero 1234) repita 2 [mostre sorteienúmero 10] 6 3 (resorteienúmero 1234) repita 2 [mostre sorteienúmero 10] 6 3

Formatação de impressão Formatanúmero Formatanúmero formatanúmero número1 número2 número3 formnum número1 número2 número3

Retorna uma palavra contendo uma representação numérica de número1, possivelmente precedida por espaços, com a quantidade de caractere definida em número2, incluindo exatamente o número de dígitos indicado em número3 depois do ponto decimal. Se número3 (precisão) for 0, então não existirá casas decimais. número1: (NÚMERO) Número a ser formatado. número2: (INTEIRO) Largura total mínima, incluindo o ponto decimal. número3: (INTEGER) Número de dígitos que aparecerão depois do ponto decimal. Exemplo:

mostre formatanúmero 123.1 10 10 123.1000000000

Operações bit-a-bit

Page 188: Manual Logo 3.0

Bite Bitou Bitxou Bitnão Deslocabitsa Deslocabitsl Bite bite número1 número2 (bite número1 número2 número3...)

Retorna o resultado da operação lógica “e” bit-a-bit nas entradas, as quais devem ser números inteiros. Exemplo:

mostre bite 5 2 0 mostre bite 12 5 4

Bitou bitou número1 número2 (bitou número1 número2 número3...)

Retorna o resultado da operação lógica “ou” bit-a-bit nas entradas, as quais devem ser números inteiros. Exemplo:

mostre bitou 5 2 7 mostre bitou 5 1 5

Page 189: Manual Logo 3.0

Bitxou bitxou número1 número2 (bitxou número1 número2 número3...)

Retorna o resultado da operação lógica “ou exclusivo” bit-a-bit nas entradas, as quais devem ser números inteiros. Exemplo:

mostre bitxou 5 2 7 mostre bitxou 5 1 4

Bitnão bitnão número

Retorna o resultado da operação lógica “não” (inversão binária) sobre a entrada, que deve ser um número inteiro. Exemplo:

mostre bitnão 1 -2 mostre bitnão 5 -6

Deslocabitsa deslocabitsa número1 número2

Retorna o número1 deslocado aritméticamente para a esquerda número2 bits. Se número2 for negativo, o deslocamento é para a direita. As entradas precisam ser valores inteiros. Exemplo:

mostre deslocabitsa 5 2 20

Page 190: Manual Logo 3.0

mostre deslocabitsa 20 -1 10

Deslocabitsl deslocabitsl número1 número2

Retorna o número1 deslocado logicamente para a esquerda número2 bits. Se número2 é negativo, a mudança é para a direita com preenchimento de zeros. As entradas precisam ser valores inteiros. Exemplo:

mostre deslocabitsl 5 2 20 mostre deslocabitsl 20 -1 10

OPERAÇÕES LÓGICAS E Ou Não E E predicado1 predicado2 (E predicado1 predicado2...predicadon)

Retorna a palavra verd se os parâmetros de entrada forem verdadeiros. Caso contrário, retorna a palavra falso. Todas as entradas (predicados) precisam retornar ou verd ou falso. Exemplo:

mostre e "verdadeiro "falso falso mostre e "verdadeiro "verdadeiro

Page 191: Manual Logo 3.0

verdadeiro mostre e sãoiguais [a] [b] falso

Ou ou predicado1 predicado2 (ou predicado1 predicado2 ... predicadon)

Retorna a palavra verd se uma das entradas for verdadeira. Caso contrário retorna falso. Todas as entradas (predicados) precisam retornar ou verd ou falso. Exemplo:

mostre ou "verdadeiro "falso verdadeiro mostre ou "falso "falso falso mostre ou sãoiguais 2 5 sãoiguais “A “A verd

Não não predicado Retorna a palavra verd se o predicado for falso. Caso contrário, retorna a palavra falso. Exemplo:

não "verdadeiro falso não sãoiguais (2+2) 4 falso

Page 192: Manual Logo 3.0

GRÁFICOS

O centro da janela de imagens é a localização [0 0] da tartaruga. X positivo é à direita; Y positivo é acima. As direções (ângulos) são medidas em graus no sentido horário a partir do eixo Y positivo (12:00), diferentemente da tradicional convenção matemática que mede os ângulos no sentido anti-horário a partir do eixo X positivo (3:00). Várias tartarugas são admitidas, mas tartarugas dinâmicas e detecção de colisão não são suportados. Múltiplas tartarugas Movimentos da tartaruga Operações para movimentação da tartaruga Controle da tartaruga e janela Usando cores Operações para tartarugas e janelas Controle de lápis Operações para lápis Múltiplas tartarugas Ativetartaruga Tartarugaativa Tartarugabitmap Semtartarugabitmap Ativetartaruga ativetartaruga tartaruga atat tartaruga

Seleciona a tartaruga ativa. Cada tartaruga mantém sua própria Direção (orientação em 2D/3D), Posição e Controle de Lápis . Cada tartaruga pode ser representada como um bitmap por meio do comando Tartarugabitmap. Note que as tartarugas começam no 0, que é a tartaruga padrão. Existe um limite de 1024 tartarugas, o que significa que o maior valor de tartaruga é 1023. Todas as tartarugas entre 0 e a tartaruga de valor mais elevado selecionadas serão "ativadas". Então não escolha tartaruga entre 100 e 200 se

Page 193: Manual Logo 3.0

você precisa de apenas 2 tartarugas. Um Rg ou Tartaruga irá selecionar automaticamente a tartaruga 0 e desativar todas as outras. Exemplo:

repita 8 [ativetartaruga contevezes-1 pf 10*contevezes] Existem 3 tipos especiais de tartaruga utilizados quando no modo Logo3D. Tartaruga -1: Sua posição representa omde seus olhos estão ao visualisar um cena no modo 3D (padrões para [400 400 600]). Sua orientação não importa. Tartaruga -2: Sua posição representa para onde seus olhos estão olhando estão ao visualisar um cena no modo 3D (padrões para [0 0 0]). Sua Orientação representa qual é a direção “para cima” na tela (padrões para [0 0 0], a posição do eixo Y para cima). Tartaruga -3: Sua posição representa onde a fonte de luz está posicionada (padrões para [0 0 1000]). Sua Orientação não importa. Esta tartaruga só é importante quando você estiver utilizando Iníciopolígono e Fimpoligono.

Estas tartarugas especiais nunca são são exibidas ou transformadas em imagem bitmap. Cada vez que você entrar no modo Logo3d, todas as tartarugas especiais retornam para sua posição e orientação originais. Exemplo 2 (3D):

logo3d tat ;Desenha um cubo a partir do ponto de vantagem padrão repita 4 [repita 4 [pf 100 pd 90] pf 100 cabeceiparafrente 90] tat ativetartaruga -1 mudexyz 500 500 500 ativetartaruga 0 ;Desenha um cubo a partir do ponto de vantagem padrão repita 4 [repita 4 [pf 100 pd 90] pf 100 cabeceieparafrente 90]

Tartarugaativa

Page 194: Manual Logo 3.0

tartarugaativa tatativa

Retorna o número correspondente a tartaruga que está ativa. Para alterar a tartaruga ativa, veja Ativetartaruga. Exemplo:

ativetartaruga 8 mostre tartaruga 8

Tartarugabitmap tartarugabitmap tatbmp

Mapeia a tartaruga ativa (veja Ativetartaruga) para o bitmap correspondente do buffer (veja Recortebitmap e Mudeíndicebitmap).

Se o buffer de bitmap 0 estiver mapeado na área de transferência, então a tartaruga 0 (quando mapeada a um bitmap com este comando) será mapeada à área de transferência. Isto é, se você selecionar a tartaruga 0 e acionar Tartarugabitmap então a tartaruga será o conteúdo da área de transferência. Note que a área de transferência deve conter um bitmap. Tente desenhar uma figura no Paint e copiar uma parte para área de transferência, então retorne ao SuperLogo e selecione a tartaruga 0 (a padrão) e execute este comando. Tanto Semtartarugabitmap como Tat vão restaurar a tartaruga para seu formato normal (isto não apaga o bitmap correspondente). Exemplo:

tat un rotule 1 pt 20 ul recortebitmap 20 20 tararugabitmap pf 100

Page 195: Manual Logo 3.0

Semtartarugabitmap semtartarugabitmap semtatbmp

Este comando faz o oposto de Tartarugabitmap. Ele remove o mapeamento da tartaruga corrente do buffer de bitmap correspondente. Exemplo:

tat un rotule 1 pt 20 ul recortebitmap 20 20 tartarugabitmap pf 100 semtartarugabitmap

Movimentos da tartaruga Parafrente Paratrás Paraesquerda Paradireita Roleparaesquerda Roleparadireita Cabeceieparafrente Cabeceieparatrás Mudeposição Mudeposxyz Mudexy Mudexyz Mudex Mudey Mudez Paracentro Mudedireção Mudedireçãorolagem

Page 196: Manual Logo 3.0

Mudedireçãocabeceio Mudeorientação Arcoelipse Elipse Arco Circunferência Parafrente parafrente número pf número

Movimenta a tartaruga para frente o número de passos, ou seja, desloca a tartaruga no sentido em que ela estiver apontando. Exemplo:

tat pf 50

Paratrás paratrás número pt número

Movimenta a tartaruga para trás o número de passos, ou seja, desloca a tartaruga no sentido oposto ao que ela estiver apontando. Exemplo:

tat pt 50

Paraesquerda paraesquerda número pe número

Gira a tartaruga para a esquerda o número especificado em graus. Exemplo:

Page 197: Manual Logo 3.0

tat pe 60

Paradireita paradireita número pd número

Gira a tartaruga para a direita o número especificado em graus. Exemplo:

tat pd 45

Roleparaesquerda roleparaesquerda ângulo rolepe ângulo

Rola a tartaruga (para o seu lado esquerdo) de acordo com o ângulo especificado, medido em graus (1/360 de uma circunferência). Este comando deve ser executado no modo Logo3d. Exemplo:

logo3d roleparaesquerda 45 repita 3 [pf 100 paraesquerda 120]

Roleparadireita roleparadireita ângulo rolepd ângulo

Rola a tartaruga (para o seu lado direito) de acordo com o ângulo especificado, medido em graus (1/360 de uma circunferência). Este comando deve ser executado no modo Logo3d. Exemplo:

Page 198: Manual Logo 3.0

logo3d roleparadireita 45 repita 3 [pf 100 paradireita 120]

Cabeceieparafrente cabeceieparafrente ângulo cabeceiepf ângulo

Inclina o nariz da tartaruga para baixo de acordo com o ângulo especificado, medido em graus (1/360 de uma circunferência). Este comando deve ser executado no modo Logo3d. Exempo:

logo3d cabeceieparafrente 45 repita [pf 100 paradireita 120]

Cabeceieparatrás cabeceieparatrás ângulo cabeceiept ângulo

Inclina o nariz da tartaruga para cima de acordo com o ângulo especificado, medido em graus (1/360 de uma circunferência). Este comando deve ser executado no modo Logo3d. Exemplo:

logo3d cabeceieparatrás 45 repita 3 [pf 100 paradireita 120]

Mudeposição mudeposição lista mudepos lista

Movimenta a tartaruga para uma posição absoluta da tela. O argumento é uma lista de dois números, onde o primeiro representa a coordenada X e o

Page 199: Manual Logo 3.0

segundo representa a coordenada Y. Exemplo:

tat mudepos [0 100] mudepos [100 100] mudepos 100 0] mudepos [0 0]

Mudeposxyz mudeposxyz lista

Move a tartaruga para uma coordenada X, Y, Z absoluta. O argumento é uma lista de três números, as coordenadas X, Y e Z. Este comando deve ser executado no modo Logo3d. Veja também Posxyz. Exemplo: (desenhe um cubo)

logo3d ; Agora desenhe um cubo mudeposxyz [0 100 0] mudeposxyz [100 100 0] mudeposxyz [100 0 0] mudeposxyz [0 0 0] mudeposxyz [0 0 100] mudeposxyz [100 0 100] mudeposxyz [100 100 100] mudeposxyz [0 100 100] mudeposxyz [0 0 100] mudeposxyz [0 100 100] mudeposxyz [0 100 0] mudeposxyz [100 100 0] mudeposxyz [100 100 100] mudeposxyz [100 0 100] mudeposxyz [100 0 0]

Page 200: Manual Logo 3.0

Mudexy mudexy número1 número2

Movimenta a tartaruga para uma posição absoluta de tela. O argumento são dois números onde número1 representa a coordenada X e número2 representa a coordenada Y. Exemplo:

tat mudexy 0 100 mudexy 100 100 mudexy 100 0 mudexy 0 0

Mudexyz mudexyz número1 número2 número3

Move a tartaruga para uma posição 3D absoluta na tela. Os três argumentos são números, as coordenadas X, Y e Z. Este comando é elaborado para ser usado no modo Logo3d. Veja também Posxyz. número1: (NÚMERO) A coordenada X desejada. número2: (NÚMERO) A coordenada Y desejada. número3: (NÚMERO) A coordenada Z desejada. Exemplo: (desenha algumas ondas sinuosas em 3D)

logo3d para [i 0 360 10] ~ [ para [j 0 360] [mudexyz :j :i*sen :j -:i] un mudexyz 0 0 -:i ul ]

Mudex mudex número

Page 201: Manual Logo 3.0

Movimenta a tartaruga até o ponto com coordenada X especificado por número, o qual representa a coordenada X, mantendo inalteradas sua coordenada Y e sua direção. Exemplo:

tat mudex 300

Mudey mudey número

Movimenta a tartaruga para o ponto especificado por número, o qual representa a coordenada Y, mantendo inalteradas sua coordenada X e sua direção. Exemplo:

tat pd 90 pf 290 mudey 180

Mudez mudez número

Move a tartaruga ao longo do eixo Z a partir de sua posição atual até uma nova coordenada Z absoluta. O argumento é a nova coordenada Z. Este comando é elaborado para executar em modo Logo3d. Veja também Mudex e Mudey. Exemplo:

logo3d un mudex 100 rt mudez 100 mudey 100 mudez 0 mudey 0

Paracentro

Page 202: Manual Logo 3.0

paracentro pc

Movimenta a tartaruga para o centro da tela (posição [0 0]), sem alterar sua direção. Exemplo:

tat pf 100 pd 90 pf 100 pc

Mudedireção mudedireção ângulo mudedç ângulo mudedc ângulo

Coloca a tartaruga em uma nova direção absoluta. O argumento é o ângulo (a direção muda em graus no sentido horário a partir do eixo Y positivo). Veja também Direção. Se você está no modo Logo3d, a direção (em graus) é positiva a partir do eixo X positivo até o eixo Y positivo girando em torno do eixo Z. Exemplo:

mudedç 45 mostre direção 45

Mudedireçãorolagem mudedireçãorolagem ângulo

Rola a tartaruga para uma nova direção de rolagem. O argumento é um ângulo, em graus, que é positivo a partir do eixo X para o eixo Z negativo, rolando em torno do eixo Y. É importante checar Compreendendo sua orientação em 3D. Este comando é elaborado para executar em modo Logo3d. Veja também Direçãorolagem.

Page 203: Manual Logo 3.0

Exemplo: logo3d mudedireçãorolagem 45 mostre direçãorolagem 45

Mudedireçãocabeceio mudedireçãocabeceio ângulo

Muda a direção de cabeceio da tartaruga (nariz). O argumento é um ângulo, em graus, que é positiva a partir do eixo Z negativo até a posição do eixo Y, girando em torno do eixo X. É importante checar Compreendendo sua orientação em 3D. Este comando é elaborado para executar em modo Logo3d. Veja também Direçãocabeceio. Exemplo:

logo3d mudedireçãocabeceio 45 mostre direçãocabeceio 45

Mudeorientação mudeorientação lista (procedimento de biblioteca)

Define uma nova orientação absoluta para a tartaruga. O argumento é uma lista [direçãorolagem direçãocabeceio direção] em graus. É importante checar Compreendendo sua orientação em 3D. Este comando é elaborado para executar em modo Logo3d. Veja também o comando Orientação. Exemplo:

mudeorientação [180 45 90] mostre orientação [180 45 90]

Arcoelipse

Page 204: Manual Logo 3.0

arcoelipse ângulo eixo_menor eixo_maior inícioângulo

O comando Arcoelipse não move a tartaruga. Ele desenha uma parte ou toda a elipse baseado na direção da tartaruga, a posição da tartaruga e os argumentos fornecidos. A elipse começa na parte de trás da tartaruga e faz a varredura de acordo com o valor do ângulo de início definido em inícioângulo. O tamanho é baseado nos valores eixo_menor e eixo_maior. A posição atual da tartaruga será no centro da elipse. O eixo_menor é a menor distância entre a elipse e o ponto central. O eixo_maior é a maior distância entre a elipse e o ponto central. Exemplo:

arcoelipse 360 100 200 0 tat arcoelipse 90 50 50 0 tat arcoelipse 90 50 50 90

Exemplo (um barril em 3D):

logo3d repita 72 [arcoelipse 90 100 150 45 rolepd 5]

Elipse elipse eixo_menor eixo_maior (procedimento de biblioteca)

O comando Elipse não move a tartaruga. Ele desenha uma elipse baseado na direção da tartaruga, a posição da tartaruga e os argumentos fornecidos. O tamanho é baseado nos valores eixo_menor e eixo_maior. A posição atual da tartaruga será no centro da elipse. O eixo_menor é a menor distância entre a elipse e o ponto central. O eixo_maior é a maior distância entre a elipse e o ponto central. Exemplo:

elipse 100 200

Page 205: Manual Logo 3.0

tat elipse 50 50 tat elipse 50 50

Exemplo (tornado em 3D):

logo3d tat repita 72 [elipse 200 100 rolepd 5 pf 5]

Arco arco ângulo raio (procedimento de biblioteca)

O procedimento Arco não move a tartaruga. Ele desenha um arco (parte de uma circunferência) baseado na posição e na direção da tartaruga e nos argumentos fornecidos. O arco inicia na parte de trás da cabeça da tartaruga e continua seu trajeto de acordo com o ângulo. O tamanho é baseado no raio. A posição atual da tartaruga será no centro do arco. Um arco com raio no valor de 360, obviamente, desenhará uma circunferência. Exemplo:

arco 360 100 arco 90 50

Circunferência circunferência raio (procedimento de biblioteca) circunferencia raio

O procedimento circunferência não move a tartaruga. Ele desenha uma circunferência baseado na posição da tartaruga e nos argumentos fornecidos. O tamanho é baseado no raio. A posição atual da tartaruga será no centro do circunferência. Exemplo:

circunferência 100 circunferência 50

Exemplo (uma esfera em 3D):

Page 206: Manual Logo 3.0

logo3d repita 72 [circunferência 100 rolepd 5]

Operações para movimentação da tartaruga Posição Posxyz Coorx Coory Coorz Direção Direçãorolagem Direçãocabeceio Orientação Direçãopara Direçãoparaxyz Distância Distânciaxyz Pixel Proporção Posição posição pos

Retorna uma lista composta de dois números referentes à posição atual (coordenadas [X,Y]) da tartaruga. Exemplo:

tat pd 45 pf 200 esc pos 141.42 141.42

Posxyz posxyz

Page 207: Manual Logo 3.0

Retorna a posição atual da tartaruga, como uma lista de três números, as coordenadas X, Y e Z. Este comando é elaborado para executar no modo Logo3d. Exemplo:

logo3d mudeposxyz [100 100 50] mostre posxyz [100 100 50]

Coorx coorx (procedimento de biblioteca)

Retorna o valor da coordenada cartesiana X da posição atual da tartaruga. No estado inicial do LOGO a coordenada X da tartaruga é 0. Exemplo:

tat pd 90 pf 100 pe 90 pf 100 esc coorx 100

Coory coory (procedimento de biblioteca)

Retorna o valor da coordenada cartesiana Y da posição atual da tartaruga. No estado inicial do LOGO a coordenada Y da tartaruga é 0. Exemplo:

tat pe 90 pf 100 pd 90 pf 100 esc coory 99.999...

Coorz coorz (procedimento de biblioteca)

Retorna um número, a coordenada Z da tartaruga. Este comando é elaborado para executar em modo Logo3d.

Page 208: Manual Logo 3.0

Exemplo:

logo3d mudez 100 mostre coorz 100

Direção direção direcao dç

Retorna um número entre 0 e 360, equivalente à direção da tartaruga. O ângulo é medido no sentido anti-horário. Exemplo:

tat pd 270 pf 100 pd 90 esc dç 0.00 pe 90 esc dç 270

Direçãorolagem direçãorolagem dcrol

Retorna o ângulo de rolagem da tartaruga em graus. É importante checar Compreendendo sua orientação em 3D. Veja também Mudedireçãorolagem. Este comando é elaborado para executar em modo Logo3d. Exemplo:

mudedireçãorolagem 90 mostre direçãorolagem 90

Page 209: Manual Logo 3.0

Direçãocabeceio direçãocabeceio dccab

Retorna o ângulo de cabeceio da tartaruga em graus. É importante checar Compreendendo sua orientação em 3D. Veja também Mudedireçãocabeceio. Este comando é elaborado para executar em modo Logo3d. Exemplo:

mudedireçãocabeceio 90 mostre direçãocabeceio 90

Orientação orientação (biblioteca de procedimento)

Emite uma lista [direçãorolagem direçãocabeceio direção] contendo os diversos ângulos que determinam a orientação da tartaruga em graus. É importante checar Compreendendo sua orientação em 3D. Veja também Mudeorientação. Este comando é elaborado para executar em modo Logo3d. Exemplo:

mudeorientação [180 45 90] mostre orientação [180 45 90]

Direçãopara direçãopara lista direcaopara lista

Retorna um número que equivale ao ângulo que a tartaruga deve girar para poder atingir o ponto na tela especificado por lista. Esta lista deverá ser composta de dois elementos onde o primeiro elemento indica a coordenada x e o segundo elemento indica a coordenada y. Exemplo:

Page 210: Manual Logo 3.0

tat mostre direçãopara [100 100] 45

Direçãoparaxyz direçãoparaxyz lista direcaoparaxyz lista

Retorna uma lista, contendo [direçãorolagem direçãocabeceio direção] por meio da qual a tartaruga deve ser orientada de modo que ela aponte a partir de sua posição atual para a posição definida pelas coordenadas fornecidas como argumento lista [x y z]. É importante checar Compreendendo sua orientação em 3D. Este comando é elaborado para executar em modo Logo3d. Exemplo:

mostre direçãoparaxyz [100 100 0] [0 0 45] mudeorientação direçãoparaxyz [100 100 100] pf distânciaxyz [100 100 100]

Distância distância lista (procedimento de biblioteca)

Retorna um número, a distância que a tartaruga precisa percorrer em linha reta para alcançar a posição dada por lista [x y]. Exemplo:

mostre direçãopara [0 100] 100 mostre direçãopara [300 400] 500 mudedç direçãopara [300 400] pf distância [300 400]

Distânciaxyz distânciaxyz lista (procedimento de biblioteca)

Page 211: Manual Logo 3.0

Retorna um número, a distância que a tartaruga precisa percorrer em linha reta

para alcançar a posição fornecida como argumento em lista [x y z]. Este comando é elaborado para executar em modo Logo3d. Exemplo:

mostre direçãoparaxyz [0 100 0] 100 mostre direçãoparaxyz [100 100 100] 173.205080756888 mudeorientação direçãoparaxyz [100 100 100] pf distânciaxyz [100 100 100]

Pixel pixel

Retorna uma lista de números que representa a intensidade das cores vermelho, verde e azul do pixel corrente sob a tartaruga. Exemplo:

tat mostre pixel [255 255 255] pf 100 mostre pixel [255 255 255] pt 100 mostre pixel [0 0 0]

Proporção proporção proporcao

Page 212: Manual Logo 3.0

Retorna uma lista contendo dois números, os fatores de proporção X e Y, usados por Mudeproporção. (Mas lembre-se de que Mudeproporção pega dois números como entradas, e não uma lista de números.) Exemplo:

mudeproporção 2.0 1.0 repita 4 [pf 100 pd 90] mostre proporção [2 1]

Controle da tartaruga e janela Apareçatat Desapareçatat Apaguedesenho Tartaruga Tirelimite Aumentelimite Ponhalimite Pinte Rotule Mudejanelagráfica Fontejanelagráfica Tamanhorotule Mudeproporção Zoom Rolex Roley Mudefoco Foco Mudeestadojanela Apareçatat apareçatat at

Faz com que a tartaruga apareça na tela, na sua última posição. Para tornar a tartaruga invisível use o comando Desapareçatat (dt).

Page 213: Manual Logo 3.0

Exemplo: tat dt pf 100 at

Desapareçatat desapareçatat dt

Faz a tartaruga desaparecer da tela, tornando-a invisível. É uma boa idéia executar este comando quando estiver fazendo um desenho complexo, porque ocultar a tartaruga aumenta substancialmente a velocidade de processamento para os desenhos. Exemplo:

tat pf 40 dt

Apaguedesenho apaguedesenho ad

Apaga todos os traços deixados na tela, sem modificar a posição e direção da tartaruga. Exemplo:

tat pf 100 ad

Tartaruga tartaruga tat

Page 214: Manual Logo 3.0

Apaga a tela gráfica, colocando a tartaruga na sua posição original ,

com direção 0 (norte). Como Paracentro e Apaguedesenho. Exemplo:

tat pf 100 pd 90 un pf 100 tat pf 100

Tirelimite tirelimite

Informa à tartaruga para que ela entre no modo tirelimite: a partir desse momento, se for solicitado à tartaruga que ela se mova para além dos limites de uma janela de desenho, ela irá "dobrar" e reaparecerá no lado oposto da janela. A borda superior é dobrada até a borda inferior, e a borda esquerda é dobrada para a direita. (Portanto a janela é topologicamente equivalente a um toro.) Este é o modo inicial da tartaruga. Compare com Aumentelimite e Ponhalimite. Exemplo:

aumentelimite pf 950 tat tirelimite pf 950

Aumentelimite aumentelimite al

Informa à tartaruga para que ela entre no modo aumentelimite: a partir desse momento, se for solicitado à tartaruga que ela se mova para além dos

Page 215: Manual Logo 3.0

limites de uma janela de desenho, ela irá move-se para fora da tela. A parte visível da janela de desenho é considerada exatamente como parte de um plano de desenho infinito; a tartaruga pode estar em qualquer lugar no plano. (Se você perder a tartaruga, Paracentro a trará de volta ao centro da janela.) Compare com Tirelimite e Ponhalimite. Exemplo:

aumentelimite pf 950 tat tirelimite pf 950

Ponhalimite ponhalimite pl

Coloca limite na tela, não permitindo que a tartaruga se movimente fora do campo de visão da tela. Se isso acontecer, retornará uma menssagem de erro. Comparar Tirelimite e Aumentelimite. Exemplo:

tat tirelimite pf 900 ponhalimite pf 900 =>tartaruga fora dos limites

Logo3d

Instrui a tartaruga a entrar no modo de perspectiva (Logo tridimensional); ela

adiciona uma terceira dimensão (eixo Z). Logo3d é um termo usado para descrever como nós iremos visualizar um mundo tridimensional em uma superfície bidimensional. Você precisa estar familiarizado com o uso do SuperLogo em 2D antes de começar a trabalhar com composições 3D.

Tudo o que você aprendeu sobre 2D aplica-se aos projetos 3D (modo de perspectiva). Por exemplo, se você criou um código de um desenho em 2D, digamos, uma estrela, você pode executar o mesmo código e colocar a estrela nos seis lados de

Page 216: Manual Logo 3.0

um cubo dando à tartaruga as coordenadas 3D e a orientação corretas antes de você chamar seu código 2D para desenhar a estrela.

Podemos fazer uma analogia da tartaruga no mundo 3D com os aviões. Os aviões possuem três controles para manipulá-los por meio do espaço 3D. Elevadores no térreo (lançamento), um leme à deriva (guinada) e ailerons nas asas (giro). O SuperLogo sempre teve um leme (Direita/Esquerda) e você costumava voar em apenas um plano geométrico. Mas agora o SuperLogo oferece os controles adicionais, ailerons (Roleparadireita/Roleparaesquerda) e elevadores (Cabeceieparatrás/Cabeceieparafrente) para manobras no espaço 3D. Agora você possui um número infinito de planos (quero dizer, geométricos) para sobrevoar, e cada um deles permite qualquer orientação. Uma vez qaue você está no plano desejado, poderá começar a usar seus familiares comandos (Parafrente, Paratrás, Paraesquerda e Paradireita) para movimentar-se.

Leia também a seção Compreendendo sua orientação em 3D.

Veja a seguir um resumo da relação entre os comandos em 2D e os em 3D. Muitos comando estão repetidos em ambas as colunas simplesmente porque eles não são afetados pelo modo 3D. 2D 3D mudexy mudexy (z permanece inalterado) mudexyz mudex (y permanece inalterado) mudex (y e z permanecem inalterados) mudey (x permanece inalterado) mudey (x e z permanecem inalterados) mudez coorx coorx coory coory coorz posição posição (z solto) posxyz mudeposição mudeposição (z permanece inalterado) mudeposxyz direçãopara direçãopara direçãoparaxyz distância distância distânciaxyz direção direção direçãorolagem direçãocabeceio orientação mudedireção mudedireção

Page 217: Manual Logo 3.0

mudedireçãorolagem mudedireçãocabeceio mudeorientação paradireita (pd) paradireita (pd) (no plano atual) roleparadireita (rolepd) cabeceieparatrás (cabeceiept) paraesquerda (pe) paraesquerda (pe) (no plano atual) roleparaesquerda (rolepe) cabeceieparafrente (cabeceiepf) aumentelimite logo3d tirelimite ponhalimite ativetartaruga 0-1023 ativetartaruga 0-1023 ativetartaruga -1 (é a posição de seus olhos) ativetartaruga -2 (é para onde você está olhando) arcoelipse arcoelipse (excelente para esferas) Limitações:

Existem vários comandos que funcionarão no modo 3D, mas ainda possuirão um comportamento 2D. Suas ações irão ocorrer nas coordenadas X, Y e Z corretas. Mas a orientação será limitada a um plano 2D. Por exemplo, você não pode desenhar um texto com Rotule em seis lados do cubo. Mas se você quisesse rotular os oito vértices do cubo, cada rótulo pode ser posicionado corretamente em cada vértice utilizando movimentadores 3D. Rotule Recortebitmap Colebitmap Copiebitmap Blocobmp Pinte Pixel

O modo Logo3d não remove linhas ocultas ("hidden lines"). Para isso, os objetos precisam ser compostos de polígonos.

O modo Logo3d não permite movimentar dinamicamente o olho. Isso porque o SuperLogo não armazenas seus objetos (seus vetores) em 3D por razões de desempenho. Ele os armazena em um bitmap 2D, como ele sempre faz. Entretanto, você pode fazer uma manipulação dinâmica "rápida" de duas outras maneiras.

Page 218: Manual Logo 3.0

Uma maneira simples é manter sua cena o mais simples possível (de

acordo com a capacidade de seu computador). Basta limpar a tela e alterar a visão de olho (tartaruga -1) ou a posição dos objetos e desenhar novamente. Vale a pena lembrar que objetos curvos (como aqueles inspirados em elipses) geram muitos vetores. A outra opção é gravar cada "cena" em um bitmap e reproduzi-los de acordo com a taxa que você desejar. Não importa se você esteja "gravando" cenas 2D ou 3D, ela será a mesma. Isto dependerá de quanta memória você possui no seu computador. Pinte pinte

Pinta uma região da janela de desenho que contém a tartaruga e delimitada por linhas que tinham sido desenhadas anteriormente. Exemplos:

repita 4 [pf 100 pd 90] pd 45 un pf 20 pinte

Pinte pode ser usado no modo Logo3d quando a área a ser pintada estiver delimitada e você for pintar somente o que estiver na visualização plana. Por exemplo, se você possui um cubo, não desenhe todos os seis lados, somente três podem ser visualizados, então desenhe somente esses lados e pinte-os. Exemplo (3D):

aprenda quadrado :cor repita 4 [pf 100 pd 90] un pd 45 pf 50 mudecp :cor pinte pt 50 pe 45 ul

Page 219: Manual Logo 3.0

fim

aprenda cubo logo3d rolepd 45 cabeceieparafrente 45 quadrado [255 0 0] rolepd 90 quadrado [0 255 0] cabeceieparatrás 90 quadrado [0 0 255] fim

Rotule rotule texto

A entrada, que pode ser uma palavra ou uma lista, é escrita na tela. Se texto for uma lsita, quaisquer sublistas serão delimitadas por colchetes, mas o texto inteiro não é delimitado por colchetes. Você pode escrever qualquer objeto do Logo (números, listas e strings). A cor do texto é determinada por Mudecl. A posição do texto é determinada pela posição da tartaruga. A fonte do texto é determinada por Mudefontejanelagráfica ou Mudefjangr. O ângulo do texto é determinado pela cabeça (direção) da tartaruga. O tamanho do texto pode ser detemindado por Tamanhorotule. Exemplo:

rotule "Olá

Rotule pode ser usado no modo Logo3d, mas o texto não ficará no mesmo plano que o da tartaruga, embora fique na posição correta. Ele ainda seguirá a direção da tartaruga para definir a orientação do texto. Exemplo (Rotule o eixo 3D)

Page 220: Manual Logo 3.0

aprenda eixo mudefontejanelagráfica[[Courier New] -19 0 0 700 0 0 0 0 3 2 1 49] pd 90 mudey 200 rotule "+Y mudey -200 rotule "-Y mudey 0 mudex 200 rotule "+X mudex -200 rotule "-X mudex 0 mudez 200 rotule "+Z mudez -200 rotule "-Z mudez 0 pe 90 fim

logo3d tat ativetartaruga -1 mudeposxyz [600 600 800] ativetartaruga 0 eixo

Mudefontejanelagráfica mudefontejanelagráfica fonte

A entrada é uma lista que descreve completamente uma fonte. Uma fonte determina quais de seus caracteres aparecem na tela quando você está usando o comando Rotule. As fontes disponíveis dependem de seu computador. O SuperLogo possui duas maneiras de especificar a fonte que você deseja. O modo mais fácil de utilizar fontes no SuperLogo é selecionando a fonte desejada a partir do Menu e capturando os atributos utilizando o comando Fontejanelagráfica.

Page 221: Manual Logo 3.0

fonte: (LISTA) que contém a seguinte informação: [ [Nome_da_fonte] Altura Largura Orientação Espessura Itálico Sublinhado Grifado Conjunto_Char Prec_saida ClipPrecision Qualidade PitchAndFamily].

Onde: Nome_da_fonte: (LISTA) Especifica o nome da fonte. Altura: (INTEIRO) Especifica a altura desejada, em unidades lógicas, para a fonte. Se este valor é maior que zero, ele especifica a altura da célula da fonte. Se ele é inferior a zero, especifica a altura do caractere da fonte. Largura: (INTEIRO) Especifica a largura desejada, em unidades lógicas, para a fonte. Orientação: (INTEIRO) Especifica a orientação desejada, em graus, para a fonte. Espessura: (INTEIRO) Especifica a espessura da fonte. Este membro varia entre 0 e 900 em incrementos de 100. Um valor 0 significa que está sendo utilizada a largura padrão. Itálico: (INTEIRO) Especifica uma fonte em itálico, se for diferente de zero. Sublinhado: (INTEIRO) Especifica uma fonte sublinhada, se for diferente de zero. Grifado: (INTEIRO) Especifica uma fonte grifada, se for diferente de zero. Conjunto_Char: (INTEIRO) Especifica o conjunto de caracteres da fonte. Prec_saida: (INTEIRO) Especifica a precisão de saída da fonte. ClipPrecision: (INTEIRO) Especifica a “Clip Precision” da fonte. Qualidade: (INTEIRO) Especifica a qualidade da fonte. PitchAndFamiliy: (INTEIRO) Especifica o tipo e família da fonte. Nota: se você digitar erroneamente o nome da fonte, mudefontejanelagráfica irá relacionar quais fontes estão disponíveis. Exemplo:

mudefontejanelagráfica [[Times New Roman] -24 0 0 400 0 0 0 0 3 2 1 18] rotule "Olá

Fontejanelagráfica fontejanelagráfica

Page 222: Manual Logo 3.0

Retorna uma lista com as propriedade da fonte ativa para a Janela Gráfica do SuperLogo. Veja Mudefontejanelagráfica para definições dos membros da LISTA. Exemplo:

mudefontejanelagráfica [[Times New Roman] -24 0 0 400 0 0 0 0 3 2 1 18] mostre fontejanelagráfica [[Times New Roman] -24 0 0 400 0 0 0 0 3 2 1 18]

Tamanhorotule tamanhorotule texto

Este comando irá retorna o tamanho do texto [largura altura] quando impresso na tela. A entrada, que pode ser uma palavra ou uma lista, é a mesma que você definiria para Rotule. Você pode usar esta informação para construir outras formas do comando Rotule. Também é possível utilizar esta informação para "preparar" um local para o texto (por exemplo, colocando-o dentro de um quadro ou escolhendo um segundo plano). Exemplo:

mostre tamanhorotule "Olá [44 24]

Mudeproporção mudeproporção escala_x escala_y (Não é necessário no SuperLogo, mas está disponível para usuários que gostam de "desajustar deliberadamente a taxa de aspecto").

Ajusta a taxa de aspecto e escala da exibição gráfica. Depois de usar este comando, todos os movimentos da tartaruga serão ajustados pela multiplicação das extensões horizontal e vertical do movimento pelos dois números fornecidos como entradas. Por exemplo, após a instrução de movimento "mudeproporção 2 1" com um valor de 45 graus irá mover-se duas

Page 223: Manual Logo 3.0

vezes tanto no sentido horizontal quanto no vertical. Se seus quadrados não ficarem fora de esquadro, tente isto. (Como outra alternativa, você pode mudar deliberadamente a taxa de aspecto para desenhar uma elipse.) Exemplo:

mudeproporção 2.0 1.0 repita 4 [pf 100 pd 90] mostre proporção [2 1]

Zoom zoom escala

Este comando permite alterar a escala da Janela Gráfica do SuperLogo.O argumento é a quantidade de zoom (escala) usada. Um número maior que 1,0 torna as coisas maiores (por exemplo, 2,0 torna as coisas duas vezes maiores), um número menor que 1,0 torna as coias menortes (0,5 faz as coisas ficarem 50% menores). Se uma imagem existente está na tela quando você dá um zoom nela, ela irá aumentar ou diminuir (a propósito, isto demora um pouco), de acordo com a quantidade de zoom (ela pode parecer um pouco serrilhada). Se você "desenhar" enquanto dá zoom, as coisas não parecerão serrilhadas. Veja também o Menu Zoom.

Embora as coisas possam parecer serrilhadas, o SuperLogo trata tudo como se o zoom fosse normal (1,0) e imprime somente no modo normal. Após retornar para o modo normal de zoom, 1,0, sua imagem não ficará mais esticada ou encolhida. Em outras palavras, com um zoom de 1,0, as linhas nunca ficam serrilhadas, mesmo que você as tenha desenhado utilizando um zoom de 0,5 ou 2,0. NOTA: Este recurso funciona melhor se você escolher um zoom que é um "múltiplo" de dois. Por exemplo 2, 4, 8, 1/2 (0,5), 1/4 (0,25), 1/8 (0,125) etc. Exemplo:

repita 4 [pf 100 pd 90] zoom 0,5

Page 224: Manual Logo 3.0

zoom 2,0 Rolex rolex número

Permite ao SuperLogo controlar o rolamento horizontal da tela. Um número positivo faz a tela rolar para direita e um número negativo faz a tela rolar para a esquerda. Se número for zero, a tela assume a posição central (com relação ao eixo x). Exemplo:

repita 10 [rolex 10]

Roley roley número

Permite ao SuperLogo controlar o rolamento vertical da tela. Um número positivo faz a tela rolar para baixo e um número negativo faz a tela rolar para cima. Se número for zero, a tela assume a posição central (com relação ao eixo y).

Exemplo:

repita 10 [roley 10]

Mudefoco mudefoco palavra

Habilita o SuperLogo a controlar a janela selecionada, a qual passará a ter o foco. A janela a ser selecionada é especificada em palavra. Veja também Foco. Exemplo:

mudefoco [Janela de Comandos]

Page 225: Manual Logo 3.0

Foco foco

Retorna o cabeçalho da janela com o foco corrente (correntemente selecionado). Veja também Mudefoco. Exemplo: mostre foco [Janela de Comandos] Mudeestadojanela mudeestadojanela nome_janela estado

Este comando permite controlar o estado (0, 1, 2 etc) das janelas (por exemplo: Ocultar, Exibir etc.) do título (nome_janela) fornecido. Tenha cuidado ao usar este comando. Estados: estado 0: Oculta a janela e ativa outra. estado 1: Ativa e exibe a janela. Se a janela estiver maximizada ou minimizada, o Windows a restaura ao seu tamanho e posição originais. Um aplicativo precisa usar este sinalizador quando está exibindo a janela pela primeira vez. estado 2: Ativa a janela e a exibe minimizada. estado 3: Ativa a janela e a exibe maximizada. estado 4: Exibe a janela minimizada. A janela ativa permanece ativa. estado 5: Ativa a janela e a exibe em seu tamanho e posição atuais. estado 6: Minimiza a janela especificada e ativa a próxima janela exibida na ordem de A a Z. estado 7: Exibe a janela em seu tamanho e posição mais recentes. A janela ativa permanece ativa. estado 8: Exibe a janela em seu estado atual. A janela ativa permanece ativa. estado 9: Ativa e exibe a janela. Se a janela estiver minimizada ou maximizada, o Windows a restaura ao seu tamanho e posição originais. Um aplicativo precisa especificar este indicador quando restaurar a janela minimizada. estado 10: Reservado.

Page 226: Manual Logo 3.0

Exemplo: Para maximizar:

mudeestadojanela [Janela de Comandos] 3 Usando cores

Vários comandos (Mudecl, Mudecp, Mudecf) existem no SuperLogo para especificar as cores e suas intensidades. A entrada representa o quanto de vermelho, verde e azul você quer em cada cor, variando de 0 a 255. Por meio dessas combinações é possível atingir um total de 16.7 milhões de cores. Exemplo de como configurar alguns lápis comuns: mudecl [000 000 000] ou mudecl “preto mudecl [255 255 255] ou mudecl “branco mudecl [255 000 000] ou mudecl “vermelho mudecl [000 255 000] ou mudecl “verde mudecl [000 000 255] ou mudecl “azul Para permitir uma maior compatibilidade com outros recursos do SuperLogo, implementações e simplicidade para os programadores inicinantes no SuperLogo, o programa também trabalha com um modo simples de índice de cores. Exemplo:

mostre cl [0 0 0] mudecl 5 mostre cl 5 mudecl [255 0 0] mostre cl [255 0 0]

Veja a seguir o índice de cores: 0 -> [ 0 0 0]

Page 227: Manual Logo 3.0

1 -> [ 0 0 255] 2 -> [ 0 255 0] 3 -> [ 0 255 255] 4 -> [255 0 0] 5 -> [255 0 255] 6 -> [255 255 0] 7 -> [255 255 255] 8 -> [155 96 59] 9 -> [197 136 18] 10 -> [100 162 64] 11 -> [120 187 187] 12 -> [255 149 119] 13 -> [144 113 208] 14 -> [255 163 0] 15 -> [183 183 183] Compreendendo sua orientação em 3D

A vida em 2D é simples: Direção é afetada por Paraesquerda, Paradireita e Mudedireção.

Mas em 3D, no modo Logo3d as coisas são um pouco mais complicadas: Direção é afetada por Paraesquerda, Paradireita e Mudedireção. Direçãorolagem é afetado por Roleparaesquerda, Roleparadireita e Mudedireçãorolagem. Direçãocabeceio é afetado por Cabeceieparatrás, Cabeceieparafrente e Mudedireçãocabeceio.

No entanto, há mais para fazer do que isso. Direçãorolagem também pode afetar sua Direção, assim como Direçãocabeceio também pode afetar Direçãorolagem etc. O modo mais fácil para entender isso é seguindo um exemplo:

logo3d paradireita 90 (mostre arredonde direçãorolagem arredonde direçãocabeceio arredonde direção) 0 0 90 tat

Page 228: Manual Logo 3.0

cabeceieparafrente 90 roleparadireita 90 cabeceieparatrás 90 (mostre arredonde direçãorolagem arredonde direçãocabeceio arredonde direção) 0 0 90

Mas não se preocupe, o SuperLogo torna tudo isso fácil, basta que você entenda

algumas regras básicas para não ficar completamente perdido no espaço 3D. Os controles de tartaruga Direçãorolagem, Direçãocabeceio e Direção afetam um ao outro, mas somente naquilo que é importante. O mais importante é que uma alteração em Direção (com Paradireita, Paraesquerda ou Mudedireção) não irá afetar Direçãorolagem ou Direçãocabeceio. É por isso que você pode usar muto do seu código 2D no ambiente 3D.

Há também uma outra regra para ser compreendida, você não pode dizer simplesmente:

logo3d mudedireçãorolagem 45 mudedireçãocabeceio 45 mudedç 45 (mostre arredonde direçãorolagem arredonde direçãocabeceio arredonde direção) 45 45 45

E esperar conseguir uma orientação absoluta de 45, 45, 45. Veja:

tat paradireita 45 roleparadireita 30 cabeceieparatrás 30 ; Agora tente configurar sozinho novamente 45,45,45 mudedireçãorolagem 45 mudedireçãocabeceio 45 mudedç 45 (mostre arredonde direçãorolagem arredonde direçãocabeceio arredonde direção) 248 29 45

Mas não se preocupe porque há uma solução, ela é chamada Mudeorientação.

tat

Page 229: Manual Logo 3.0

paradireita 45 roleparadireita 30 cabeceieparatrás 30 ; Agora tente configurar sozinho novamente 45,45,45 mudeorientação [45 45 45] (mostre arredonde direçãorolagem arredonde direçãocabeceio arredonde direção) 45 45 45

Mudeorientação compreende as interações entre Direçãorolagem, Direçãocabeceio e Direção. Tudo o que Mudeorientação precisa fazer é colocar as coisas na ordem correta. Ela basicamente retorna sua Orientação atual e aplica a solicitada. Ela faz isso seguindo uma ordem bastante específica. Sua Orientação atual também pode ser relatada ou salva utilizando o comando Orientação.

tat paradireita 45 mostre orientação [0 0 45] atribua "minha_orient orientação paradireita 90 cabeceieparatrás 180 mudeorientação :minha_orient mostre orientação [0 0 45]

Há também um outro comando referente a sua Orientação, que é Direçãoparaxyz.

Direçãoparaxyz emitirá uma orientação que é compatível com Mudeorientação.

mudeorientação direçãoparaxyz [100 100 0] mostre orientação [0 0 45] pf distânciaxyz [100 100 0] mostre posxyz [100 100 0]

Após dizer tudo isso,você realmente não precisa pensar em termos de Orientação

absoluta. Orientação e Mudeorientação na maioria das vezes serão usadas para salvar, relatar e recuperar sua Orientação (o mesmo que você faz com Direção e Mudedireção em planos 2D). E, como explicado anteriomente, alterações em sua direção com

Page 230: Manual Logo 3.0

Paradireita, Paraesquerda e Mudedireção têm apenas o mesmo efeito que no plano 2D (sua Direção).

Você também deve estar pensando em fazer o mesmo em planos 2D. Não é preciso ficar sempre preocupado com sua Direção absoluta em 2D, na maioria das vezes, ela é relativa a sua Direção atual. Ela não possui nenhuma diferença em 3D, exceto pelo fato de você possuir mais opções de movimento. Imagine que você está em um avião e que está no cockpit da tartaruga. Agora decida para onde deseja ir. Desenhando sólidos 3D

Os sólidos 3D no SuperLogo utilizam todos os comandos 3D padrão, com exceção de alguns poucos comandos adicionais que ajudam o SuperLogo a entender o que você está desenhando. Para eliminação de linhas ocultas ou de superfícies ocultas, você precisa definir superfícies (e não apenas vetores). As superfícies são apenas polígonos preenchidos. Basta que você informe ao SuperLogo quando estará iniciando uma superfície e quando terminará. Se você usou somente vetores para desenhar uma caixa, o SuperLogo pode não reconhecer se ele é uma caixa fechada de seis lados (um cubo sólido) ou uma caixa de quatro lados com a parte superior e a inferior abertas. Vetores sozinhos são ambíguos quando utilizados junto com superfícies.

O SuperLogo no modo 3D irá cuidar do preenchimento correto dos polígonos de acordo com a cor desejada baseando-se na fonte de luz, nas obstruções e na cor da superfície. Veja os novos comandos: Iníciopolígono: Inicia um novo polígono (uma superfície preenchida) Fimpolígono: Finaliza a definição do polígono e o exibe. Desenhepolígono: Sombreia e exibe todos os polígonos que foram exibidos. Ativetartaruga -3: Use esta tartaruga para posicionar a fonte de luz. Mudeiluminação: Use para definir como os objetos precisam ser iluminados.

Se você desenhou uma caixa em 3D (com seis polígonos) e todos eles foram criados com a mesma cor, o que você verá é algo parecido com um octógono preenchido. A cor final é resultado do efeito produzido pelo ângulo da superfície entre seu olhar (Atat -1) e a fonte de luz (Atat -3).

Page 231: Manual Logo 3.0

O modelo de iluminação 3D no SuperLogo é muito poderoso e utiliza algumas da técnicas mais modernas, mas ele exige alto desempenho. Ele não cria efeitos de sombra e refletivos, por exemplo. Às vezes você poderá ver falhas de pixels em seus trabalhos. Isto é normal e é um artefato do algoritmo na implementação. Iníciopolígono Fimpoligono Desenhepolígono Mudeiluminação Iluminação Iníciopolígono iníciopolígono

Iníciopolígono informa ao SuperLogo que você deseja definir um polígono. Cada movimento subseqüente resultará na adição da coordenada de destino na lista de vértices do polígono. A definição é finalizada com a utilização do comando Fimpoligono. Para visualizar TODOS os polígonoes definidos como polígonos com formas, você precisa utilizar o comando Desenhepolígono. Certifique-se de que você esteja dominando as Restrições de polígonos. Exemplo:

aprenda quadrado iníciopolígono repita 4 [pf 100 pd 90] fimpoligono fim logo3d repita 72 [quadrado rolepd 5] desenhepolígono

Fimpoligono fimpoligono

Fimpoligono informa ao SuperLogo que você completou a definição de um polígono que você começou quando usou o comando Iníciopolígono. Observe que a coordenada atual não é adicionada como um vértice do polígono quando você usar o

Page 232: Manual Logo 3.0

comando Fimpoligono. Mas o movimento que você fez para chegar até a coordenada atual será incluído. Certifique-se de que você esteja dominando as Restrições de polígonos. Exemplo:

aprenda quadrado iníciopolígono repita 4 [pf 100 pd 90] fimpoligono fim logo3d repita 72 [quadrado rolepd 5] desenhepolígono

Desenhepolígono desenhepolígono

Desenhepolígono pede para o SuperLogo apagar a tela e exibir todos os polígonos definidos com Iníciopolígono e Fimpoligono. Somente polígonos sombreados serão mostrados. Os polígonos serão iluminados de acordo com a posição da fonte de luz utilizando Ativetartaruga -3 e parâmetro de iluminação usando Mudeiluminação. Certifique-se de que você esteja dominando as Restrições de Polígonos.

Lembre-se de que, se você precisar adicionar outras coisas ao seu desenho, como Rotule ou BITMAPs etc., deverá fazê-lo depois do último Desenhepolígono.

Vale a pena lembrar que você pode usar Desenhepolígono imediatamente depois de qualquer Fimpoligono para ver se os polígonos ficam sombreados à medida que seu programa constrói seus objetos. Mas lembre-se de que Desenhepolígono é uma operação pesada e pode deixar seu programa consideravelmente lento se você chamá-lo a cada Fimpoligono. Exemplo:

aprenda quadrado iníciopolígono repita 4 [pf 100 pd 90]

Page 233: Manual Logo 3.0

fimpoligono fim logo3d repita 72 [quadrado rolepd 5] desenhepolígono

Mudeiluminação mudeiluminação lista

Define como os objetos serão iluminados. O argumento é uma lista de dois números que variam entre 0,0 e 1,0, a quantidade de luz ambiente e difusa. Luz ambiente define o quão brilhante fica a iluminação da cena, quanto maior o número, mais brilhante é a luz. Luz difusa não é uma propriedade da fonte de luz, mas uma propriedade que define a suavidade da superfície (quanta luz ela dispersa). Um valor alto significa que os objetos são suaves e reflexivos (como uma placa de mármore), um valor baixo significa que os objetos são rústicos (como o giz). Para posicionar a luz, use Ativetartaruga -3. Veja também Iluminação. Exemplo 1:

mudeiluminação [0.3 0.6] mostre iluminação [0.3 0.6]

Exemplo 2:

aprenda quadrado iníciopolígono repita 4 [pf 100 pd 90] fimpoligono fim tat logo3d limpepaleta mudecl [255 0 0] mudecf [0 0 0] repita 72 [quadrado rolepd 5] desenhepolígono

Page 234: Manual Logo 3.0

repita 50 [mudeiluminação (lista (sorteienúmero 100)/100 (sorteienúmero 100)/100) escreva iluminação espere 60]

Iluminação iluminação

Retorna os atributos de iluminação, uma lista de dois números, contendo os valores de Luz ambiente e Luz difusa. Veja também Mudeiluminação. Exemplo:

mudeiluminação [0.3 0.6] mostre iluminação [0.3 0.6]

Restrições de polígonos 1: Os três primeiros vértices de um polígono precisam formar um triângulo. 2: Um polígono precisa ser convexo. 3: Um polígono precisa ser plano (sem valores de cabeceieparatrás, cabeceieparafrente, rolepd, rolepe) entre iníciopolígono/fimpoligono.

Todas essas propriedades ocorrem muito naturalmente no Logo. Nota 1: o triângulo pode ser extremamente baixo. Isto é legal:

iníciopolígono atribua "minha_pos posxyz pf 100 pd 0.00000001 pf 100 mudepos :minha_pos fimpoligono

Isto NÃO é legal (mesmo que seja para criar um polígono convexo.)

iníciopolígono

Page 235: Manual Logo 3.0

atribua "minha_pos posxyz pf 50 pf 50 pd 90 pf 100 mudepos :minha_pos fimpoligono

Nota 2: O que significa convexo? Selecione duas coordenadas quaisquer dentro do polígono e una-as com uma linha reta. Se essa linha ficar fora do polígono, significa que ele não é convexo. Triângulos, quadrados, circunferências etc. são convexos. A letra "E", como um polígono, não é convexa. Isto é legal

repita 4 [pf 100 pd 90] Isto NÃO é legal

repita 4 [pf 50 pd 90 repita 3 [pf 25 pe 90] pd 180 pf 50 pd 90] Nota 3: O que significa plano? O polígono precisa ser plano. Isto é legal

repita 4 [pf 100 pd 90] Isto NÃO é legal

repita 4 [pf 50 pd 90 pd 90 repita 3 [pf 25 pe 90] pd 180 rolepe 90 pf 50 pd 90]

Note em 2 e 3:

Page 236: Manual Logo 3.0

Você pode superar as restrições 2 e 3 quebrando o objeto em polígonos mais simples que atendam às regras. Você pode usar Circunferência, Elipse, Arco e Arcoelipse. Exemplo (usando Circunferência):

logo3d repita 36 ~ [iníciopolígono circunferência 100 fimpoligono rolepd 10] desenhepolígono

Operações para tartarugas e janelas Évisível Évisível évisível

Retorna a palavra verd sempre que a tartaruga estiver em estado visível. Caso contrário, retorna a palavra falso. Ver Apareçatat e Desapareçatat. Exemplo: dt esc évisível falso at esc évisível verd Controle de lápis

A tartaruga carrega uma caneta capaz de desenhar figuras. A qualquer

momento a caneta pode ser movida PARA CIMA (neste caso, mover a

Page 237: Manual Logo 3.0

tartaruga não muda o que está na tela) ou PARA BAIXO (nesse caso, a tartaruga deixa um rasto). Se a caneta estiver para baixo, ela pode funcionar em um dos três seguintes modos: Uselápis (desenha linhas quando a tartaruga se move), Useborracha (apaga quaisquer linhas que possam ter sido desenhadas naquele caminho anteriormente) ou Useinversor (inverte o status de cada ponto ao longo do caminho da tartaruga). Usenada Uselápis Useborracha Useinversor Restauralápis Mudecl Mudecp Mudecf Mudeespessuradolápis Mudelápis Limpepaleta Usenada usenada un

Levanta a caneta (a tartaruga não deixa rastro ao se movimentar). Veja Uselápis. Exemplo:

repita 10 [pf 10 un pf 10 pf] Uselápis uselápis ul

Abaixa a caneta, ou seja, a tartaruga passa a riscar ao se movimentar. Veja

Usenada. Exemplo:

useinversor pf 100

Page 238: Manual Logo 3.0

pt 100 uselápis pf 100 pt 100

Useborracha useborracha ub

Abaixa a caneta e muda o modo para Borracha (ou seja, a tartaruga apaga por onde passar). Para restaurar a caneta ao modo normal use Uselápis. Exemplo:

pf 100 useborracha pt 100

Useinversor useinversor ui

Abaixa a caneta e define o modo como Inversor (inverte o status dos pontos por onde a tartaruga passar). Para restaurar a caneta ao modo normal use Uselápis. Exemplo:

useinversor pf 100 pt 100 uselápis pf 100 pt 100

Restauralápis restauralápis (procedimento de biblioteca)

Define o estado da caneta para a inicialização padrão (espessura, cor e modo Uselápis).

Page 239: Manual Logo 3.0

Exemplo: useinversor pf 100 restauralápis pt 100

Mudecl mudecl vetor_da_cor

Define a caneta como vetor_da_cor. O vetor_da_cor é uma lista [vermelho verde azul] de intensidades. A cor da caneta afeta o texto desenhado (Rotule) e qualquer linha desenhada com a tartaruga (usando, por exemplo, Parafrente). Para uma explicação dos argumentos, veja Usando Cores. vetor_da_cor: (LISTA) Lista de três inteiros representando as intensidades Vermelho, Verde e Azul, cada uma variando de 0 a 255. Exemplo:

repita 255 [mudecl (lista contevezes 0 0) pf 100 pt 100] Exemplo 2:(um erro muito comum em Logo)

atribua "vermelho 100 atribua "verde 100 atribua "azul 100 mudecl [:vermelho :verde :azul] <falhará> mudecl (lista :vermelho :verde :azul) <funcionará>

Mudecp mudecp vetor_da_cor

Define a cor de preenchimento como vetor_da_cor. O vetor_da_cor é uma lista de intensidades [vermelho verde azul]. A cor de preenchimento afeta os comandos Pinte e Blocobmp. Para uma explicação dos argumentos, veja Usando Cores. vetor_da_cor: (LISTA) Lista dos três primeiros inteiros que representam as intensidades Vermelho, Verde e Azul, cada um variando de 0 a 255. Exemplo:

Page 240: Manual Logo 3.0

tat repita 4 [pf 100 pd 90] pd 45 un pf 20 mudecp [0 255 0] pinte tat repita 4 [pf 100 pd 90] pd 45 un pf 20 mudecp [125 125 125] pinte

Mudecf mudecf vetor_da_cor

Define a cor do fundo como vetor_da_cor. O vetor_da_cor é uma lista de intensidades [vermelho verde azul]. A cor da tela define imediatamente a cor de segundo plano. Para uma explicação dos argumentos, veja Usando Cores. vetor_da_cor: (LISTA) Lista dos três inteiros que representam as intensidades Vermelho, Verde e Azul, cada um variando de 0 a 255. Exemplo:

mudecf [0 0 0] mudecf [255 255 255] repita 4 [pf 100 pd 90]

Mudeespessuradolápis mudeespessuradolápis espessura

A espessura é uma lista de dois números, largura e altura. O SuperLogo usa somente a largura deles. Portanto basta estabelecer o mesmo valor para ambos. Exemplo:

Page 241: Manual Logo 3.0

mudeespessuradolápis [5 5] Mudelápis mudelápis lista (procedimento de biblioteca)

Define a posição e o modo do lápis de acordo com a informação na lista de entrada, que pode ser tirada de uma invocação anterior de Lápis. lista: (LISTA) Uma lista representando o lápis como segue

[éuselápis modotraço espessurtadolápis cl uselápis]. Exemplo:

tat repita 4 [pf 100 pd 90] atribua "meu_lápis lápis mudeespessuradolápis [20 20] tat repita 4 [pf 100 pd 90] mudelápis :meu_lápis tat repita 4 [pf 100 pd 90]

Limpepaleta limpepaleta

Este comando limpa a paleta de cores. A paleta de cores é preenchida usando-se os comandos Mudecl, Mudecf e Mudecp. A paleta é suportada somente quando as janelas estão no modo de 256 cores (veja Usando cores). Depois que você esgotar a janela de cores, irá escolher a combinação mais próxima. Por exemplo, se o comando:

repita 256 [mudecl (lista contevezes 0 0)] é relatado, ele pode preencher a paleta com 256 sombras de vermelho. Neste momento, a paleta pode estar cheia. Se você agora queria 256 sombras de verde, elas poderão não estar disponíveis (e combinadas com vermelho). Para que elas estejam disponíveis, você deve abrir mão das 256 sombras de vermelho. Você pode fazer isso "limpando a paleta". Se você deseja um amplo leque de cores, então selecione na paleta. Por exemplo, o código a seguir poderia lhe oferecer 216 cores, cobrindo uma ampla variedade. Uma vez as poucas cores, à esquerda na paleta, são usadas, as janelas terão algo ressonante

Page 242: Manual Logo 3.0

para combinar com as solicitações (ao contrário do exemplo acima, no qual somente as sombras dos vermelhos são combinadas).

repita 6 [ atribua "vermelho contevezes*40~ repita 6 [atribua "verde contevezes*40~ repita 6 [atribua "azul contevezes*40~ mudecl (lista :vermelho :verde :azul)]~ ]~ ]

Lembre-se também de que carregar arquivos .BMP (Carreguebitmap) utiliza cores da paleta. Que mais uma vez pode ser limpo com o comando limpepaleta. Limpar a tela NÃO limpa a paleta. Exemplo:

repita 256 [mudecl (lista contevezes 0 0)] estado semestado limpepaleta estado semestado

Operações para lápis Éuselápis Modotraço Cl Cp Cf Espessuradolápis Lápis Éuselápis éuselápis euselapis

Retorna verd se o lápis está ativado e falso caso contrário. Exemplo:

Page 243: Manual Logo 3.0

tat pf 50 mostre éuselápis verd usenada pf 50 mostre éuselápis falso

Modotraço modotraço mt

Retorna uma das palavras: lápis, borracha ou inversor de acordo como a tartaruga está operando. Exemplo:

uselápis mostre modotraço lápis useborracha mostre modotraço borracha useinversor mostre modotraço inversor

Cl cl (procedimento de biblioteca)

Retorna a cor do lápis em uma lista que contém a combinação das tonalidades anteriormente especificadas.

Page 244: Manual Logo 3.0

Exemplo: mudecl [100 200 50] mostre cordolápis [100 200 50]

Cp cp (procedimento de biblioteca)

Retorna a cor de preenchimento em uma lista que contém a combinação das tonalidades anteriormente especificadas. Exemplo: mudecp [100 200 50] mostre cordepreenchimento [100 200 50] Cf cf (procedimento de biblioteca)

Retorna a cor do fundo da tela em uma lista que contém a combinação das tonalidades anteriormente especificadas. Exemplo:

mudecf [100 200 50] mostre cordofundo [100 200 50]

Espessuradolápis espessuradolápis espl

Retorna o tamanho do lápis em uma lista que contém largura e

Page 245: Manual Logo 3.0

comprimento. Observação: a largura não é usada no SuperLogo. Exemplo:

mudeel [20 20] pf 100 mostre espessuradolápis [20 20] mudeel [1 1] pf 100 mostre espessuradolápis [1 1]

Lápis Lápis (procedimento de biblioteca)

Retorna uma lista contendo a posição, modo e características do lápis para ser usado por Mudelápis. Exemplo:

tat repita 4 [pf 100 pd 90] un pd 90 pf 200 pe 90 ul atribua "x lápis mudeespessuradolápis [20 20] repita 4 [pf 100 pd 90] un pd 90 pf 200 pe 90 ul mudelápis :x repita 4 [pf 100 pd 90]

GERENCIADOR DA ÁREA DE TRABALHO Definição de procedimento

Page 246: Manual Logo 3.0

Definição de variáveis Listas de propriedades Predicados (área de trabalho) Operações (área de trabalho) Inspeção Controle de área de trabalho Definição de procedimento Aprenda Fim Defina Texto Todotexto Copie Aprenda aprenda nome_proc :parâmetro1 :parâmetro2 ...

Comando que prepara o Logo para aceitar uma definição de procedimento. O procedimento será chamado nome_proc e não precisa ser exatamente um procedimento com esse nome. Os parâmetros serão chamadas parâmetro1, parâmetro2 etc. É permitido qualquer número de entradas, incluindo nenhuma. Os nomes dos procedimentos e entradas respeitam letras maiúsculas e minúsculas.

As entradas podem ser zero ou mais entradas opcionais, representada pela seguinte notação: [:nomedaentrada padrão.valor.expressão] Exemplo:

aprenda proced :lista_ent [:valor_inicial primeiro :lista_ent] Se o procedimento é invocado por

proced [a b c] então o parâmero :lista_ent terá o valor [A B C] e o parâmetro :valor_inicial terá o valor A. Se o procedimento é invocado por

Page 247: Manual Logo 3.0

(proced [a b c] "x)

então :lista_ent terá o valor [A B C] e :valor_inicial terá o valor X.

O número de entradas PADRÃO para um procedimento, que é o número de entradas que será aceito se sua invocação não for feita entre parênteses, é geralmente igual ao número mínimo. Se você quiser um número padrão diferente, pode indicá-lo fornecendo o valor padrão desejado como o último conteúdo na linha APRENDA. Exemplo: aprenda proced :in1 [:in2 "onoono] [:in3] 3

Este procedimento possui um número mínimo de entradas, três entradas padrão e um máximo definido como infinito.

O Logo responde ao comando APRENDA acessando o modo de definição de procedimento. A exibição dos caracteres muda de "?" para ">" (surge uma caixa de diálogo do SuperLogo) e quaisquer instruções que você digitar torna-se parte da definição até que você digite uma linha contendo apenas a palavra Fim. Exemplo:

aprenda ecoe :vezes :objeto repita :vezes [esc :thing] fim ecoe 2 "Olá Olá Olá ecoe 3 "Até logo Até logo Até logo Até logo

Fim fim

Page 248: Manual Logo 3.0

Não se trata realmente de um comando. Finaliza a definição de um procedimento. Veja também Aprenda. Exemplo:

aprenda casa esc "casa fim

Defina defina nome lista

Define um procedimento com nome e um texto com lista. Se já existe um procedimento com nome, esta nova definição substitui a anterior. Em lista deve ser definida uma lista cujos elementos são sublistas. O primeiro elemento deve ser uma sublista de parâmetros, ou seja, palavras para os nomes dos parâmetros requeridos. As demais sublistas deverão ser parte do corpo do procedimento onde cada sublista é uma linha do corpo do procedimento. (Não há nenhuma linha Fim na entrada de texto.) Exemplo:

defina "tarefa [[a b][escreva :a][escreva :b]] tarefa "música "dança música dança

Texto texto nome

Retorna a listagem do procedimento nome na forma esperada por Defina: uma lista de listas, onde a primeira sublista é o nome do procedimento e o resto são sublistas do corpo do procedimento. O comando texto não retorna informações dos formatos usados quando o procedimento foi definido, tal como linhas de continuação e espaços extras. Exemplo:

Page 249: Manual Logo 3.0

defina "tarefa [[a b][escreva :a][escreva :b] tarefa "música "dança música dança mostre texto "tarefa [[a b][escreva :a][escreva :b]]

Copie copie nomenovo nomeantigo

Comando que torna nomenovo um procedimento idêntico a nomeantigo. O último pode ser uma primitiva. Caso nomenovo já tenha sido definido, sua definição anterior é perdida. Se nomenovo já era uma primitiva. As definições criadas por Copie não são salvas por Salve; as primitivas nunca são salvas, e os procedimentos definidos pelo usuário criados por Copie são abandonados. Nota: dialetos do Logo diferem quanto à ordem de parâmetros para Copie. Esse dialeto usa "ordem Atribua" e não "ordem Coloque." Exemplo:

aprenda Bem-vindo escreva "Olá fim Bem-vindo Olá copie "digaolá "Bem-vindo digaolá Olá

Definição de variáveis

Page 250: Manual Logo 3.0

Atribua Coloque Local Conteúdo Atribua atribua palavra objeto atr palavra objeto

Define uma variável designada por palavra e com conteúdo objeto. Os nomes de variáveis respeitam maiúsculas e minúsculas. Caso já exista uma variável com o mesmo nomo, seu valor é alterado. Se não existir, é criada uma nova variável global. Exemplo:

atr "cão [boxer pastor] mostre :cão [boxer pastor] atr "nome "carmen esc :nome carmen

Coloque coloque objeto palavra col objeto palavra

Define uma variável denominada por palavra com conteúdo objeto. Esse comando é análogo à primitiva Atribua. Os nomes de variáveis respeitam maiúsculas e minúsculas. Caso já exista uma variável com o mesmo nomo, seu valor é alterado. Se não existir, é criada uma nova variável global. É o mesmo que Atribua, mas com os parâmetros em ordem invertida. Exemplo:

Page 251: Manual Logo 3.0

coloque "teresa "nome col [azul branco verde ] "cores esc :nome teresa mostre :cores [azul branco verde]

Local local palavra (local palavra1 palavra2...)

Aceita como parâmetro uma ou mais palavras, ou uma lista de palavras. Uma variável é criada para cada uma dessas palavras, com a própria palavra como nome. As variáveis são locais para o procedimento correntemente executado; uma variável que é local para um procedimento é válida para qualquer subprocedimento invocado por este procedimento. As variáveis criadas por Local não tem valor inicial; deve-se atribuir a elas um valor (usando Atribua) antes que o procedimento faça uma tentativa de ler seus valores. Exemplo:

aprenda inicia atribua "contador 1 escreva :contador fim inicia 1 mostre :contador 1 aprenda inicia2 local "soma atribua "soma 10 escreva :soma

Page 252: Manual Logo 3.0

fim inicia2 10 mostre :soma =>soma não tem valor

Conteúdo conteúdo nomevariável

Retorna o valor da variável cujo nome é um parâmetro. Se há mais de uma variável, é escolhida a variável mais interna daquele nome. Exemplo:

atribua "frase [Olá como você vai] mostre conteúdo "frase [Olá como você vai] mostre :frase [Olá como você vai]

Lista de propriedades

Observação: os nomes de listas de propriedade sempre diferenciam caracteres maiúsculos e minúsculos. Coloqueprop coloqueprop palavra1 palavra2 objeto

Adiciona uma propriedade para a lista de propriedades definida em palavra1 com o nome definido em palavra2 e conteúdo definido em número. Exemplo:

coloqueprop "lista1 "p1 1 coloqueprop "lista1 "p2 2 coloqueprop "lista2 "p1 [texto 3]

Page 253: Manual Logo 3.0

coloqueprop "lista2 "p2 20 mostre prop "lista1 "p2 2 mostre prop "lista1 "p1 1 mostre prop "lista2 "p1 [texto 3] mostre prop "lista2 "p2 20

Propriedade propriedade palavra1 palavra2 prop palavra1 palavra2

Retorna o valor da propriedade palavra2 na lista de propriedades palavra1, ou uma lista vazia caso não exista tal propriedade. Exemplo: coloqueprop "lista1 "p1 1 coloqueprop "lista1 "p2 2 coloqueprop "lista2 "p1 [texto 3] coloqueprop "lista2 "p2 20 mostre prop "lista1 "p2 2 mostre prop "lista1 "p1 1 mostre prop "lista2 "p1 [texto 3] mostre prop "lista2 "p2 20 Retireprop

Page 254: Manual Logo 3.0

retireprop palavra1 palavra2 Remove a propriedade palavra2 da lista de propriedades palavra1. Exemplo:

coloqueprop "lista1 "p1 1 coloqueprop "lista1 "p2 2 mostre listaprop "lista1 [p2 2 p1 1] retireprop "lista1 "p1 mostre listaprop "lista1 [p2 2]

Listaprop listaprop palavra

Retorna uma lista cujos elementos ímpares são nomes e os elementos pares são valores da lista de propriedades palavra. Exemplo:

coloqueprop "lista1 "p1 1 coloqueprop "lista1 "p2 2 mostre listaprop "lista1 [p1 1 p2 2]

Predicados (área de trabalho) Éprocedimento Éprimitiva Édefinido Énome Émacro Éprocedimento éprocedimento objeto eprocedimento objeto

Page 255: Manual Logo 3.0

Retorna a palavra verd sempre que o objeto for um procedimento na área de trabalho. Caso contrário, retorna a palavra falso. Exemplo:

Aprenda casa Pf 100 pd 90 Pe 50 pf 100 ... fim esc éprocedimento "casa verd (caso a área de trabalho contenha um procedimento denominado

casa) Éprimitiva éprimitiva objeto eprimitiva objeto Retorna verdadeiro sempre que o objeto for uma primitiva LOGO. Caso contrário, retorna a palavra falso. Exemplo:

esc éprimitiva "espere verd coloque "tat "apelido esc eprimitiva :apelido verd esc eprimitiva 6 falso

Édefinido édefinido objeto edefinido objeto Retorna verdadeiro se objeto for um procedimento definido pelo usuário por

Page 256: Manual Logo 3.0

meio do comando defina. Exemplo:

defina "abc [[a b][esc :a][esc :b]] mostre édefinido "cab falso mostre édefinido "abc verd

Énome énome objeto Retorna verdeiro se a entrada definida em objeto for o nome de uma variável. Caso contrário, retorna falso. Exemplo:

coloque [Henrique] "pessoa esc énome "pessoa verd defina "abc [[a b] [esc :a] [esc :b]] esc énome "abc falso

Émacro ÉMACRO nome Emite VERDADEIRO se a entrada for o nome de uma macro definida pelo usuário, incluindo uma macro de biblioteca. (Mas o Logo não tem conhecimento de uma macro de biblioteca até que o procedimento seja invocado.) verdade:(BOOLEANO) Verdade se o nome for uma macro definida. nome:(PALAVRA) Nome da macro definida a seer testada. Exemplo:

Page 257: Manual Logo 3.0

mostre émacro "abc falso .defmacro "abc [[a b] [escreva :a] [escreva :b]] mostre émacro "abc verdadeiro

Operações (área de trabalho) Desenterrados Enterrados Procedimentos Nomes Listaprops Listanomes Listalistaprops Desenterrados desenterrados Retorna uma lista com três sublistas contendo os nomes de procedimentos, variáveis e listas de propriedades respectivamente. Esta lista inclui todos os ítens desenterrados que estão na área de trabalho. As variáveis e propriedades podem não estar visíveis no Editor de comandos Exemplo:

eltudo aprenda processo fim atribua "nome1 1 coloqueprop "propriedade1 "p1 1 mostre desenterrados [[processo][nome1][propriedade1]]

Enterrados

Page 258: Manual Logo 3.0

enterrados Retorna uma lista com três sublistas contendo os nomes de procedimentos, variáveis e listas de propriedades respectivamente. Esta lista inclui todos os ítens enterrados que estão na área de trabalho. Exemplo:

mots mostre enterrados [[ mots ] [] []]

Procedimentos procedimentos procs Retorna uma lista com os nomes de todos os procedimentos desenterrados e definidos pelo usuário que estão na área de trabalho. Note que isto é uma lista de nomes, não uma lista de conteúdo. Portanto pode-se usar esta lista como parâmetros passados para um procedimento. Exemplo:

eltudo aprenda rotina fim aprenda programa fim mostre procedimentos [programa rotina]

Nomes nomes Retorna uma lista que contém a primeira sublista vazia (sem nenhum nome de

Page 259: Manual Logo 3.0

procedimento), seguida de uma sublista de todos os nomes de variáveis que estão na área de trabalho. Exemplo:

eltudo atribua "nota2 20 atribua "nota1 10 mostre nomes [[][nota1 nota2]]

Listaprops listaprops Retorna uma lista que contém duas sublistas vazias (sem indicar procedimentos e/ou variáveis) seguida de uma sublista de todas as listas de propriedades desenterradas que estão na área de trabalho. Exemplo:

coloqueprop "lista1 "p1 1 mostre listaprops [[][][lista1]]

Listanomes listanomes objeto lnomes objeto Retorna uma lista que contém a primeira sublista vazia seguida de uma sublista com o(s) nome(s) na ordem de entrada. Isto é útil em conjunto com procedimentos de controle da área de trabalho que requerem uma lista de nomes como entrada. Exemplo:

mostre listanomes [nota2 nota1] [[][nota2 nota1]]

Page 260: Manual Logo 3.0

Listalistaprops listalistaprops objeto llistaprops objeto Retorna uma lista que contém duas sublistas vazias seguidas por uma sublista com o(s) nome(s) definidos como entrada. Isto é útil em conjunto com procedimentos de controle da área de trabalho que requerem uma lista de listas de procedimentos como entrada. Exemplo:

mostre listalistaprops [gato vaca] [[][][gato vaca]]

Inspeção Motudo Mops Mons Molprops Mon Molprop Mostretítulos Mot Motudo Motudo (procedimento de biblioteca) Exibe na tela todas as definições que estão na área de trabalho. A definições são mostradas em uma lista contendo 3 sublistas que indicam os procedimentos, variáveis e propriedades. Exemplo:

eltudo aprenda semana1 escreva "segunda

Page 261: Manual Logo 3.0

fim atribua “a 0 motudo [[semana1] [a] [] ]

Mops Mops (procedimento de biblioteca) Exibe o corpo de todos os procedimentos desenterrados que estão na área de trabalho. Exemplo:

eltudo aprenda semana2 escreva "terça fim

mops aprenda semana2 escreva “terça fim

Mons Mons (procedimento de biblioteca) Exibe uma lista com duas sublistas com a primeira sublista vazia e a segunda contendo os nomes das variáveis que estã na área de trabalho. Exemplo:

atribua "nota3 3 mons [ [ ] [nota3] ]

Page 262: Manual Logo 3.0

Molprops Molprops (procedimento de biblioteca) Exibe uma lista com três sublistas com as duas primeiras sublistas vazias, e a terceira contendo os nomes das propriedades desenterras. Exemplo:

coloqueprop "lista3 "p3 3 molprops [ [ ] [ ] [lista3] ]

Mon Mon objeto (procedimento de biblioteca) Exibe uma lista com duas sublistas sendo a primeira vazia e a segunda formada por objeto Objeto pode ser uma lista ou uma palavra. Exemplo:

atribua "nota1 10 atribua "nota2 20 mon [nota1 nota2] [ [ ] [nota1 nota2] ] mon lista nota1 nota2 [ [ ] [10 20] ]

Molprop molprop objeto (procedimento de biblioteca) Exibe na tela a(s) definição(ões) da(s) lista(s) de propriedade(s) especificada(s) em objeto, o qual pode ser uma lista ou uma palavra. Exemplo:

coloqueprop "lista1 "p1 1 molprop [lista1] [ [ ] [ ] [lista1] ]

Page 263: Manual Logo 3.0

Mostretítulos mostretítulos mots Exibe na tela uma lista contendo os títulos dos procedimentos desenterrados contidos na área de trabalho. Exemplo:

eltudo aprenda curso fim aprenda novo fim mostretítulos [curso novo] mots [curso novo]

Mot Mot objeto (procedimentos de biblioteca) Exibe o corpo do procedimento especificado em objeto. Exemplo:

eltudo aprenda curso1 fim mot “curso1 aprenda curso1 fim

Page 264: Manual Logo 3.0

Controle de área de trabalho Elimine Eltudo Enterre Enterretudo Enterrenome Desenterre Destudo Desnome Rastreie Nãorastreie Passoapasso Nãopassoapasso Edite Edtudo Edps Edns Edlprops Edm Edlprop Salve Salvelista Carregue Semestado Estado Elimine elimine objeto el objeto Elimina da área de trabalho o procedimento especificado em objeto, o qual pode ser um nome ou uma lista. Exemplo:

eltudo aprenda quadrado fim aprenda janela fim

Page 265: Manual Logo 3.0

mops [janela quadrado] elimine [janela] mops [ quadrado]

Eltudo Eltudo (procedimento de biblioteca) Elimina todos os procedimentos, variáveis ou propriedades definidas na área de trabalho. Exemplo:

eltudo aprenda janela fim aprenda bola fim Atribua “x 0 mops [bola janela] mo :x 0 eltudo mops mo :x

Enterre enterre objeto Enterra os procedimentos, variáveis e listas de propriedade definidos em objeto. Um item enterrado não é incluído nas listas de retorno Conteúdos, Procedimentos, Variáveis e Listas de propriedades, mas é incluído na lista de

Page 266: Manual Logo 3.0

retorno enterrados. Portanto, itens enterrados não são impressos por Motudo ou gravados por Salve. Portanto cuidado ao enterrar procedimentos, eles poderão ser perdidos no momento em que você deixar o programa. Exemplo:

aprenda tempo escreva [o dia está ensolarado] fim aprenda semana escreva [domingo é dia de festa] fim mots aprenda semana aprenda tempo enterre "tempo mots aprenda semana tempo o dia está ensolarado

Enterretudo Enterretudo (procedimento de biblioteca) Enterra todos os procedimentos, variáveis e listas de propriedades definidos na área de trabalho. Exemplo:

eltudo aprenda casa escreva [A casa é amarela] fim

Page 267: Manual Logo 3.0

aprenda escola escreva [A escola é verde] fim mots aprenda casa aprenda escola enterretudo mots

casa A casa é amarela escola A escola é verde

Enterrenome enterrenome objeto Enterra a variável definida em objeto. Exemplo:

atribua "x 10 atribua "y 20 mons [ [ ] [x y] ] enterrenome [x] mons [ [ ] [y] ] mostre :x 10 mostre :y

Page 268: Manual Logo 3.0

20

Desenterre desenterre lista des lista Desenterra os procedimentos, variáveis e listas de propriedade especificadas em lista. Isso implica que os ítens especificados voltarão a ser vistos em Conteúdo, etc. Observação: o parâmetro lista é formado de sublistas onde a primeira sublista representa procedimentos; a segunda sublista representa variáveis e a terceira sublista representa lista de propriedade. Exemplo:

eltudo atribua "nota1 10 atribua "nota2 20 mons [ [ ] [nota1 nota2] ] enterrenome "nota1 mons [ [ ] [nota2] ] des [[][nota1][]] mons [ [ ] [nota1 nota2] ]

Destudo destudo Desenterra todos os procedimentos, variáveis e listas de propriedades que foram enterradas. Exemplo:

Page 269: Manual Logo 3.0

eltudo atribua "Carlos 10 atribua "Paulo 20 mons [ [ ] [Carlos Paulo] ] enterrenome "Carlos mons [ [ ] [Paulo] ] destudo mons [ [ ] [Carlos Paulo] ]

Desnome desnome objeto Desenterra todos os nomes (variáveis) especificadas em objeto que foram enterradas por meio do comando Enterrenome. Exemplo:

eltudo atribua "meninas 10 atribua "meninos 12 mons [ [ ] [meninas meninos] ] enterrenome [meninas] mons [ [ ] [meninos] ] desnome [meninas] mons [ [ ] [meninas meninos] ]

Page 270: Manual Logo 3.0

Rastreie rastreie objeto Verificar também o comando NãoRastreie Marca os itens especificados para rastrear. Sempre que um procedimento é rastreado uma mensagem é impressa, dando os valores atuais de entrada. Existe no menu do Logo na opção “Modos de execução” um item denominado “rastrear” que quando está marcado, produz o mesmo efeito do comando Rastreie. Exemplo:

aprenda meuprog :a escreva :a fim meuprog "saldo saldo rastreie "meuprog meuprog "saldo (meuprog "saldo) saldo meuprog terminou nãorastreie "meuprog meuprog "saldo saldo

Nãorastreie nãorastreie objeto Desliga o rastreamento para os objetos especificados. Veja também o comando Rastreie e opção rastrear no item Modo de execução no menu do Logo

Page 271: Manual Logo 3.0

Exemplo:

aprenda rotina :a escreva :a fim rotina "saldo saldo rastreie "rotina rotina "saldo retorna mensagem: (rotina "saldo) saldo nãorastreie "rotina rotina "saldo saldo

Passoapasso PASSOAPASSO objeto Comando que marca os items nomeados para as etapas do passo a passo. Sempre que um procedimento passo a passo é invocado, cada linha de instrução do corpo do procedimento é escrita antes de ser executada, e o Logo aguarda até que o usuário clique no botão Ok. Exemplo:

aprenda meuprog pf 10 pd 90 pf 20 pe 90 end meuprog passoapasso "meuprog <Cada linha de meuprog será exibida e aguardará pelo OK para passar à próxima linha> meuprog

Page 272: Manual Logo 3.0

nãopassoapasso "meuprog meuprog

Nãopassoapasso nãopassoapasso objeto Desliga passoapasso para os objetos especificados. Veja também Passoapasso e a opção Passo a Passo no menu Modo de execução Exemplo:

aprenda roti pf 50 pd 90 pt 50 pe 90 fim roti passoapasso "roti

=> cada linha a ser executada será mostrada e aguardará pelo <Ok> para executar a próxima linha.

roti nãopassoapasso "roti roti

Edite edite objeto ed objeto Edita a definição do objeto especificado usando o editor do LOGO. Exemplo:

aprenda quadra tat

Page 273: Manual Logo 3.0

repita 4 [pf 180 pd 190] fim quadra edite "quadra =>mude 190 por 90 e finalize edição quadra

Edtudo Edtudo (procedimento de biblioteca) Edita todo o conteúdo da área de trabalho. Exemplo:

aprenda desenho atribua "x "círculo tat repita 4 [pf 100 pd 90] pd 45 un pf 30 rotule :x ul fim desenho edtudo =>troque "círculo por "quadrado e finalize edição. desenho

Edps Edps (procedimento de biblioteca) edita todos os procedimentos da área de trabalho. Exemplo:

eltudo aprenda tempo escreva [dia de sol] fim

Page 274: Manual Logo 3.0

aprenda semana escreva "segunda fim tempo dia de sol semana segunda edps =>troque sol por chuva =>troque segunda por domingo =>finalize edição tempo dia de chuva semana domingo

Edns Edns (procedimento de biblioteca) Edita todos os nomes da área de trabalho. Exemplo:

aprenda tri tat repita 3 [pf 300 pd 120] pd 150 un pf 50 rotule :x ul fim atribua "x "quadrado tri edns =>mude quadrado por triângulo e finalize edição

Page 275: Manual Logo 3.0

tri

Edlprops Edlprops (procedimento de biblioteca) Edita todas as listas de propriedades da área de trabalho. Edn edn objeto Edita o nome definido em objeto. Exemplo:

aprenda cores escreva :cor fim atribua "cor "amarelo cores amarelo edn "cor =>mude amarelo por vermelho e finalize edição. cores vermelho

Edlprop edlprop objeto Edita a lista de propriedade definida em objeto. Salve salve nome-arquivo

Page 276: Manual Logo 3.0

Salva as definições de todos procedimentos, variáveis e listas de propriedade não enterrados em nome-arquivo. Exemplo:

eltudo aprenda aula escreva "matemática fim aprenda esporte escreva "natação fim mots aprenda aula aprenda esporte salve "programas.lgo eltudo mostretítulos carregue "programas.lgo mostretítulos aprenda aula aprenda esporte

Salvelista salvelista lista nome-arquivo salvel lista nome-arquivo Salva em nome-arquivo as definições dos procedimentos, variáveis e listas de propriedade de acordo com os parâmetros lista. Esta lista contém 3 sublistas onde na primeira sublista são especificados os procedimentos, na segunda sublista são especificados as variáveis e na terceira sublista são especificadas as listas de propriedades. Exemplo:

Page 277: Manual Logo 3.0

eltudo aprenda rotina1 escreva "primeiro fim aprenda rotina2 escreva "segundo fim mostretítulos aprenda rotina1 aprenda rotina2 salvel [[rotina1][][]] "rots.lgo eltudo mostretítulos carregue "rots.lgo mots aprenda rotina1

Carregue CARREGUE nome-arquivo Comando que lê instruções a partir do arquivo nomeado e as executa. O arquivo pode ter definições de procedimento com Aprenda, e são aceitas mesmo que já exista um procedimento com o mesmo nome. Se o arquivo registra uma lista de valores para uma variável chamada iniciar, então essa lista é executada como uma lista de instruções depois que o arquivo é carregado. É importante compreender que o arquivo é executado, não copiado, no espaço de trabalho: Se o Logo vê um APRENDA, então ele define o procedimento (o código dentro da definição não é executado). Se o Logo vê um ATRIBUA, ele irá atribuir aquele nome. Se o Logo vê que o código está fora da definição de procedimento, ele será executado na ordem de surgimento. Nome-arquivo:(PALAVRA) Nome do arquivo a ser carregado.

Page 278: Manual Logo 3.0

Exemplo:

aprenda meuprog1 escreva "Olá1 fim aprenda meuprog2 escreva "Olá2 fim mostretítulos aprenda meuprog1 aprenda meuprog2 salve "meuprogs.lgo eltudo mostretítulos carregue "meuprogs.lgo mostretítulos aprenda meuprog1 aprenda meuprog2

Semestado SEMESTADO

Este comando fecha a janela que exibe o estado da tartaruga. Veja também comando estado.

Quando a janela de estado é fechada com o mouse por meio do ícone “x”, o efeito produzido é o mesmo.

Exemplo:

estado semestado

Estado

Page 279: Manual Logo 3.0

ESTADO Este comando possui o mesmo efeito que o Botão Estado. Ou seja, ele exibe a janela de estado. Veja também o comando Semestado. Exemplo:

estado semestado

ESTRUTURAS DE CONTROLE Comandos de controle Iteração baseada em modelo Comandos de controle Faça Façaenvie Repita Contevezes Se Senão Teste Severd Sefalso Verdadeiro Falso Pare Envie Pegue Lance Erro Pausa Continue Multitarefa Monotarefa Verifiqueeventos

Page 280: Manual Logo 3.0

Mudecursorespera Termine Espere Ativetemporizador Desativetemporizador Sair .maybeoutput ignore ` (crase) Faça faça lista Executa as instruções em LOGO contidas na lista. Haverá retorno se a lista contém uma expressão que retorne. Exemplo:

tat faça [esc "LOGO] LOGO faça [mostre pri "abc] a

Façaenvie façaenvie lista Executa as instruções especificadas em lista devolvendo uma lista vazia se estas instruções não retornam nada ou uma lista cujo único membro é o resultado da lista de instruções contidas em lista. Útil para a invenção de estruturas de controle do tipo comando-ou-operação: Exemplo:

atribua "conjunto [pri [1 2 3]] atribua "resposta façaenvie :conjunto mostre :resposta

Page 281: Manual Logo 3.0

[1]

Repita repita número lista Executa número vezes as instruções contidas em lista. Exemplo:

tat repita 2 [esc "LOGO] LOGO LOGO repita 4 [repita 4 [pf 100 pd 90] pd 90] Desenha 4 quadrados

Contevezes contevezes cv Esta operação pode ser usada apenas dentro do laço de um comando Repita. Retorna o número de repetições que foram efetuadas, incluindo o atual. Exemplo:

repita 3 [esc (lista "este "é "loop cv)] este é loop 1 este é loop 2 este é loop 3

Se Se condição lista Comando ou operação em que: se a condição possui o valor VERDADEIRO, então SE executa a lista Se a condição possui o valor FALSO, então SE não faz nada. Caso seja fornecida um terceira entrada, SE age como Senão.

Page 282: Manual Logo 3.0

Usar SE causa erro se a primeira entrada (condição) não for um tipo booleano (VERDADEIRO nem FALSO) Para que haja compatibilidade com versões anteriores do Logo, se uma instrução SE não estiver entre parênteses, mas a primeira coisa na linha de instrução depois da segunda expressão de entrada é uma lista literal (por exemplo, uma lista em colchetes), a instrução SE é tratada como se ela fosse Senão, mas é enviada uma mensagem de aviso. Se esta instrução aparecer no corpo do procedimento, a mensagem surge apenas na primeira vez em que o procedimento é invocado em cada sessão do Logo. condição: (BOOLEANO) Expressão a ser testada para comprovação. lista: (LISTA) Lista das instruções do Logo a serem executadas se condição for VERDADEIRO. Exemplo:

se 1=1 [escreva [Sim ele é verdadeiro]] [escreva [Não ele é falso]] Sim ele é verdadeiro se 1=0 [escreva [Sim ele é verdadeiro]] [escreva [Não ele é falso]] Não ele é falso

Exemplo 2:

aprenda max :a :b envie (se :a > :b [:a] [:b]) fim mostre max 1 2 2

Senão SENÃO condição lista1 lista2 Comando ou operação em que, se a condição possui o valor VERADEIRO, então SENÃO executa lista1. Se a primeira entrada possui o valor FALSO, então SENÃO executa lista2. SENÃO envia um valor se a lista contém uma expressão que devolve um valor. condição:(BOOLEANO) Expressão a ser testada

Page 283: Manual Logo 3.0

lista1:(LISTA) Lista de instruções do Logo a serem executadas se condição for VERDADEIRO. lista2:(LISTA) Lista de instruções do Logo a serem executadas se condição for FALSO. Exemplo:

senão 1=1 [escreva [Sim ele é verdadeiro]] [escreva [Não ele é falso]] Sim ele é verdadeiro senão 1=0 [escreva [Sim ele é verdadeiro]] [escreva [Não ele é falso]] Não ele é falso

Exemplo (onde senão envia um valor)

aprenda max :a :b envie senão :a > :b [:a] [:b] fim mostre max 1 2 2

Teste teste predicado Avalia o predicado e armazena verd ou falso de acordo com o resultado do predicado. Este conteúdo armazenado poderá ser usado posteriormente com os comandos Severd ou Sefalso. O uso deste comando teste é local para o procedimento no qual está sendo usado portanto, qualquer correspondente Severd ou Sefalso deve ser usado no mesmo procedimento ou subprocedimento. Teste não tem utilidade quando é executado a partir da janela de comandos. Exemplo:

aprenda tarefa :entrada teste 1= :entrada escreva [avaliando a entrada...] severd [esc [A entrada é o número um.]] sefalso [esc[A entrada não é o número um.]] fim tarefa 1

Page 284: Manual Logo 3.0

avaliando a entrada... A entrada é o número um. tarefa 2 avaliando a entrada... a entrada não é o número um.

Severd severd lista Executa as instruções definidas em lista se a operação Teste executada mais recentemente retornou verd. Observação: o teste deve ter sido executado dentro do mesmo procedimento ou subprocedimento. Exemplo:

eltudo aprenda tarefa :entrada teste 1= :entrada escreva [avaliando a entrada...] severd [esc [A entrada é o número um.]] sefalso [esc[A entrada não é o número um.]] fim tarefa 1 avaliando a entrada... A entrada é o número um.

Sefalso sefalso lista Executa as instruções definidas em lista se a operação Teste executada mais recentemente retornou falso. Observação: o teste deve ter sido executado dentro do mesmo procedimento ou subprocedimento.

Page 285: Manual Logo 3.0

Exemplo:

eltudo aprenda tarefa :entrada teste 1= :entrada escreva [avaliando a entrada...] severd [esc [A entrada é o número um.]] sefalso [esc[A entrada não é o número um.]] fim tarefa 0 avaliando a entrada... A entrada não é o número um.

Verd Verd (formato especial) Palavra reservada que indica uma condição positiva. Exemplo:

mostre 1=1 verd se "verd [esc [Verdadeiro é sempre verdadeiro]] Verdadeiro é sempre verdadeiro

Falso Falso (formato especial) Palavra reservada que indica uma condição negativa. Exemplo:

mostre 1=0 falso

Page 286: Manual Logo 3.0

senão "falso [esc [Verdadeiro]][esc[Falso é falso]] Falso é falso

Pare pare Encerra a execução do procedimento atual e transfere o controle da execução para o procedimento que o chamou. Só é usado dentro de procedimentos. Exemplo:

aprenda tri :x se :x = " [pare] esc :x tri sp :x fim tri "LOGO LOGO OGO GO O

Envie envie objeto Comando utilizado em procedimentos. O procedimento que contém a primitiva Envie produz como saída objeto, retornando o controle ao procedimento que o chamou. Comando que encerra a execução do procedimento no qual ele aparece. Esse procedimento devolve um valor para o contexto no qual ele foi invocado. Não confunda: ENVIE é um comando, mas o procedimento que invoca ENVIE é uma operação. Exemplo:

aprenda rotina envie [teste de envie] fim

Page 287: Manual Logo 3.0

mostre rotina [teste de envie]

Pegue PEGUE nome lista Executa os comandos ou operações definidos em lista e retorna o resultado da execução desta lista. Se, enquanto executa a lista de instruções, uma operação Lance for executada com a palavra igual à palavra do Lance, então a execução da lista de instruções será interrompida e a operação Pegue devolve o valor obtido para lance. Se o nome é a palavra Erro, então qualquer condição de erro que surgir durante a execução da lista de instrução possui o efeito de Lance “Erro em vez de emitir uma mensagem de erro e retornar ao nível superior. PEGUE não funciona caso seja detectado um erro. Além disso, durante a execução da lista de instrução, a variável TRATAERRO “não funciona” temporariamente. (Se existir um erro enquanto Trataerro possui um valor, esse valor é tomado como uma lista de instrução para ser executado depois da exibição da mensagem de erro. Normalmente o valor de Trataerro, se qualquer, é a lista [Pausa].) nome:(PALAVRA) Nome do tag a ser LANÇADO. lista:(LISTA) Lista de instruções do Logo a ser executada sob a proteção de PEGUE. Exemplo:

aprenda meuprog2 escreva [Antes de lançar] lance "tag1 escreva [Nós nunca tivemos porque nós devolvemos] fim aprenda meuprog1 pegue "tag1 [meuprog2] escreva [Eu voltei] fim meuprog1 Antes de lançar

Page 288: Manual Logo 3.0

Eu voltei

Lance lance palavra (lance palavra lista) Este comando deve ser usado junto com o comando Pegue e com a palavra igual à palavra definida em Pegue. Caso lance for usado com apenas uma entrada, o Pegue não retornará nada. Se lance é usado com duas entradas, a segunda fornecerá um valor de retorno para Pegue. Lance "toplevel pode ser usado para finalizar todos os procedimentos em andamento, pausas interativas e retornar para o prompt de instruções de nível superior. Tem o mesmo efeito de ^C (interrupção da execução) ou clicar o botão parar do LOGO. Lance "erro pode ser usado para gerar uma condição de erro. Se o erro não for pego será mostrada uma mensagem (lance “erro) com uma indicação usual de onde o erro ocorreu. Se uma segunda entrada foi fornecida (após o parâmetro erro), esta segunda entrada será usada como a mensagem de erro no lugar da mensagem padrão. Além disso (neste caso), a indicação do lugar do erro não será a localização de lance, mas sim a localização da chamada do procedimento que tem o lance. Isso permite que procedimentos definidos pelo usuário gerem mensagens de erro como se fossem primitivas. Nota.: neste caso, o pegue “erro correspondente, se existir, não retornará nada, já que a segunda entrada do lance não é considerada um valor de retorno. Lance "sistema imediatamente abandona o LOGO, retornando ao sistema operacional, sem mostrar a mensagem usual e sem deletar nenhum arquivo temporário do Editor. Exemplo:

eltudo aprenda rotina2 escreva [Antes lance...] (lance "rot1 [Precisamos voltar...]) esc [nunca passamos aqui porque lance retornou...] fim aprenda rotina1

Page 289: Manual Logo 3.0

mostre pegue "rot1 [rotina2] escreva [Voltamos...] fim rotina1 Antes lance... [Precisamos voltar...] Voltamos...

Erro Erro lista

Retorna a lista que descreve o erro obtido, se existir. Se não ocorreu nenhum erro desde o último caso de erro, uma lista vazia será retornada.

A lista de erro contém quatro elementos: um inteiro, correspondente ao tipo de erro ocorrido, o texto da mensagem de erro, o nome do procedimento no qual o erro ocorreu e a linha de instrução em que o erro ocorreu.

Exemplo:

eltudo aprenda rotina pf 1000 fim ponhalimite pegue "erro [rotina] mostre erro [3[tartaruga fora dos limites]rotina[pf 1000]]

Pausa PAUSA Inicia uma pausa interativa. O sistema pedirá ao usuário instruções por meio de um prompt. Na janela de comandos o usuário verá o procedimento que executou a pausa. Variáveis locais daquele procedimento estarão disponíveis durante a pausa. Pausa devolve algo se for finalizada por um Continue com parâmetro.

Page 290: Manual Logo 3.0

Se a variável Trataerro existir, e ocorrer uma condição de erro, os conteúdos dessa variável são executados como uma lista de instrução. Normalmente Trataerro recebe o valor [Pausa] fornecendo uma pausa interativa na ocorrência de um erro. Isso permite que o usuário verifique os valores das variáveis no momento da ocorrência do erro. Exemplo:

tat eltudo aprenda rotina repita 80[pd 2 se 40=cv[pausa]] escreva [feito!] fim rotina => Modo Pausa (digite CONTINUE para sair) 80 => Modo Pausa (digite CONTINUE para sair) feito!

Continue continue continue valor co valor

Finaliza a pausa interativa atual, retornando ao contexto de chamada de Pausa. Se for passado um parâmetro, o valor é usado como o resultado da Pausa; senão, Pausa não retorna nada.

O comando continue pode ser usado sem seu parâmetro padrão.

Exemplo:

tat eltudo aprenda rotina repita 80[pd 2 se 40=cv[pausa]] escreva [feito!]

Page 291: Manual Logo 3.0

fim rotina => Modo Pausa (digite CONTINUE para sair) 80 => Modo Pausa (digite CONTINUE para sair) feito! aprenda rotina

Esc Pausa fim rotina => Modo Pausa (digite CONTINUE para sair) => Continue “Exemplo Exemplo

Multitarefa

MULTITAREFA instrui o LOGO a deixar que outros programas utilizem o computador enquanto o Logo está sendo executado. MONOTAREFA instrui o LOGO a não permitir que outros programas usem o computador enquanto o Logo está sendo executado. O padrão é MULTITAREFA. Note que a própria janela de comando é como outro programa. Ou seja, se você optar por Monotarefa, a janela de comando irá perder seu controle o que significa que o Botão Parar não funcionará até que seja configurado MUILTITAREFA, ou o Logo fica inativo novamente. A razão de existir o estado de monotarefa é que o LOGO executa mais rapidamente se ele puder puder controlar sozinho o computador. Veja também o comando Monotarefa. Você pode alcançar o melhor, ou ambos os mundos (de desempenho e multitarefa) fazendo (e entendo) o seguinte. Digamos que você tenha muitos loops aninhados em seu código. O loop mais interno é aquele em que é executada a maioria das tarefas. Porém não há nenhuma necessidade de executar no modo MULTITAREFA o loop mais interno. Exemplo:

Page 292: Manual Logo 3.0

Nós temos 3 casos: Caso 1 (Usuário em controle por 10.000 operações, desempenho mais baixo): multitarefa repita 100 [repita 100 [ (trabalho a ser feito) ] ] Caso 2 (Sem o controle de 10.000 operações, bom desempenho): monotarefa repita 100 [repita 100 [(trabalho a ser feito)]] Caso 3 (Usuário fora de controle por 100 operações, ainda bom desempenho): repita 100[monotarefa ~ repita 100 [ (trabalho a ser feito)]~ multitarefa]

Monotarefa MONOTAREFA

MONOTAREFA solicita que o LOGO não permita que os programas utilizem o computador enquanto o LOGO estiver trabalhando. O padrão é MULTITAREFA. Veja também o comando Multitarefa.

Exemplo:

Veja o exemplo do comando Multitarefa.

Verifiqueeventos verifiqueeventos

Tem executar duas vezes o comando Multitarefa. Ele basicamente verifica se existem eventos esperando para serem processados. Alguns comandos que permitem chamadas de retorno, rodam no estado monotarefa. Se o código da chamada de retorno é curto e rápido, não haverá nenhum

Page 293: Manual Logo 3.0

problema, mas, se for longo, o usuário não terá controle durante esse período. Se o usuário espalhar as instruções, ele não perderá o controle por um período tão longo.

Este comando pode ser usado como alternativa para colocar os comandos multitarefa e monotarefa para computar laços complexos e intensivos. Você pode encapsular todo o procedimento dentro de um par monotarefa e multitarefa e então, colocar verifiqueeventos de forma adequada no seu laço.

Exemplo:

ativemouse[repita 72 [repita 4 [pf 100 pd 90] pd 5]] [] [] [] [] <agora clique com o mouse na Tela do SuperLogo> <observe que enquanto ele está desenhando você não pode INTERROMPÊ-LO, porque o mouse não responderá> ativemouse [repita 72 [repita 4 [pf 100 pd 90] pd 5 verifiqueeventos]] [] [] [] [] <agora clique com o mouse na Tela do SuperLogo> <observe que enquanto ele está desenhando você PODE INTERROMPÊ-LO>

Mudecursorespera mudecursorespera mce Muda o cursor para a forma de ampulheta. O objetivo é indicar duas coisas: a operação que iniciou vai levar algum tempo, e durante esse tempo, o usuário não terá controle sobre o windows (monotarefa). Esta função só funciona em monotarefa. Uma vez em multitarefa, o cursor apropriado será usado no próximo evento envolvendo o cursor. Isto significa que você deve chamar Monotarefa antes de cada Mudecursorespera. Se você decidir usar Multitarefa momentaneamente, durante um cálculo computacional, você deverá usar mudecursorespera novamente ou seja, o uso do mudecursorespera deve estar sempre entre dois comandos monotarefa. Exemplo: repita 100[monotarefa~

Page 294: Manual Logo 3.0

mudecursorespera~ repita 100 [(trabalho a ser feito)]~ mudecursorseta~ multitarefa]

Termine TERMINE Similar a clicar o Botão Parar, mas sob o comando do LOGO. Exemplo:

multitarefa repita 1000 [pf 100 pt 100 pd 1] =>clicar o botão parar parando...

Espere ESPERE tempo Provoca uma pausa antes de executar o próximo comando. Essa pausa está sob o comando do LOGO. tempo:(INTEIRO) Tempo de espera adiado em 1/60 de segundo. Exemplo: Pf 100 espere 60 pd 90 Ativetemporizador ATIVETEMPORIZADOR id intervalo [chamada] Este comando ativa um temporizador identificado por id (1-31) para chamar os comandos logo em chamada a cada intervalo (em milisegundos) de tempo. Ele será ativado a cada intervalo até que você digite o comando DESATIVETEMPORIZADOR . Este comando te dá um poder muito grande de programação, contudo ele pode gerar inúmeros problemas se não for utilizado corretamente.

Page 295: Manual Logo 3.0

Você pode desativar o temporizador a qualquer momento. Isto significa que você pode até mesmo desativar o timer dentro de sua própria chamada (isso causa uma única execução do temporizador). Você também pode ativar um temporizador a qualquer momento, mesmo dentro de uma chamada. O comando PARAR vai desativar todos os timers que estiverem ativos. Você deve ter certeza que você consegue manipular os temporizadores (usar os comandos ATIVETEMPORIZADOR e DESATIVETEMPORIZADOR) antes que eles executem novamente (intervalo). Se isso não for feito, você eventualmente provocará uma "Sobrecarga de Pilha" e o LOGO vai travar. Você deve também se assegurar que o código de chamada é livre de erros. Caso contrário, você pode vir a gerar inúmeras caixas de confirmação ("OK") e isso eventualmente provoca "Sobrecarga de Pilha". É uma boa idéia salvar seu código frequentemente no disco quando estiver desenvolvendo programas que usam o temporizador. Mesmo que não tenha nenhum erro na chamada do temporizador, ele ainda pode vir a provocar erros pois interage diretamente com as rotinas de interrupção de tempo do Windows. Portanto, tenha cuidado. Você pode "bloquear" todos os temporizadores de executarem (interroperem) qualquer código, incluindo a chamada, utilizando o comando MONOTAREFA. Você pode "restaurar" a execução utilizando o comando MULTITAREFA. Bloqueios não causam a perda de execuções do temporizador. Todos os eventos são empilhados e serão executados tão logo o temporizador seja desbloqueado. Portanto, não bloqueie um temporizador por muito tempo. Cada temporizador pode ter chamadas diferente ou a mesma chamada. Exemplo:

ativetemporizador 1 200 [mudecll (lista sorteienúmero 256 sorteienúmero 256 sorteienúmero 256)] ;nota o SuperLogo voltou e o temporizador está executando (alterando o lápis randomicamente) repita 72 [repita 4 [pf 100 pd 90] pd 5] desativetemporizador 1

Page 296: Manual Logo 3.0

Desativetemporizador DESATIVETEMPORIZADOR id Este comando desativa o temporizador ativado por ATIVETEMPORIZADOR e identificado por id id:(INTEIRO) Identificador do Temporizador (1-31) para desativar. Exemplo: ativetemporizador 1 200 [mudecl (lista sortnum 256 sortnum 256 sortnum 256)] ;note que a cada execução do temporizador o SLogoW muda randomicamente a cor do lápis repita 72 [repita 4 [pf 100 pd 90] pd 5] desativetemporizador 1

Sair sair Sai do LOGO, retornando para o sistema operacional. Caso o trabalho não esteja salvo ou tenha sofrido alguma alteração, uma caixa de confirmação será exibida. Exemplo:

sair

.Maybeoutput

.MAYBEOUTPUT valor (formulário especial) Funciona como Envie, exceto pelo fato de que a expressão que fornece o valor de entrada pode não fornecer um valor, neste caso, o efeito é semelhante a Pare. Recomendado para uso em definições de estruturas de controle, para os casos em que você não sabe se alguma expressão gera valor. valor:(CONTEÚDO) Qualquer conteúdo do Logo que possa gerar saída.

Page 297: Manual Logo 3.0

Exemplo:

Aprenda chamada :função [:entradas] 2 .maybeoutput aplique :função :entradas fim (chamada "escreva "a "b "c) a b c escreva (chamada "palavra "a "b "c) abc

Uma alternativa a Façaenvie. É mais fácil e rápido de usar, pelo fato de criar uma exceção às regras de avaliação do Logo. (Em princípio, ele deveria ser um erro se a expressão que deveria fornecer uma entrada a algo não tivesse um valor.)

Ignore ignore objeto Não executa nada, é usado quando uma expressão é calculada para um efeito colateral e seu valor atual não é importante. Exemplo:

eltudo aprenda programa :entrada escreva :entrada envie nel :entrada fim programa "testando testando não me disse o que fazer com 8 em programa ignore programa "testando testando

` (crase) ` lista (procedimento de biblioteca)

Page 298: Manual Logo 3.0

Retorna uma lista a partir da lista de entrada, efetuando algumas substituições. Se um membro da lista de entrada é a palavra ","(vírgula) então o membro seguinte deve ser uma lista de instruções que produz uma saída quando executada. Este valor de saída substitui a vírgula e a lista de instruções. Se um membro da lista de entrada é a palavra ",@" (vírgula, arroba) então o membro seguinte deve ser uma lista de instruções que devolve uma lista quando executada. Os membros dessa lista substituirão a ,@ e a lista de instruções. Exemplo

mos `[nota1 nota2 ,[sp[10 20 30]]nota ,@[sp[1 2 3 ]]] [nota1 nota2 [20 30] nota 2 3]

Para para lista1 lista2 A primeira entrada lista1 deve ser uma lista contendo 3 ou 4 membros: (1) uma palavra que será usada como o nome de uma variável local; (2) uma palavra ou lista que será calculada por um Faça para determinar um número que representa o valor inicial da variável; (3) uma palavra ou lista que será calculada para determinar um número que representa o valor limite da variável; (4) uma palavra ou lista opcional que será calculada para determinar o intervalo de contagem. Se o quarto elemento estiver faltando, o valor assumido será 1 ou -1, dependendo se o valor inicial for menor ou maior que o final. A segunda entrada, lista2, é uma lista de instruções. O comando para executar essa lista repetidamente, associando, a cada vez, um novo valor à variável de controle. Primeiramente, o valor inicial é associado à variável de controle, e esse valor é comparado com o valor limite. Para estará completo quando o sinal de sua variável de controle for igual ao sinal do intervalo de contagem. (se nenhum intervalo de contagem for especificado, a lista de instruções é executada ao menos uma vez. Um intervalo de contagem especificado pode fazer com que nada seja executado). Em condições normais, a lista é executada e o valor do intervalo de contagem é adicionado à variável de controle e retornado ao passo da comparação. Exemplo:

para [i 2 7 1.5] [escreva :i] 2 3.5

Page 299: Manual Logo 3.0

5 6.5

Façaenquanto façaenquanto lista1 listai2 Executa repetidamente as instruções de lista1 enquanto o resultado de lista2 for verdadeiro. O comando executa primeiro a lista1 e depois verifica o resultado de lista2, portanto, pelo menos uma vez a lista1 será executada. A lista2 deve ser uma lista de expressões cujo retorno deve ser verdadeiro ou falso. Exemplo:

atribua "i 0 façaenquanto [atribua "i :i+1 escreva :i][:i<3] 1 2 3

Enquanto enquanto lista1 lista2 Executa repetidamente as instruções de lista2 enquanto o resultado de lista1 for verdadeiro. O comando verifica primeiro o resultado de lista1, portanto as instruções de lista2 poderão não ser executadas. A lista1 deve ser uma lista de expressões cujo retorno deve ser verdadeiro ou falso. Exemplo:

atribua "i 0 enquanto [:i<3][atribua "i :i+1 escreva :i] 1 2 3

Façaaté façaaté lista1 lista2

Page 300: Manual Logo 3.0

Executa repetidamente as instruções de lista1 enquanto o resultado de lista2 for falso. O comando executa primeiro a lista1 e depois verifica o resultado de lista2, portanto, as instruções de lista1 serão executadas pelo menos uma vez. A lista2 deve ser uma lista de expressões cujo retorno deve ser verdadeiro ou falso. Exemplo:

atribua "i 0 façaaté [atribua "i :i+1 escreva :i][:i>3] 1 2 3 4

Atéque atéque lista1 lista2 Executa repetidamente as instruções de lista2 enquanto o resultado de lista1 for falso. O comando verifica primeiro o resultado de lista1, portanto, as instruções de lista2 poderão não ser executadas. A lista1 deve ser uma lista de expressões cujo retorno deve ser verdadeiro ou falso. Exemplo:

atribua "i 0 atéque [:i>3] [atribua "i :i+1 escreva :i] 1 2 3 4

Iteração baseada em modelo

Os procedimentos nesta seção são ferramentas de iteração baseadas na idéia de um "modelo". Uma generalização de uma lista de instrução ou uma lista de expressão na qual os "slots" são fornecidos para a ferramenta para inserir dados variados. Podem ser usados diferentes formatos do modelo.

Page 301: Manual Logo 3.0

O formato mais comumente usado para um modelo é o "explicit-slot", ou o "ponto de interrogação".

Exemplo:

mostre mapeie [? * ?] [2 3 4 5] [4 9 16 25]

Neste exemplo, a ferramenta MAPEIE avaliou o modelo [? * ?] repetidamente, com cada um dos membros da lista de dados [2 3 4 5] substituído por pontos de interrogação. O mesmo valor foi usado para cada ponto de interrogação em uma determinada avaliação. Algumas ferramentas permitem que mais de um elemento seja substituído em paralelo; nesses casos os slots são identificados por ?1 para o primeiro elemento, ?2 para o segundo e assim por diante.

Exemplo:

mostre (mapeie [(palavra ?1 ?2 ?1)] [a b c] [d e f]) [ada beb cfc]

Se o modelo deseja computar o número do elemento, o formulário (? 1) é equivalente a ?1, logo (? ?1) significa o elemento cujo número é fornecido em elemento número 1. Algumas ferramentas permitem designações de slots adicionais, como é mostrado nas descrições individuais. A segunda forma do modelo é o "procedimento nomeado". Se o modelo é uma palavra, em vez de uma lista, ela é tomada como o nome de um procedimento. Esse procedimento precisa aceitar um número de entradas igual ao número de slots de dados paralelos fornecido pela ferramenta; o procedimento é aplicado a todos os dados disponíveis. Ou seja, se os dados de ?1 a ?3 estiverem disponíveis, o modelo "PROC é equivalente a [PROC ?1 ?2 ?3]. Exemplo:

mostre (mapeie "palavra [a b c] [d e f]) [ad be cf]

aprenda prod_esc :a :b ; produto escalar – a e b devem ser listas numéricas

Page 302: Manual Logo 3.0

envie aplique "soma (Mapeie "produto :a :b) fim

A terceira forma do modelo é chamada "named-slot" ou forma "lambda". Esta forma é indicada por uma lista de modelos contendo mais de um elemento, cujo primeiro elemento é a própria lista. O primeiro elemento é tirado como uma lista de nomes; variáveis locais são criadas com esses nomes e fornecidos os dados disponíveis como seus valores. O número de nomes precisa ser igual ao número de dados disponíveis. Esta forma é requerida princiapalmente quando uma ferramenta de iteração precisa ser usada dentro da lista de modelos de outra, e a notação ? pode ser ambígua no modelo mais interno.

Essas ferramentas de iteração são versões extendidas daquelas do Apêndice B do livro Computer Science Logo Style, Volume 3: Advanced Topics by Brian Harvey [MIT Press, 1987]. As extensões são feitas primariamente para permitir números de variáveis de entradas.

Aplique Invoque Paracada Mapeie Mapeie.se Filtro Busque Reduza Mapeiecruzado Cascata Cascata.2 Transfira Geraintseq Geraracseq Aplique APLIQUE modelo lista Comando ou operação que executa o modelo, preenchendo seus parâmetros com os membros da lista de entrada. O número de membros na lista de entrada precisa ser um número aceitável de parâmetros para o modelo. É

Page 303: Manual Logo 3.0

ilegal aplicar a primitiva Aprenda como um modelo, mas qualquer outra é permitida. modelo:(PALAVRA) Modelo a ser aplicado. lista:(LISTA) Lista de conteúdo a serem aplicados. Exemplo:

mostre aplique "soma [1 2 3] 6

Invoque (procedimento de biblioteca) Invoque modelo entrada Invoque modelo entrada1 entrada2 ... Comando ou operação semelhante a Aplique, exceto que as entradas são fornecidas como expressões separadas, em vez de uma lista. saída:(CONTEÚDO) Qualquer conteúdo que o modelo puder emitir. entrada:(LISTA) Conteúdo a ser aplicado. Entrada1:(LISTA) Primeiro conteúdo a ser aplicado. Entrada2:(LISTA) Segundo conteúdo a ser aplicado. modelo:(PALAVRA) Modelo a ser aplicado. Exemplo:

mostre (invoque "soma 1 2 3) 6

Paracada PARACADA listadedados listademodelos (procedimento de biblioteca) (PARACADA listadedados1 listadedados2 ... listademodelos) Comando que avalia a listademodelos repetidamente, uma para cada elemento da listadedados. Se for fornecida mais de uma lista de dados, cada uma delas

Page 304: Manual Logo 3.0

precisa ter o mesmo tamanho. (A entrada de dados pode ser palavras, neste caso o modelo é avaliado uma vez por cada caractere. listadedados:(LISTA) Lista de conteúdos a serem operados um vez. listadedados1:(LISTA) Primeira lista de conteúdos a serem operados um vez. listadedados2:(LISTA) Segunda lista de conteúdos a serem operados um vez. listademodelos:(LISTA) Lista de modelos a serem executados. Em um modelo, o símbolo ?REST representa a porção de entrada de dados à direita do membro que está sendo usado atualmente como o “preenchedor” ?. Ou seja, se a entrada de dados é [A B C D E] e o modelo está sendo avaliado com ? substituído por B, então ?REST é substituído por [C D E]. Em um modelo, o símbolo # representa a posição na entrada de dados do membro que está sendo usado atualmente com o “preenchedor” ?. Ou seja, se a entrada de dados é [A B C D E] e o modelo está sendo avaliado com ? substituído por B, então # será substituído por 2. Exemplo:

paracada [a b c d] [escreva (sn "index # "valor ? "rest ?rest)] index 1 valor a rest b c d index 2 valor b rest c d index 3 valor c rest d index 4 valor d rest

Mapeie (procedimento de biblioteca) MAPEIE listademodelos dados (MAPEIE listademodelos dados1 dados2 ...) Emite uma palavra ou lista, dependendo do tipo de entrada de dados, do mesmo tamanho que a entrada de dados. (Se forem fornecidas mais de uma entrada de dados, a saída será do mesmo tipo que a de dados1.) Cada elemento da saída é o resultado da avaliação de listademodelos, preenchendo os parâmetros com o(s) elemento(s) correspondente(s) da(s) entrada(s) de dados. (Todas as entradas de dados precisam ter o mesmo tamanho.) No caso da saída de uma palavra, os resultados da avaliação do modelo precisam ser palavras, e eles são concatenados com Palavra. dados:(LISTA) Lista dos elementos de dados a serem mapeados.

Page 305: Manual Logo 3.0

dados1:(LISTA) Primeira lista dos elementos de dados a serem mapeados. dados2:(LISTA) Segunda lista dos elementos de dados a serem mapeados. listademodelos:(LISTA) Lista dos modelos em que será aplicado mapeamento. Em um modelo, o símbolo ?REST representa a porção da entrada de dados à direita do membro que está sendo usado atualmente como “preenchedor” ?. Ou seja, se a entrada de dados é [A B C D E] e o modelo está sendo avaliado com ? substituído por B, então ?REST será substituído por [C D E]. Se os slots paralelos estiverem sendo usados, então {?REST 1) fica com ?1 etc. Em um modelo, o símbolo # representa a posição na entrada de dados do membro que está sendo usado atualmente como “preenchedor” ?. Ou seja, se a entrada de dados é [A B C D E] e o modelo está sendo avaliado com ? substituído por B, então # será substituído por 2. Exemplo:

mostre (Mapeie "lista [a b c] [d e f]) [[a d] [b e] [c f]]

Mapeie.se (procedimento de biblioteca) MAPEIE.SE listademodelos dados (MAPEIE.SE listademodelos dados1 dados2 ...) Emite uma lista constituída pela avaliação de listademodelos repetidamente e concatenando os resultados usando SENTENÇA. Ou seja, os membros da saída são membros dos resultados da avaliações. A lista de saída pode, por conseqüência, ser de um tamanho diferente daquele da(s) entrada(s) de dados. (Se o resultado de uma avaliação for uma lista vazia, ele não contribui nada para a saída final.) As entradas de dados podem ser palavras ou listas. dados:(LISTA) Lista de elementos de dados a serem mapeados. dados1:(LISTA) Primeira lista dos elementos de dados a serem mapeados. dados2:(LISTA) Segunda lista dos elementos de dados a serem mapeados. listademodelos:(LISTA) Lista dos modelos em que será aplicado mapeamento.

Page 306: Manual Logo 3.0

Em um modelo, o símbolo ?REST representa a porção da entrada de dados à direita do membro que está sendo usado atualmente como “preenchedor” ?. Ou seja, se a entrada de dados é [A B C D E] e o modelo está sendo avaliado com ? substituído por B, então ?REST será substituído por [C D E]. Se os slots paralelos estiverem sendo usados, então {?REST 1) fica com ?1 etc. Em um modelo, o símbolo # representa a posição na entrada de dados do membro que está sendo usado atualmente como “preenchedor” ?. Ou seja, se a entrada de dados é [A B C D E] e o modelo está sendo avaliado com ? substituído por B, então # será substituído por 2. Exemplo: mostre (Mapeie.se "lista [a b c] [d e f]) [a d b e c f] Filtro Filtro modelos dados (procedimento de biblioteca) Envia uma palavra ou lista, dependendo do tipo de entrada de dados, contendo um subconjunto de membros (para uma lista) ou caracteres (para uma palavra) da entrada. O modelo é avaliado uma vez por cada membro ou caractere dos dados, e ele precisa produzir um valor VERDADEIRO ou FALSO. Se o valor é VERDADEIRO, então a entrada correspondente constituinte é incluída na saída. dados:(LISTA) List of data elements to be filtered. modelos:(PALAVRA) Lista dos modelos Verdadeiro-Falso para filtrar os dados. Em um modelo, o símbolo ?REST representa a porção da entrada de dados à direita do membro que está sendo usado atualmente como “preenchedor” ?. Ou seja, se a entrada de dados é [A B C D E] e o modelo está sendo avaliado com ? substituído por B, então ?REST será substituído por [C D E]. Em um modelo, o símbolo # representa a posição na entrada de dados do membro que está sendo usado atualmente como “preenchedor” ?. Ou seja, se a entrada de dados é [A B C D E] e o modelo está sendo avaliado com ? substituído por B, então # será substituído por 2.

Page 307: Manual Logo 3.0

Exemplo:

aprenda vowelp :arg se :arg="a [envie "verdadeiro] se :arg="e [envie "verdadeiro] se :arg="i [envie "verdadeiro] se :arg="o [envie "verdadeiro] se :arg="u [envie "verdadeiro] envie "falso fim escreva filtro "vowelp "elephant eea

Busque Busque objeto dados (procedimento de biblioteca) Envia o elemento da entrada de dados (de uma lista ou de uma palavra) para o qual o valor produzido pela avaliação do objeto com aquele elemento em seu parâmetro é VERDADEIRO. Caso não haja nenhum elemento, é emitida a lista vazia. dados:(LISTA) Lista de elementos de dados a serem pesquisados. objeto:(PALAVRA) Lista de modelos Verdadeiro-Falso para encontrar dados. Exemplo:

aprenda buscar1 :arg se :arg=1 [envie "verd] envie "falso fim mostre (busque "buscar1 [2 4 3 0]) [] mostre (busque "buscar1 [2 1 3 0]) 1

Page 308: Manual Logo 3.0

Reduza REDUZA modelo dados (procedimento de biblioteca) Envia um resultado aplicando o modelo para acumular os elementos da entrada de dados. O modelo precisa ser uma função de dois parâmetros. Normalmente ele é uma função associativa do tipo "Soma. Se a entrada de dados possui apenas um elemento (membro em uma lista ou caractere em uma palavra), a saída é esse elemento. De outra forma, o elemento é aplicado primeiro com ?1 preenchido com o elemento próximo-ao-último e ?2 com o último elemento. Em seguida, caso haja mais elementos, o modelo é aplicado com ?1 preenchido com o próximo elemento à esquerda e ?2 com o resultado a partir da avaliação anterior. Este processo continua até que todos os elementos tenham sido utilizados. A entrada de dados pode não estar vazia. dados:(LISTA) Lista de elementos de dados para reduzir. modelo:(PALAVRA) Modelo para fazer a redução. Nota: Se o modelo é, como Soma, o nome do procedimento que é capaz de aceitar arbitrariamente muitas entradas, então é mais eficiente usar Aplique em vez de REDUZA. A última é boa para procedimentos associativos que são escritos para aceitar exatamente duas entradas. Exemplo:

aprenda max :a :b envie senão :a > :b [:a] [:b] Fim escreva reduza "max [2 3 8 7 9 0] 9

Opcionalmente, REDUZA pode ser usado para escrever MAX como um procedimento que aceita qualquer número de entradas, assim como faz SOMA:

aprenda max [:entradas] 2 se évazia :entrada [(lance "erro [entradas não suficientes para max])]

Page 309: Manual Logo 3.0

envie reduza [senão ?1 > ?2 [?1] [?2]] :entradas fim escreva (max 2 3 8 7 9 0) 9

Mapeiecruzado (procedimento de biblioteca) MAPEIECRUZADO modelo dados (MAPEIECRUZADO modelo dados1 dados2 ...) Devolve uma lista contendo os resultados das avaliações do modelo. Cada lista de dados contribui para um parâmetro no modelo; o número de parâmetros é igual ao número de entradas de dados. Como um caso especial, se for fornecida apenas uma entrada de lista de dados, essa lista é considerada uma lista das listas de dados, e cada um de seus membros contribui com valores para um parâmetro. MAPEIECRUZADO é diferente de Mapeie, pois em vez de tirar os membros das entradas de dados em paralelo, ele tira todas as combinações de membros das entradas de dados, que não precisam ser do mesmo tamanho. dados:(LISTA) Lista dos elementos de dados para mapeiecruzado. dados1:(LISTA) Primeira lista do elementos de dados para mapeiecruzado. dados2:(LISTA) Segunda lista do elementos de dados para mapeiecruzado. modelo:(PALAVRA) Modelo para realizar cross mapping. Exemplo: mostre (mapeiecruzado [palavra ?1 ?2] [a b c] [1 2 3 4]) [a1 a2 a3 a4 b1 b2 b3 b4 c1 c2 c3 c4] Cascata (prodedimento de biblioteca) CASCATA testefinal modelo valorinicial (CASCATA testefinal modelo1 valorinicial1 modelo2 valorinicial2 ...) (CASCATA testefinal modelo1 valorinicial1 modelo2 valorinicial2 ... modelofinal)

Page 310: Manual Logo 3.0

Devolve o resultado da aplicação de um modelo (ou vários modelos, veja Iteração baseada em modelo) repetidamente, com um valor dado para preencher o parâmetro na primeira vez, e o resultado de cada aplicação preenche o parâmetro para o aplicativo seguinte. No caso mais simples, CASCATA possui três entradas. O modelo é um modelo de expressão de um parâmetro. Esse modelo é avaliado algumas vezes (talvez nenhuma). Na primeira avaliação, o parâmetro é preenchido com a entrada de valorinicial; nas avaliações seguintes, o parâmetro é preenchido com o resultado da avaliação anterior. O número de avaliações é determinado pela entrada do testefinal. Pode ser ou inteiro não negativo, que nesse caso o modelo é avaliado muitas vezes, ou pode ser um modelo de expressão de predicado, e nesse caso ele é avaliado (com o mesmo “preenchedor” de parâmetro que será usado para avaliação da segunda entrada) repetidamente, e a avaliação CASCATA continua com predicado FALSO. (Em outras palavras, o modelo predicado indica a condição para parar.) testefinal:(LISTA) Modelo de teste final. modelo:(PALAVRA) Modelo para realizar cascata. valorinicial:(THING) Valor inicial para iteração inicial. modelo1:(PALAVRA) Primeiro modelo paralelo para realizar cascata. valorinicial1:(CONTEÚDO) Primeiro modelo inicial para a iteração inicial. modelo2:(PALAVRA) Segundo modelo paralelo para realizar cascata. valorinnicial2:(CONTEÚDO) Segundo valor inicial paralelo para a iteração inicial. modelofinal:(PALAVRA) Modelo final para realizar cascata. Se o modelo não for avaliado nenhuma vez, a saída de CASCATA é a terceira (valorinicial) entrada. De outra forma, a saída é o valor produzido pela última avaliação do modelo. Modelos CASCATA podem incluir o símbolo # para representar o número de vezes que o modelo foi avaliado. Esse parâmetro é preenchido com 1 na primeira avaliação, 2 na segunda, e assim por diante. Exemplo:

mostre cascata 5 [jf # ?] [] [1 2 3 4 5]

Page 311: Manual Logo 3.0

mostre cascata 5 [# * ?] 1 120

Muitos resultados podem ser computados em paralelo fornecendo pares de entrada inicial adicionais como entradas para CASCATA. Neste caso, todos os modelos (incluindo o modelo testefinal, se usado) possuem vários parâmetros, com o número dos parâmetros igual ao número de pares de entrada. Em cada rodade de avaliações, ?2 representa o resultado da avaliação do segundo modelo na rodada anterior. Se o número total de entradas (incluindo a primeira entrada testefinal) é um número ímpar, então a saída de CASCATA é o valor final do primerio modelo. Se o número total de entradas é par, então a última entrada é um modelo que é avaliado uma vez, depois de realizado o teste final, para determinar a saída de CASCATA. Exemplo: aprenda fibonacci :n saída (cascata :n [?1 + ?2] 1 [?1] 0) fim Cascata.2 (procedimento de biblioteca) CASCATA.2 testefinal modelo1 valorinicial1 modelo2 valorinicial2 Devolve o resultado de invocar Cascata com as mesmas entradas. A única diferença é que o número padrão de entradas é cinco, em vez de três. testefinal:(LISTA) Modelo de Teste Final. modelo1:(PALAVRA) Primeiro modelo paralelo para realizar cascata. valorinicial1:(CONTEÚDO) Primeiro valor inicial paralelo para a iteração inicial. modelo2:(PALAVRA) Segundo modelo paralelo para realizar cascata. valorinicial2:(THING) Segundo valor inicial paralelo para a iteração inicial. Exemplo: aprenda fibonacci :n envie cascata.2 :n [?1 + ?2] 1 [?1] 0 fim

Page 312: Manual Logo 3.0

Transfira (procedimnento de biblioteca) TRANSFIRA testefinal modelo entrada Emite o resultado da avaliação repetida da entrada modelo. O modelo é avaliado uma vez por cada membro da lista entrada.. Depois de cada avaliação do modelo, o valor resultante torna-se a nova saída. testefinal:(LISTA) Modelo de teste final. modelo:(PALAVRA) Modelo para realizar a transferência. entrada:(CONTEÚDO) Valor inicial para a iteração inicial. No modelo, o símbolo ?IN representa o elementeo atual de entrada; o símbolo ?OUT representa a saída atual. Não precisam ser uados outros símbolos de parâmetro. Se a primeira entrada (testefinal) é uma lista vazia, a avaliação continua até que todos os membros da inbasket tenham sido utilizados. Se não, a primeira entrada precisa ser um modelo de expressão de predicado, e a avaliação continua até que o valor desse modelo seja VERDADEIRO ou a inbasket seja esgotada. Exemplo (para cada palavra na última entrada, se essa palavra já é parte do resultado, esqueça-a; se não, inclu essa palavra no resultado. O resultado, inicialmente, é vazio.):

mostre transfer [] [senão éelemento ?in ?out [?out] [jf ?in ?out]] [A B C B D E F B C G] [A B C D E F G]

Geraintseq Geraintseq final início (procedimento de biblioteca) Autor: Erich Neuwirth <[email protected]> Gera uma lista seqüencial desde início até final. Se início for maior que final então será criada uma lista decrescente. Veja também Geracseq. início:(INTEIRO) Inicial o intervalo da seqüência para a saída.

Page 313: Manual Logo 3.0

final:(INTEIRO) Finaliza o intervalo da seqüência para a saída.

mostre geraintseq 3 7 [3 4 5 6 7] mostre geraintseq 7 3 [7 6 5 4 3]

Geraracseq Geraraqseq início numeroelementos final (procedimento de biblioteca) Autor: Erich Neuwirth <[email protected]> Gera uma lista ordenada de numeroelementos igualmente espaçada de números racionais começando com início e terminando com final. Veja também Geraintseq. listaseqüencial:(LISTA) Lista de números entre de e até. início:(NÚMERO) Inicia o intervalo da seqüência para a saída. final:(NÚMERO) Termina o intervalo da seqüência para a saída. númeroelementos:(INTEIRO) Número de elementos para gerar a lista de saída.

mostre geraracseq 3 5 9 [3 3.25 3.5 3.75 4 4.25 4.5 4.75 5] mostre rseq 3 5 5 [3 3.5 4 4.5 5]

COMANDOS DE MACRO .macro .defmacro .macro .MACRO nome_proc :entrada1 :entrada2 ... (formato especial)

Page 314: Manual Logo 3.0

Uma macro é um tipo especial de procedimento cuja saída é avaliada pelas instruções do Logo no contexto do chamador da macro. .MACRO é como Aprenda, exceto pelo fato de que o novo procedimento inicia uma macro. nome_proc:(PALAVRA) Nome do procedimento de macro definido (mas não precedido por um ["]). entrada1:(PALAVRA) Primeiro argumento para o procedimento de macro definido (precedido por um [:]). entrada2:(PALAVRA) Segundo argumento para o procedimento de macro definido (precedido por um [:]). As macros são úteis para a invenção de novas estruturas de controle comparáveis a Repita, Se e outras. Como algumas estruturas de controle podem ser quase, mas não todas, duplicadas primariamente por procedimentos do Logo. Por exemplo, aqui está um procedimento comum da versão de Repita:

aprenda meu.repita :num :instruções se :num=0 [pare] faça :instruções meu.repita :num-1 :instruções fim

Esta versão funciona bem para a maioria dos propósitos.

meu.repita 5 [escreva "olá] Mas ela não funciona se as instruções a serem carregadas incluem Envie, Para ou Local. Por exemplo, considere este procedimento:

aprenda exemplo escreva [Adivinhe minha palavra secreta. Você tem três chances.] repita 3 [guardeparaescrever "|?? | ~ se leiapalavra = "secreto [esc "Certo! pare]] escreva [Sinto muito, a palavra era "secreto"!] fim

Page 315: Manual Logo 3.0

Este procedimento trabalho como escrito, mas se for usado MEU.REPITA em vez de REPITA, ele não funcionará porque Pare irá parar MEU.REPITA, em vez de parar EXEMPLO, como desejado. A solução é tornar MEU.REPITA uma macro. Em vez de executar um procedimento, uma macro precisa retornar uma lista contendo instruções do Logo. O conteúdo daquela lista é avaliado como se ele aparecesse no lugar da chamada da macro. Veja aqui uma versão em macro de Repita:

.macro meu.repita :num :instruções se :num=0 [envie []] envie sentença :instruções ~ (lista "meu.repita :num-1 :instruções) fim

Toda macro é uma operação -- ela sempre precisa emitir algo. Mesmo no caso básico, MEU.REPITA emite uma lista de instrução vazia. Para mostrar como MEU.REPITA funciona, vamos ver o exemplo a seguir:

meu.repita 5 [escreva "olá] Para este exemplo, MEU.REPITA emitirá a lista de instrução

[escreva "olá meu.repita 4 [escreva "olá]] O Logo, então, executas essas instruções no lugar da invocação original de MEU.REPITA; que escreve "olá" uma vez e invoca outra repetição. A técnica exibida acima, embora muito simples de entender, possui o problema de ser vagarosa porque cada repetição tem de construir uma lista de instrução para avaliação. Outro método é tonar meu.repita uma macro que trabalhe exatamente como uma versão não-macro, a menos que as instruções que serão repetidas incluam Envie ou Pare.

.macro meu.repita :num :instruções pegue "repita.peguetag ~ [envie repita.done façaenvie [repita1 :num :instruções]] envie [] fim

Page 316: Manual Logo 3.0

aprenda repita1 :num :instruções se :num=0 [lance "repita.peguetag] faça :instruções .maybeoutput repita1 :num-1 :instruções fim aprenda repita.done :repita.resultado se évazia :repita.resultado [envie [pare]] envie lista "envie pri :repita.resultado fim

Se as instruções não incluem Pare ou Envie, então REPITA1 alcançará sua base e invocará Lance. Como resultado, a última linha de instrução de meu.repita emitirá uma lista vazia, portanto a segunda avaliação do resultado da macro não dará em nada. Mas se ocorrer um Pare ou Envie, então REPITA.DONE emitirá uma instrução Pare ou Envie que será re-executada no contexto chamador. Os comandos de definição de macro possuem nomes começando com um ponto porque as macros são um recurso avançado do Logo; é fácil ver-se em problemas definindo uma macro que não termina, ou falhando ao construir a lista de instrução apropriadamente. Usuários Lisp devem notar que as macros do Logo NÃO são de formatos especiais. Ou seja, as entradas para a macro são avaliadas normalmente, à medida que elas deveriam ser para qualquer outro procedimento Logo. Ela é apenas a saída da macro que é manuseada extraordinariamente. .Defmacro .DEFMACRO nome_proc texto .DEFMACRO é como DEFINA com as mesmas exceções_macro de .MACRO. nome_proc:(PALAVRA) Nome do procedimento de macro definido. texto:(LISTA) Definição do procedimento de macro como uma lista. Exemplo:

Page 317: Manual Logo 3.0

Veja DEFINA e .MACRO. ERRO DE PROCESSAMENTO Caso ocorra um erro, o Logo segue os seguintes passos. Primeiro, caso haja uma variável disponível chamada Trataerro, o Logo pega o seu valor como uma lista de instrução e executa as instruções. A operação Erro pode ser usada dentro de instruções (uma vez) para examinar a condição do erro. Se a lista de instrução invoca PAUSA, a mensagem de erro é escrita antes da pausa. Alguns erros são "corrigíveis"; para um desses erros, se a lista de instrução emitir um valor, esse valor é usado no lugar da expressão que causou o erro. (Se TRATAERRO invoca Pausa e o usuário, depois, invoca Continue com uma entrada, sua entrada torna a saída de PAUSA e depois a saída da lista de instrução TRATAERRO.) Isto é possível para uma lista de instrução TRATAERRO para produzir um valor impróprio ou nenhum valor quando um é solicitado. Como resultado, a mesma condição de erro poderia retornar sempre por causa de seu mecanismo. Para evitar esse perigo, se a mesma condição de erro ocorrer duas vezes em uma linha a partir de uma lista de instrução TRATAERRO sem interação com o usuário, a mensagem é escrita e o controle retorna para o nível superior. "Sem interação com o usuário" significa que TRATAERRO invoca PAUSA e o usuário fornece um valor incorreto, este mecanismo de prevenção contra loops não surte efeito e o usuário precisa tentar novamente. Caso não haja nenhum valor TRATAERRO disponível, o Logo manipula o erro gerando um Lance "ERRO interno. (Um programa de usuário também pode gerar uma condição de erro deliberadamente invocando LANCE.) Se este lance não é capturada por um Pegue "ERRO no programa do usuário, ele eventualmente é capturado pelo loop de instrução de nível superior ou por um loop de pausa, que escreve a mensagem de erro. Uma invocação de PEGUE "ERRO em um programa de usuário libera TRATAERRO localmente, portanto o efeito é que, independente do valor de TRATAERRO o PEGUE "ERRO mais local terá precedência. Se ocorrer uma sobrecarga de ponto flutuante durante uma operação aritmética, ou uma função matemática de duas entradas (como Potência) é invocada com uma combinação ilegal de entradas, a mensagem "não admite"

Page 318: Manual Logo 3.0

refere-se ao segundo operando, mas precisa ser pego de acordo com a combinação. VARIÁVEIS ESPECIAIS O Logo tem uma ação especial se qualquer um dos nomes de variáveis a seguir existir. Elas seguem as regras de escopo normais, portanto um procedimento pode configurar uma delas localmente para limitar a ação de seu efeito. Comandos especiais Trataerro Profundidadeimpressão Tamanhoimpressão Iniciar Dadosmáquina Trataerro TRATAERRO Uma lista de instrução que será executada caso haja um erro. Normalmente possui o [Pausa] para permitir depuração interativa. Exemplo:

ponhalimite pf 1000 Tartaruga fora dos limites atribua "Trataerro [escreva [Você realmente a assoprou]] pf 1000 Você realmente a assoprou

Page 319: Manual Logo 3.0

Profundidadeimpressão PROFUNDIDADEIMPRESSÃO Se um inteiro não negativo, indica a profundidade máxima da estrutura de sublista que será escrita por Escreva etc. Exemplo:

escreva [[1 [2 [3 [4 [5]]]]]] [1 [2 [3 [4 [5]]]]]] atribua "profundidadeimpressão 4 escreva [[1 [2 [3 [4 [5]]]]]] [1 [2 [3 [... ...]]]]

Tamanhoimpressão TAMANHOIMPRESSÃO Se um inteiro não negativo, indica o número máximo de elementos em qualquer lista que será escrita por Escreva etc.

escreva [1 2 3 4 5 6] 1 2 3 4 5 6 atribua "tamanhoimpressão 4 escreva [1 2 3 4 5 6] 1 2 3 4 ...

Iniciar Iniciar Se registrado um valor de lista em um arquivo carregado por Carregue, esse valor é executado como uma listadeinstrução depois de carregado. Exemplo:

aprenda meuprograma escreva "Olá fim

Page 320: Manual Logo 3.0

atribua "iniciar [meuprograma] salve "meuprograma.lg carregue "meuprograma.lg Olá

Dadosmáquina DADOSMÁQUINA Este comando exibe as características da máquina em uma lista. Onde a lista possui o seguinte formato [Windows Versão-Windows BitMap-largura BitMap-altura Palheta-de-cores]. Onde Palheta-de-cores é um 1 se verdadeiro e 0 se falso. Pode ser usado para escrever código que é comatível entre múltiplas plataformas. Windows 3.0 = 30 Windows 3.1 = 31 NT/Windows 95 = 40 Exemplo:

mostre Dadosmáquina [1 31 1000 1000 0]

COMANDOS DE AJUDA Ajuda Socorro Ajuda AJUDA (AJUDA palavra-chave) Este comando possui duas formas (com e sem um argumento de palavra-chave). Sem uma palavra-chave, o Logo entrará na janela inicial de ajuda do LOGO. Com um argumento de palavra-chave o Logo irá pesquisar a ajuda do Windows pela palavra-chave. Você pode inserir a palavra-chave inteira ou apenas uma parte dela.

Page 321: Manual Logo 3.0

palavra-chave:(PALAVRA) Uma palavra-chave que você, normalmente, poderia inserir em um mecanismo de pesquisa da ajuda. Exemplo:

ajuda "introdução ;(Abre a ajuda na introdução) Para ajuda sensível a contexto, veja o comando Edite. Note também que a Ajuda do Windows permite que você Copie texto da Ajuda para a Área de Transferência. Desde que o Editor dentro do Logo também seja compatível com Área de Transferência, isto significa que você pode copiar exemploes de dentro da Ajuda para o Editor, salvá-los e, depois, executá-los. Para fazer isso:

Selecione o Texto desejado Clique em EDITAR no menu do arquivo de Ajuda. Selecione COPIAR Abra o Editor do Logo. posicione o cursor onde você deseja inserir o texto de exemplo. Clique em EDITAR no menu Editar. Selecione Colar (agora ele está no Editor).

Socorro SOCORRO nomedoarquivo (SOCORRO nomedoarquivo palavra-chave) Este comando possui duas formas (com e sem um argumento de palavra-chave). Sem uma palavra-chave, o Logo irá abrir a ajuda do Windows no NOMEDOARQUIVO desejado no início do mesmo. Com um argumento de palavra-chave, o Logo irá pesquisar a ajuda do Windows NOMEDOARQUIVO para a palavra-chave. Você precisa inserir a palavra-chave completa.

nomedoarquivo:(PALAVRA) Um caminho para um arquivo de ajuda que você deseja abrir. palavra-chave:(PALAVRA) Uma palavra-chave que você, normalmente, poderia inserir em um mecanismo de pesquisa da ajuda.

Page 322: Manual Logo 3.0

Exemplo:

(socorro "c:\\minhaajuda "introdução) ; (Abre a ajuda em introdução) COMANDOS DE DIRETÓRIO Mostrearquivos Mostrediretórios Mudedir Voltedir Criedir Removadir Mostrearquivos MOSTREARQUIVOS Emite uma lista de arquivos contidos no diretório atual. Exemplo:

mostre mostrearquivos [logo.doc slogo.exe LOGICEX.BMP LICENSE.TXT SUPERLOGO.TXT mcistrwh.hlp LOGO.CNT]]

Mostrediretórios MOSTREDIRETÓRIOS MODIR Emite uma lista contendo os diretórios no diretórios atual. mostrediretórios [EXEMPLOS LOGOLIB .. .] Mudedir mudedir diretório

Page 323: Manual Logo 3.0

é análogo ao comando chdir (cd) do Dos. O parâmetro tem que ser uma palavra (o nome do diretório com o qual se deseja trabalhar). Você pode usar o comando Dir para ver procedimentos e diretórios. Veja também Voltedir e Criedir. Exemplo:

mudedir "exemplos => Transferido para c:\logo\exemplos voltedir => retornado para c:\logo

Voltedir voltedir volta (em 1 nível) a árvore de diretórios. É equivalente ao comando mudedir. Ver também Mudedir e Criedir. Exemplo:

mudedir "exemplos => transferido para c:\logo\exemplos voltedir => volta para c:\logo

Criedir criedir diretório cria um diretório e muda o diretório atual para o novo diretório. O parâmetro deve ser uma palavra (o nome do diretório a ser criado). Você pode usar o comando Dir para listar os arquivos e diretórios no diretório atual. Uma vez criado o diretório, é possível voltar (Voltedir) ao diretório anterior e criar outro.

Page 324: Manual Logo 3.0

Exemplo: criedir "lixo => agora em diretório recém criado lixo voltedir => retornado para c:\logo

Removadir Removadir diretório Remove (apaga) um diretório. O parâmetro deve ser uma palavra (o nome de um diretório existente). É impossível remover um diretório se este for o diretório atual, ou se o diretório não estiver vazio (Dir não deve retornar nada enquanto for usado no diretório a ser removido). Portanto, para ter certeza que será possível removê-lo, use o comando dir e verifique se ele existe, então mude para o diretório a ser removido (mudedir), use dir novamente e confirme que está vazio, volte ao diretório anterior (Voltedir) e remova-o. Ver também Criedir. Exemplo:

criedir "lixo => agora em diretório recém-criado lixo voltedir => retornado para c:\logo removadir "lixo => diretório do Slogo lixo removido

FUNÇÕES DO WINDOWS Esta seção descreve como o programador em LOGO pode criar poderosas Interfaces Gráficas com o Usuário (Graphical User Interfaces -- GUIs). A maioria das GUIs possui uma Interface de Programação de Aplicativo (Application Programming Interface -- API), que é o que esta seção estará abordando em relação ao Windows. Tanto a GUI quanto a API mantêm um relacionamento pai-filho. Ou seja, o Windows e os controles aparecem

Page 325: Manual Logo 3.0

(graficamente) de modo aninhado (no qual um fica dentro de outro). A aparência aninhada é mantida no código que você desenvolve para exibi-la. Para cada comando "CRIEalgo" é preciso especificar um pai que identifica o relacionamento. Quando um pai de qualquer tipo é "APAGUEalgo" então todos os seus "filhos" e controles do Windows também serão. Cada função (comando) do Windows especifica um "nome". Nos comandos "CRIEalgo" ele está lá para nomear o "algo" para que posteriormente ele possa ser referido. Na maioria dos outros comando, ele é utilizado como um "manipulador" para identificar a Janela ou controle com o qual você deseja se comunicar. E terceiro, ela também é usada para fazer menção ao "pai" da Janela ou controle que "possui" este novo "algo". Quando os controles estão em janelas, as coordenadas usadas em todas as funções do Windows estão no sistema de coordenadas do Windows (e NÃO o sistema de coordenadas da tartaruga). Ou seja, eixo Y é numerado de maneira inversa (números Positivos são para baixo). A origem NÃO é no meio da tela, ela é no canto superior esquerdo da janela. Quando os controles estão na janela de imagens, as coordenadas serão o sistemas de coordenadas da tartaruga. Comandos de janela Comandos de diálogo Comandos de caixa de listagem Comandos de caixa de combinação Comandos de barra de rolagem Comandos de botão Comandos estáticos Comandos de caixa de grupo Comandos de caixa de marcação Comandos de botão de rádio Comandos de rastreio Janelas modais versus não-modais Janelas predefinidas Exemplos de janelas Comandos de janela

Page 326: Manual Logo 3.0

Criejanela Apaguejanela Criejanela criejanela pai nome título posiçãox posiçãoy largura altura criejan pai nome título posiçãox posiçãoy largura altura Cria uma janela que poderá ser usada como uma área de trabalho na qual você pode acrescentar vários objetos ou controles. Você pode adicionar objetos como botões, barras de rolagem, caixas de listagem etc. à JANELA. (veja Janelas modais versus janelas não-modais) Pai: (palavra) nome da janela do Windows que possuirá esta nova janela. Se esta for a primeira janela criada use "main como nome do pai. Nome: (palavra) identifica a janela (provavelmente para que esta janela vire pai ou controle de outra janela) e deve ser único. Título: (palavra) título da janela. Posiçãox: (inteiro) posição x onde será colocado o canto superior esquerdo da nova janela. Posiçãoy: (inteiro) posição y onde será colocado o canto superior esquerdo da nova janela. Largura: (inteiro) largura da nova janela. Altura: (inteiro) altura da nova janela. Exemplo:

criejanela "main "minhajanela "meutítulo 20 20 100 100 apaguejanela "minhajanela

Apaguejanela Apaguejanela nome apjan nome Fecha (elimina) a janela com o nome dado. Note que todas as janelas filhas e os controles destas janelas também serão eliminados. Nome: (palavra) identifica a janela a ser eliminada

Page 327: Manual Logo 3.0

Exemplo:

criejanela "main "minhajanela "meutítulo 0 0 100 100 apaguejanela "minhajanela

Comandos de diálogo Criediálogo Apaguediálogo Criediálogo criediálogo pai nome título posiçãox posiçãoy largura altura ajuste criedialogo pai nome título posiçãox posiçãoy largura altura ajuste Cria uma janela de diálogo. Uma janela de diálogo é usada como uma área de trabalho onde você pode acrescentar outras janelas ou controles. Pode-se acrescentar coisas como: botões, barra de rolamento, caixas de listagem, etc, na janela de diálogo. Esta função é similar a criejanela com a diferença de não devolver o controle à janela que a chamou até que a janela seja fechada. Ver Janelas modais versus não-modais. Pai: (palavra) nome da janela de diálogo que possuirá esta nova janela. Se esta for a primeira janela criada, use “main como nome do pai. Nome: (palavra) identifica a janela de diálogo (provavelmente para que esta janela vire pai ou controle de outra janela) e deve ser único. Título: (palavra) título da janela de diálogo. Posiçãox: (inteiro) posição x onde será colocado o canto superior esquerdo da nova janela de diálogo. Posiçãoy: (inteiro) posição y onde será colocado o canto superior esquerdo da nova janela de diálogo. Largura: (inteiro) largura da nova janela de diálogo. Altura: (inteiro) altura da nova janela de diálogo. Ajuste: (lista) é uma (pequena) lista de comandos do LOGO (ou nome de procedimento) para executar quando a janela de diálogo é criada. O comando a ser executado é, na maioria das vezes, outras funções crie para adicionar controles à janela de diálogo. Isso ocorre porque criediálogo não devolve o controle ao programa até que a janela seja fechada, impossibilitando adicionar

Page 328: Manual Logo 3.0

controles à janela de diálogo. Portanto, certifique-se de que tenha algum botão (ok, fim, fechar, cancelar ou qualquer outro) que chamará apaguediálogo para esta janela. Exemplo:

aprenda meuajuste criebotão "meudiálogo "meuok "ok 25 25 50 50 [apaguediálogo "meudiálogo] fim criediálogo "main "meudiálogo "meutítulo 20 20 100 100 [meuajuste]

Apaguediálogo Apaguediálogo nome Apdialogo nome Fecha (elimina) a janela de diálogo com o nome dado. Note que todas as janelas filhas e os controles serão apagados. Nome: (palavra) identifica a janela de diálogo que você quer fechar. Exemplo:

aprenda majuste criebotão "meudiálogo "meuok "ok 25 25 50 50 [apaguediálogo "meudiálogo] fim criediálogo "main "meudiálogo "meutítulo 20 20 100 100 [majuste] Comandos de caixa de listagem

Criecaixalistagem Apaguecaixalistagem Selecionecaixalistagem Adicionecaixalistagem

Page 329: Manual Logo 3.0

Retiredacaixalistagem Criecaixalistagem criecaixalistagem pai nome posiçãox posiçãoy largura altura criecxlist pai nome posiçãox posiçãoy largura altura cria uma caixa de listagem. Uma caixa de listagem é usada para dar aos usuários uma relação de itens. Pai: (palavra) nome da janela de diálogo que irá conter esta nova caixa de listagem. Nome: (palavra) usado para identificar esta caixa de listagem. Posiçãox: (inteiro) posição x onde será colocado o canto superior esquerdo da nova caixa de listagem. Posiçãoy: (inteiro) posição y onde será colocado o canto superior esquerdo da nova caixa de listagem. Largura: (inteiro) largura da nova caixa de listagem. Altura: (inteiro) altura da nova caixa de listagem. Exemplo:

criejanela "main "minhajanela "meutítulo 20 20 100 100 criecaixalistagem "minhajanela "minhalista 25 25 50 50 apaguejanela "minhajanela

Apaguecaixalistagem apaguecaixalistagem nome apcxlist nome Fecha (elimina) a caixa de listagem com o nome dado. nome: (palavra) usado para identificar a caixa de listagem a ser fechada. Exemplo:

criejanela "main "minhajanela "meutítulo 20 20 100 100 criecaixalistagem "minhajanela "minhalista 25 25 50 50 apaguecaixalistagem "minhalista apaguejanela "minhajanela

Page 330: Manual Logo 3.0

Selecionecaixalistagem selecionecaixalistagem nome selcxlist nome Solicita à caixalistagem o item selecionado e retorna uma cópia deste. Nome: (palavra) identifica a caixadelistagem para a qual será feita a solicitação. Exemplo:

aprenda desenho tat se sãoiguais [triângulo] selecionecaixalistagem "minhalista [repita 3[pf 100 pd 120]] se sãoiguais [quadrado] selecionecaixalistagem "minhalista [repita 4[pf 100 pd 90]] fim criejanela "main "minhajanela "meutítulo 20 20 100 100 criecaixalistagem "minhajanela "minhalista 20 20 50 50 adicionenacaixalistagem "minhalista[triângulo] adicionenacaixalistagem "minhalista [quadrado] criebotão "minhajanela "meudesenho "desenhe 20 70 50 25 [desenho] <selecione uma figura e aperte desenho> apaguejanela "minhajanela

Adicionenacaixalistagem adicionenacaixalistagem nome item adnacxlist nome item adiciona o "item" à caixa de listagem com o nome dado. Nome: (palavra) identifica a caixa de listagem na qual se quer adicionar um item. Item: (palavra) é o item a ser inserido na caixa de listagem. Exemplo:

Page 331: Manual Logo 3.0

aprenda desenho tat se sãoiguais [triângulo] selecionecaixalistagem "minhalista [repita 3[pf 100 pd 120]] se sãoiguais [quadrado] selecionecaixalistagem "minhalista [repita 4[pf 100 pd 90]] fim criejanela "main "minhajanela "meutítulo 20 20 100 100 criecaixalistagem "minhajanela "minhalista 25 25 50 50 adicionenacaixalistagem "minhalista [triângulo] adicionenacaixalistagem "minhalista [quadrado] criebotão "minhajanela "meudesenho "desenhe 25 70 50 25 [desenho] <selecione uma figura e aperte desenho> apaguejanela "minhajanela

Retiredacaixalistagem retiredacaixalistagem nome índice retiredacxlist nome índice elimina o item índice da caixa de listagem. Nome: (palavra) identifica a caixa de listagem da qual será apagado o item. Índice: (inteiro) índice do item que será apagado (começando no 0). Exemplo:

criejanela "main "minhajanela "meutítulo 20 20 100 100 criecaixalistagem "minhajanela "minhalista 20 20 50 50 adicionenacaixalistagem "minhalista [triângulo] adicionenacaixalistagem "minhalista [quadrado] adicionenacaixalistagem "minhalista [hexágono] retiredacaixalistagem "minhalista 1 apaguejanela "minhajanela

Comandos de caixa de combinação

Page 332: Manual Logo 3.0

Criecaixacombinação Apaguecaixacombinação Textodacaixacombinação Adicionetextonacaixacombinação Adicionenacaixacombinação Retiredacaixacombinação Criecaixacombinação criecaixacombinação pai nome posiçãox posiçãoy largura altura criecxcomb pai nome posiçãox posiçãoy largura altura Cria uma caixa de combinação. Uma caixa de combinação é usada para dar ao usuário uma seleção de itens fornecendo a este usuário a opção de entrar com seu próprio item que não esteja listado. A caixa de combinação é uma junção de dois controles (a caixa de listagem e um controle de edição). Se você deseja criar um controle de edição, mude a altura para um tamanho no qual a caixa de combinação não caiba. Pai: (palavra) nome da janela de diálogo que irá conter esta nova caixa de combinação. Nome: (palavra) usado para identificar esta caixa de listagem. Posiçãox: (inteiro) posição x onde será colocado o canto superior esquerdo da nova caixa de combinação. Posiçãoy: (inteiro) posição y onde será colocado o canto superior esquerdo da nova caixa de combinação. Largura: (inteiro) largura da nova caixa de combinação. Altura: (inteiro) altura da nova caixa de combinação. Exemplo:

criejanela "main "minhajanela "meutítulo 20 20 100 100 criecaixacombinação "minhajanela "meucomb 25 25 50 50 apaguejanela "minhajanela

Apaguecaixacombinação apaguecaixacombinação nome apcxcomb nome Fecha (elimina) a caixa de combinação com o nome dado.

Page 333: Manual Logo 3.0

Nome: (palavra) identifica a caixa de combinação que você quer eliminar. Exemplo:

criejanela "main "minhajanela "meutítulo 20 20 100 100 criecaixacombinação "minhajanela "meucomb 25 25 50 50 apaguecaixacombinação "meucomb apaguejanela "minhajanela

Textodacaixacombinação Textodacaixacombinação nome textodacxcomb nome Solicita à caixa de combinação o conteúdo da sua parte de edição (que pode estar selecionado ou não). Nome: (palavra) identifica a caixa de combinação. Exemplo:

aprenda figura tat atr "lados primeiro textodacaixacombinação "meucomb repita :lados [pf 50 pd 360.0/:lados] fim criejanela "main "minhajanela "meutítulo 20 20 100 100 criecaixacombinação "minhajanela "meucomb 25 25 50 50 adicionenacaixacombinação "meucomb [3] adicionenacaixacombinação "meucomb [4] adicionenacaixacombinação "meucomb [5] adicionenacaixacombinação "meucomb [6] criebotão "minhajanela "meudesenho "desenhe 25 70 50 25 [figura] <selecione ou entre com o número de lados na caixa de combinação e pressione o botão desenho> apaguejanela "minhajanela

Adicionetextonacaixacombinação

Page 334: Manual Logo 3.0

adicionetextonacaixacombinação nome texto adtextonacxcomb nome texto Define o conteúdo da parte de edição da caixa de combinação para texto. Nome: (palavra) identifica a caixa de combinação. Texto: (palavra) item a ser inserido para o componente de edição da caixa de combinação. Exemplo:

criejanela "main "minhajanela "meutítulo 20 20 100 100 criecaixacombinação "minhajanela "meucomb 25 25 50 50 adicionenacaixacombinação "meucomb [3] adicionenacaixacombinação "meucomb [4] adicionenacaixacombinação "meucomb [5] adicionenacaixacombinação "meucomb [6] adicionetextonacaixacombinação "meucomb [3] apaguejanela "minhajanela

Adicionenacaixacombinação adicionenacaixacombinação nome item adnacxcomb nome item Adiciona o item na caixa de combinação com o nome dado. Note que os itens na caixa de listagem são automaticamente ordenados quando são inseridos. Nome: (palavra) identifica a caixa de combinação na qual se deseja fazer a adição. Item: (lista) item a ser inserido ao componente “caixa de listagem” da caixa de combinação. Exemplo:

aprenda figura tat atr "lados primeiro mostretextodacaixacombinação "meucomb repita :lados [pf 50 pd 360.0/:lados] fim

Page 335: Manual Logo 3.0

criejanela "main "minhajanela "meutítulo 20 20 100 100 criecaixacombinação "minhajanela "meucomb 25 25 50 50 adicionenacaixacombinação "meucomb [3] adicionenacaixacombinação "meucomb [4] adicionenacaixacombinação "meucomb [5] adicionenacaixacombinação "meucomb [6] criebotão "minhajanela "meudesenho "desenhe 25 70 50 25 [figura] <selecione ou entre com o número de lados na caixa de combinação e pressione o botão desenho> apaguejanela "minhajanela

Retiredacaixacombinação retiredacaixacombinação nome índice retiredacxcomb nome índice Elimina um item referente ao índice determinado da caixa de combinação com o nome dado. Nome: (palavra) identifica a caixa de combinação de onde será apagado um item. Índice: (inteiro) índice do item a ser apagado (começando no 0). Exemplo:

criejanela "main "minhajanela "meutítulo 20 20 100 100 criecaixacombinação "minhajanela "meucomb 25 25 50 50 adicionenacaixacombinação "meucomb [3] adicionenacaixacombinação "meucomb [4] adicionenacaixacombinação "meucomb [5] adicionenacaixacombinação "meucomb [6] retiredacaixacombinação "meucomb 1 apaguejanela "minhajanela

Comandos de barra de rolagem Criebarrarolagem Apaguebarrarolagem Mudebarrarolagem

Page 336: Manual Logo 3.0

Barrarolagem criebarrarolagem criebarrarolagem pai nome posiçãox posiçãoy largura altura chamada criebarrarol pai nome posiçãox posiçãoy largura altura chamada Cria uma barra de rolagem. Uma barra de rolagem é um controle usado para solicitar do usuário o valor de uma variável (apesar desta função poder ser definida para outras coisas). É também comum ligar a barra de rolagem a um controle estático para informar o usuário da sua condição (apesar de não ser nescessário). Obs: não esquecer de ajustar o intervalo e o valor inicial da barra de rolagem usando Mudebarraderolagem. A orientação (vertical ou horizontal) da barra de rolagem é determinada pela maior dimensão, isto é, se x > y então será horizontal, caso contrário, vertical. Pai: (palavra) nome da janela que possuirá a barra de rolagem. Nome: (palavra) identifica a barra de rolagem e deve ser único. Posiçãox: (inteiro) posição x onde será colocado o canto superior esquerdo da nova barra de rolagem. Posiçãoy: (inteiro) posição y onde será colocado o canto superior esquerdo da nova barra de rolagem. largura: (inteiro) largura da nova barra de rolagem. Altura: (inteiro) altura da nova barra de rolagem. Chamada: (lista) pequena lista de comandos LOGO (ou um nome de procedimento) a ser(em) executado(s) quando o usuário ajusta a barra de rolagem. É comum chamar um procedimento que informa o usuário do estado da barra de rolagem. Exemplo:

criejanela "main "minhajanela "meutítulo 20 20 100 100 criebarrarolagem "minhajanela "meurol 25 25 50 25 [mudedç barrarolagem "meurol] mudebarrarolagem "meurol 0 360 0 <tente mover a barra de rolagem e observe o que acontece com a Tat> apaguejanela "minhajanela

Page 337: Manual Logo 3.0

Apaguebarrarolagem apaguebarrarolagem nome apbarrarol nome Fecha (elimina) a barra de rolagem com o nome dado. Nome: (palavra) identifica a barra de rolagem e ser fechada. Exemplo:

criejanela "main "minhajanela "meutítulo 20 20 100 100 criebarrarolagem "minhajanela "meurolamento 25 50 50 25 [] apaguebarrarolagem "meurolamento apaguejanela "minhajanela

Mudebarrarolagem mudebarrarolagem nome Mínimo Máximo posição mudebarrarol nome Mínimo Máximo posição Ajusta o alcance e a posição atual da barra de rolagem. Este comando pode ser usado quantas vezes for necessário. Nome: (palavra) identifica a barra de rolagem que se quer ajustar. Mínimo: (inteiro) limite inferior da barra de rolagem. Máximo: (inteiro) limite superior da barra de rolagem. Posição: (inteiro) posição atual (e saída) da barra de rolagem. Exemplo:

criejanela "main "minhajanela "meutítulo 20 20 100 100 criebarrarolagem "minhajanela "meurol 25 50 50 25 [mudedç barrarolagem "meurol] mudebarrarolagem "meurol 0 360 0 <tente mover a barra de rolagem e observe o que acontece com a tartaruga> apaguejanela "minhajanela

Barrarolagem

Page 338: Manual Logo 3.0

barrarolagem nome Retorna a posição da barra de rolagem com o nome dado. Nome: (palavra) identifica a barra de rolagem a ser retornada a posição. Exemplo:

criejanela "main "minhajanela "meutítulo 20 20 100 100 criebarrarolagem "minhajanela "meurol 25 25 50 25 [mudedç barrarolagem “meurol] mudebarrarolagem "meurol 0 360 0 <tente mover a barra de rolagem e observe o que acontece com a tartaruga> apaguejanela "minhajanela

Comandos de botão Criebotão Apaguebotão Mudetextobotão Criebotão criebotão pai nome rótulo posiçãox posiçãoy largura altura chamada criebt pai nome rótulo posiçãox posiçãoy largura altura chamada Cria um botão. Um botão permite ao usuário disparar eventos. A única função de um botão é executar a “chamada”. Pai: (palavra) nome da janela que possuirá este novo botão. Nome: (palavra) identifica o botão. Rótulo:(lista) identifica o rótulo do botão. Posiçãox: (inteiro) posição x onde será colocado o canto superior esquerdo do novo botão. Posiçãoy: (inteiro) posição y onde será colocado o canto superior esquerdo do novo botão. Largura: (inteiro) largura do novo botão. Altura: (inteiro) altura do novo botão.

Page 339: Manual Logo 3.0

Chamada: (lista) pequena lista de comandos do LOGO (ou nome de procedimento) a executar quando o usuário clicar o botão. Exemplo:

criejanela "main "minhajanela "meutítulo 20 20 100 100 criebotão "minhajanela "meuesquerdo "esquerda 10 40 40 40 [pf 20 pe 1] criebotão "minhajanela "meudireito "direita 50 40 40 40 [pf 20 pd 1] <clique esquerda e direita repetidamente e observe a tartaruga> apaguejanela "minhajanela

Apaguebotão apaguebotão nome apbt nome fecha (elimina) o botão com o nome dado. Nome: (palavra) identifica o botão a ser eliminado. Exemplo:

criejanela "main "minhajanela "meutítulo 20 20 100 100 criebotão "minhajanela "meubotão "puxe 25 25 25 25 [esc "puxado] apaguebotão "meubotão apaguejanela "minhajanela

Mudetextobotão MUDETEXTOBOTÃO nome texto MUDETEXTOBOTAO nome texto Este comando substituirá os conteúdos do controle do BOTÃO “nome” com "texto". nome:(PALAVRA) É usado para identificar o controle de BOTÃO que você deseja atualizar. texto:(LISTA) É usado como os novos conteúdos do controle de BOTÃO. Exemplo:

Page 340: Manual Logo 3.0

criejanela "main "minhajanela "meutítulo 0 0 100 100 [] atribua "Pushed 0 criebotão "minhajanela "meubotão :Pushed 25 25 25 25 [atribua "Pushed :Pushed + 1 Mudetextobotão "meubotão :Pushed] apaguebotão "meubotão apaguejanela "minhajanela

Comandos de textos estáticos Crieestático Apagueestático Mudeestático Crieestático crieestático pai nome texto posiçãox posiçãoy largura altura crieestat pai nome texto posiçãox posiçãoy largura altura Cria um controle estático. Um controle estático é usado simplesmente para exibir um texto. O nome do comando pode ser um pouco ambíguo uma vez que o controle estático pode ser bastante dinâmico usando o comando Mudeestático. Pai: (palavra) nome da janela que irá possuir este novo comando estático. Nome: (palavra) identifica este controle estático e deve ser único. Texto: (lista) conteúdo inicial do controle estático. Posiçãox: (inteiro) posição x onde será colocado o canto esquerdo superior do novo controle estático. Posiçãoy: (inteiro) posição y onde será colocado o canto direito superior do novo controle estático. Largura: (inteiro) largura do novo controle estático. Altura: (inteiro) altura do novo controle estático. Exemplo:

criejanela "main "minhajanela "meutítulo 20 20 100 100 crieestático "minhajanela "meuestático [direção 0] 25 25 50 25 apaguejanela "minhajanela

Page 341: Manual Logo 3.0

Apagueestático apagueestático nome apestat nome Fecha (elimina) o controle estático com o nome dado. Nome: (palavra) identifica o controle estático a ser eliminado. Exemplo:

criejanela "main "minhajanela "meutítulo 20 20 100 100 crieestático "minhajanela "meuestático [isto é estático] 25 25 50 25 apagueestático "meuestático apaguejanela "minhajanela

Mudeestático mudeestático nome texto mudeest nome texto Troca o conteúdo do controle estático com texto. Nome: (palavra) identifica o controle estático a ser ajustado. Texto: (lista) contém o novo conteúdo do controle estático. Exemplo:

criejanela "main "minhajanela "meutítulo 20 20 100 100 crieestático "minhajanela "meuestático [direção 0] 25 25 50 25 repita 360[pd 1 mudeestático "meuestático sn [Direção=]direção] apaguejanela "minhajanela

Comandos de caixa de grupo Criecaixagrupo Apaguecaixagrupo

Page 342: Manual Logo 3.0

Criecaixagrupo criecaixagrupo pai nome posiçãox posiçãoy largura altura criecxgrupo pai nome posiçãox posiçãoy largura altura Cria uma caixa de grupo. Uma caixa de grupo é de controle único do Windows. Único porque tudo o que ele faz é agrupar botões de rádio (Criebotãorádio) e caixas de marcação (Criecaixamarcação) graficamente e logicamente. Botões de rádio e caixas de marcação devem pertencer a uma caixa de grupo. Note também que um botão de rádio e uma caixa de marcação colocados em uma caixa de grupo ainda usam como origem a janela e não a caixa de grupo. Pai: (palavra) janela que possuirá a caixa de grupo. Nome: (palavra) identifica esta caixa de grupo e deve ser único. Posiçãox: (inteiro) posição x onde será colocado o canto superior esquerdo da nova caixa de grupo. Posiçãoy: (inteiro) posição y onde será colocado o canto superior esquerdo da nova caixa de grupo. Largura: (inteiro) largura da nova caixa de grupo. Altura: (inteiro) altura da nova caixa de grupo. Exemplo:

aprenda vermarca senão caixamarcação "escondetat [dt] [at] fim criejanela "main "mjanela "mtítulo 20 20 100 100 criecaixagrupo "mjanela "mcaixa 10 10 80 40 criecaixamarcação "mjanela "mcaixa "escondetat [desapareçatat] 20 20 60 20 criebotão "mjanela "mbotão "faça 40 50 25 25 [vermarca] ;Selecione o item e clique sobre o botão. apaguejanela "mjanela

Apaguecaixagrupo apaguecaixagrupo nome apcxgrupo nome Fecha (elimina) a caixa de grupo com o nome dado.

Page 343: Manual Logo 3.0

Nome: (palavra) identifica a caixa de grupo a ser eliminada. Exemplo:

criejanela "main "minhajanela "meutítulo 20 20 100 100 criecaixagrupo "minhajanela "meugrupo 10 10 80 40 apaguecaixagrupo "meugrupo apaguejanela "minhajanela

Comandos de caixa de marcação criecaixamarcação apaguecaixamarcação caixamarcação ajustecaixamarcação Criecaixamarcação criecaixamarcação pai grupo nome rótulo posiçãox posiçãoy largura altura criecxmarca pai grupo nome rótulo posiçãox posiçãoy largura altura Cria uma caixa de marcação. Uma caixa de marcação é usada para dar ao usuário uma seleção de dois estados (verdadeiro e falso). Uma caixa de marcação deve ser associada com uma caixa de grupo (criecaixagrupo). Pai: (palavra) nome da janela que possuirá a caixa de marcação. Grupo: (palavra) nome da caixa de grupo que irá ser associado à caixa de marcação. Nome: (palavra) identifica a caixa de marcação e deve ser único. Rótulo:(lista) rótulo desta caixa de marcação. Posiçãox: (inteiro) posição x onde será colocado o canto superior esquerdo da nova caixa de marcação. Posiçãoy:(inteiro) posição y onde será colocado o canto superior esquerdo a nova caixa de marcação. Largura: (inteiro) largura da nova caixa de marcação. Altura: (inteiro) altura da nova caixa de marcação. Exemplo:

aprenda verificamarca

Page 344: Manual Logo 3.0

senão caixamarcação "escondetat [dt] [at] fim criejanela "main "minhajanela "meutítulo 20 20 100 100 criecaixagrupo "minhajanela "minhacaixadegrupo 10 10 80 40 criecaixamarcação "minhajanela "minhacaixadegrupo "escondetat [desapareçatat] 20 20 60 20 criebotão "minhajanela "meubotão "faça 40 50 25 25 [verificamarca] apaguejanela "minhajanela

Apaguecaixamarcação apaguecaixamarcação nome apcxmarca nome Fecha (elimina) a caixa de marcação com o nome dado. Nome: (palavra) identificaa a caixa de marcação a ser eliminada. Exemplo:

criejanela "main "minhajanela "meutítulo 20 20 100 100 criecaixagrupo "minhajanela "meugrupo 10 10 80 40 criecaixamarcação "minhajanela "meugrupo "minhamarca [me marque] 20 20 60 20 apaguecaixamarcação "minhamarca apaguejanela "minhajanela

Caixamarcação caixamarcação nome cxmarca nome Retorna o estado (verdadeiro ou falso) de uma caixa de marcação. Nome: (palavra) identifica a caixa de marcação a ser verificado o estado. Exemplo:

aprenda vermarca senão caixamarcação "escondetat [dt] [at]

Page 345: Manual Logo 3.0

fim criejanela "main "minhajanela "meutítulo 20 20 100 100 criecaixagrupo "minhajanela "minhacaixadegrupo 10 10 80 40 criecaixamarcação "minhajanela "minhacaixadegrupo "escondetat [desapareçatat] 20 20 60 20 criebotão "minhajanela "meubotão "faça 40 50 25 25 [vermarca] apaguejanela "minhajanela

Ajustecaixamarcação ajustecaixamarcação nome estado ajcxmarca nome estado Altera o estado da caixa de marcação de acordo com o parâmetro estado (verdadeiro ou falso) passado Nome: (palavra) identifica a caixa de marcação a ser alterada. Estado: (palavra) estado a ser atribuído à caixa de marcação (verdadeiro ou falso). Exemplo:

criejanela "main "minhajanela "meutítulo 20 20 100 100 criecaixagrupo "minhajanela "meugrupo 10 10 80 40 criecaixamarcação "minhajanela "meugrupo "minhamarca [marque me] 20 20 60 20 ajustecaixamarcação "minhamarca "verd ajustecaixamarcação "minhamarca "falso apaguejanela "minhajanela

Comandos de botão de rádio criebotãorádio apaguebotãorádio botãorádio ajustebotãorádio

Page 346: Manual Logo 3.0

Criebotãorádio criebotãorádio pai grupo nome rótulo posiçãox posiçãoy largura altura criebtradio pai grupo nome rótulo posiçãox posiçãoy largura altura Cria um botão de rádio. Um botão de rádio é usado para dar ao usuário uma relação de dois estados (verdadeiro e falso). O usuário será restrito a ter apenas um botão de rádio verdadeiro num grupo de botões num determinado momento. Um botão de rádio deve ser associado a uma caixa de grupo (criecaixagrupo). Pai: (palavra) nome da janela que possuirá o botão de rádio. Grupo:(palavra) nome da caixa de grupo que irá se rassociado ao novo botão de rádio. Nome: (palavra) identifica o botão de rádio e deve ser único. Rótulo:(lista) rótulo deste novo botão de rádio. Posiçãox:(inteiro) posição x onde será colocado o canto superior esquerdo do novo botão de rádio. Posiçãoy:(inteiro) posição y onde será colocado o canto superior esquerdo do novo botão de rádio. Largura:(inteiro) largura do novo botão de rádio. Altura: (inteiro) altura do novo botão de rádio. Exemplo:

aprenda verrádio senão botãorádio "esconde [dt][at] fim criejanela "main "minhajanela "meutítulo 20 20 100 100 criecaixagrupo "minhajanela "meugrupo 10 10 80 60 criebotãorádio "minhajanela "meugrupo "esconde [desapareçatat] 20 20 60 20 criebotãorádio "minhajanela "meugrupo "mostre [apareçatat] 20 40 60 20 criebotão "minhajanela "meubotão "vá 40 70 25 20 [verrádio] apaguejanela "minhajanela

Apaguebotãorádio apaguebotãorádio nome apbtradio nome

Page 347: Manual Logo 3.0

Fecha (elimina) o botão de rádio com o nome dado. Nome: (palavra) identifica o botão de rádio a ser eliminado. Exemplo:

criejanela "main "minhajanela "meutítulo 20 20 100 100 criecaixagrupo "minhajanela "meugrupo 10 10 80 60 criebotãorádio "minhajanela "meugrupo "meurádio [aperte me] 20 20 60 20 apaguebotãorádio "meurádio apaguejanela "minhajanela

Botãorádio botãorádio nome btradio nome retorna o estado (verdadeiro ou falso) do botão de rádio. Nome: (palavra) identifica o botão de rádio do qual se quer obter o estado. Exemplo:

aprenda verrádio senão botãorádio "esconde [dt][at] fim criejanela "main "minhajanela "meutítulo 20 20 100 100 criecaixagrupo "minhajanela "meugrupo 10 10 80 60 criebotãorádio "minhajanela "meugrupo "esconde [desapareçatat] 20 20 60 20 criebotãorádio "minhajanela "meugrupo "mostre [apareçatat] 20 40 60 20 criebotão "minhajanela "meubotão "vá 40 70 25 20 [verrádio] apaguejanela "minhajanela

Ajustebotãorádio ajustebotãorádio nome estado

Page 348: Manual Logo 3.0

ajbtradio nome estado Altera o estado do botão de rádio de acordo com o parâmetro estado (verdadeiro ou falso). Note que o usuário tem apenas um botão de rádio verdadeiro. Este comando pode violar isto, portanto, deve-se usar este comando mantendo um estado correto, isto é, se alterar um botão de rádio para verdadeiro, então certifique-se de que alterou todos os outros botões de rádio na mesma caixa de grupo para falso. Nome: (palavra) identifica o botão de rádio a ser alterado. Estado:(especial) estado (verdadeiro ou falso) para o qual será alterado. Exemplo:

aprenda verrádio senão botãorádio "esconde [dt][at] fim criejanela "main "minhajanela "meutítulo 20 20 100 100 criecaixagrupo "minhajanela "meugrupo 10 10 80 60 criebotãorádio "minhajanela "meugrupo "esconde [desapareçatat] 20 20 60 20 criebotãorádio "minhajanela "meugrupo "mostre [apareçatat] 20 40 60 20 criebotão "minhajanela "meubotão "vá 40 70 25 20 [verrádio] ajustebotãorádio “mostre “verd ajustebotãorádio “esconde “falso apaguejanela "minhajanela

Comandos de rastreio Rastreiejanela Rastreijanela RASTREIEJANELA nome Este comando irá escrever a árvore (hierarquia de janelas), iniciando na janela chamada nome se fornecida, de outra forma, ela irá exibir todos os controles e janelas.

Page 349: Manual Logo 3.0

nome:(PALAVRA) É usado para identificar a janela-raiz que você deseja escrever.

criejanela "main "minhajanela "meutítulo 0 0 100 100 [] criecaixalistagem "minhajanela "minhalista 25 0 50 50 criebotão "minhajanela "meudesenho "Desenhe 25 50 50 25 [Esc "Clique] rastreiejanela “minhajanela Window minhajanela Botão meudesenho ListBox minhalista apaguejanela "minhajanela

Janelas modais versus não-modais A progamação em Windows apresenta dois modos, Modal e Não-Modal. O primeiro (CRIEDIÁLOGO) é semelhante ao modelo de programação não-modal (o aplicativo está sob controle). Do mesmo modo, digamos que você, no meio de uma programação, decide exibir uma informação ao usuário (por exemplo, leialista). Ou seja, o processamento é paralisado até que a informação seja adquirida e outros componentes do aplicativo estejam inacesíveis para o usuário. Por exemplo, exibir ao usuário um nome de arquivo para abrir um documento é Modal. No modo Não-Modal (CRIEJANELA) as tabelas são transformadas, a Janela (usuário) está em controle. Por exemplo o controlador no LOGO é Não-Modal. O programa agora está inativo. O aplicativo é executado quando o usuário aciona um evento (como o pressionamento de um botão). Janelas completas personalizadas estão disponíveis tanto no modo Modal quanto no modo Não-Modal. Janelas pré-definidas Janelas predefinidas permitem que você acesse caixas de diálogo muito comuns que estão disponíveis no Windows. Mostrecaixamensagem Caixasimnão CaixaSeleção

Page 350: Manual Logo 3.0

Caixadequestão Diálogoabrearq Diálogosalvearq Janelaeditearq Mostrecaixamensagem mostrecaixamensagem título corpo mostrecxmsg título corpo Pára o processamento e mostra uma janela de mensagem usando título e corpo. O processamento continua a partir do momento que o usuário clica o botão de ok. Note também que a janela de comandos do LOGO também fica desabilitada até que ok seja clicado. Título: (lista) rótulo do título da janela. Corpo: (lista) texto a ser mostrado na caixa de mensagem. A caixa será ajustada automaticamente. Exemplo:

mostrecaixamensagem [título][este é o corpo]

Caixasimnão CAIXASIMNÃO Título mensagem Este comando irá interromper o processamento e exibir uma mensagem usando um título da janela e uma mensagem . O processamento não continuará até que o usuário clique no botão Sim ou em Não. Lembramos que o controlador do LOGO fica desativado até que um botão seja clicado. Depois que um botão é clicado, este comando irá emitir VERDADEIRO para Sim e FALSO para Não. Título: (LISTA) É o título da janela. mensagem : (LISTA) É usado para preencher uma caixa de mensagem com um determinado texto. A caixa terá seu tamanho redimensionado automaticamente. Exemplo:

Page 351: Manual Logo 3.0

mostre caixasimnão [Pergunta] [Você gosta do Logo?] => clicando em sim verdadeiro

Caixaseleção CAIXASELEÇÃO título lista Este comando interromperá o processamento e exibirá uma mensagem com a barra de título e uma lista com as opções. O processamento não continuará até que o usuário clique no botão OK ou em CANCELAR. Note que o controlador do LOGO fica desativado até que um botão seja clicado. Depois que o botão OK é clicado o comando irá exibir um índice correspondente para o elemento atualmente selecionado (1 para a opção 1, 2 para a opção 2) e 0 se o usuário clicar em CANCELAR. título: (LISTA) É título da janela. lista: (LISTA) É uma lista de itens dentre os quais o usuário pode fazer sua escolha. Exemplo:

mostre Caixaseleção [Escolha cor] [Vermelho Verde Azul] <selecione verde e clique em OK> 2

Caixadequestão CAIXADEQUESTÃO Título mensagem Este comando irá interromper o processamento e exibir uma mensagem com a barra de título e a mensagem. O processamento não continuará até que o usuário clique no botão Sim ou em Não. Lembramos que o controlador do LOGO fica desativado até que um botão seja clicado. Depois que um botão é clicado, este comando exibirá o que o usuário escolheu como resposta. Título: (LISTA) É o título da janela.

Page 352: Manual Logo 3.0

Mensagem: (LISTA) É usado para preencher a caixa de mensagem com o texto fornecido. A caixa não será redimensionada automaticamente, permanecendo pequena. Exemplo:

mostre caixadequestão [Questão] [Você gosta do Logo?] >Digite um texto e escolha OK. [Sim, eu gosto.]

Diálogoabrearq DIÁLOGOABREARQ arquivo Este comando exibirá a caixa de diálogo padrão "ARQUIVO ABRIR". Ela NÃO abre um arquivo, ela apenas permite que o usuário selecione o arquivo desejado usando a Interface Gráfica com o Usuário. O argumento arquivo é usado para definir os padrões do nome, diretório e/ou extensão. A saída é o nome de arquivo completamente especificado que o usuário selecionou. no caso de o usuário selecionar Cancelar, a saída será uma lista vazia ([]). arquivo: (PALAVRA) Especifica o diretório padrão, nome de arquivo e/ou extensão do nome de arquivo. ("*" são permitidas como nome do arquivo ou extensão). Exemplo:

mostre diálogoabrearq [c:\\Arquivos de Programas\\Superlogo\\*.txt] <Irá exibir todos os arquivos terminando em ".txt" no diretório especificado>

Diálogosalvearq DIÁLOGOSALVEARQ arquivo Este comando exibirá uma janela de caixa de diálogo padrão "ARQUIVO SALVAR". Ela NÃO salva um arquivo, ela apenas permite que o usuário selecione o arquivo desejado usando a Interface Gráfica com o Usuário. O argumento arquivo é usado para definir os padrões do nome, diretório e/ou

Page 353: Manual Logo 3.0

extensão. A saída é o nome de arquivo completamente especificado que o usuário selecionou. no caso de o usuário selecionar Cancelar, a saída será uma lista vazia ([]). nomedearquivo:(PALAVRA) Especifica o diretório padrão, nome de arquivo e/ou extensão do nome de arquivo. ("*" são permitidas como nome do arquivo ou extensão). Exemplo:

mostre diálogosalvearq [c:\\Arquivos de Programas\\Superlogo\\*.txt] <Isto irá sxibir todos os arquivos terminados em ".txt" no diretório especificado>

Janelaeditarq JANELAEDITARQ arquivo retorno Este comando exibirá um editor padrão nos nomes de arquivo fornecidos. Quando o usuário sair do editor os conteúdos do retorno de chamada serão executados. nomedoarquivo:(PALAVRA) Especifica o arquivo a ser editado. retornodechamada:(LISTA) É uma (pequena) lista de comando do Logo (ou um nome de procedimento) para ser executado quando o usuário sair do Logo. Exemplo:

janelaeditearq diálogoabrearq "[c:\\Arquivos de Programas\\Superlogo\\*.txt] [Escreva "Concluído]

Exemplos de janelas Observação: para os casos não-modais a configuração deve ser chamada após o retorno de CRIEJANELA. E para o caso modal a configuração tem de ser chamada DURANTE o CRIEDIÁLOGO porque ele não retorna até que a janela seja fechada.

Page 354: Manual Logo 3.0

Após colocar os procedimentos no editor digite janela na Janela de comandos do Logo. Aparentenmente você não notará diferença alguma, porém repare que na forma modal você não consegue utilizar a Janela de comandos, o que não acontece na forma não-modal aprenda janela ; Para exemplo não-modal use esta linha criejanela "main "d1 [Desenhe Figuras] 0 0 150 110 configurar ;Crie janela principal ; Para exemplo modal use esta linha ; criediálogo "main "d1 [Desenhe Figuras] 0 0 150 110 [configurar] ;Crie janela principal fim aprenda configurar crieestático "d1 "st4 [Selecione Forma] 5 10 70 10 ; Rotule a caixa de listagem criecaixalistagem "d1 "l1 5 25 80 40 ;Crie caixa de Listagem com 3 itens adicionenacaixalistagem "l1 "QUADRADO adicionenacaixalistagem "l1 "TRIÂNGULO adicionenacaixalistagem "l1 "HEXÁGONO crieestático "d1 "st11 [Vermelho] 100 10 50 10 ;Rotule a barra de rolagem criebarrarolagem "d1 "s1 100 25 10 50 [meuvermelho] ;Cria a barra de rolagem e chama “meuvermelho” quando alterada mudebarrarolagem "s1 1 255 125 meuvermelho ;Altera limites da barra criebotão "d1 "b1 "Fechar 5 80 40 10 [meufinal] ;Crie botão para chamar “meufinal” criebotão "d1 "b3 "Limpar 55 80 35 10 [Tat] ;Crie botão para limpar janela gráfica criebotão "d1 "b2 "Desenhar 100 80 35 10 [Desenhar] ;Crie botão para chamar “desenhar” fim ; execute esta rotina quando pressionar o botão “Desenhar” aprenda desenhar

Page 355: Manual Logo 3.0

mudecl (lista barrarolagem "s1 0 0) ;Altera cor do lápis de acordo com a posição da barra de rolagen ; Desenhe a forma apropriada de acordo com a caixa de listagem se sãoiguais [HEXÁGONO] selecionecaixalistagem "l1 [repita 6 [pf 100 pd 60]] se sãoiguais [QUADRADO] selecionecaixalistagem "l1 [repita 4 [pf 100 pd 90]] se sãoiguais [TRIÂNGULO] selecionecaixalistagem "l1 [repita 3 [pf 100 pd 120]] fim ; execute esta rotina quando o botão “Fechar” é pressionado aprenda meufinal ; Para exemplo não-modal use isto apaguejanela "d1 ; Para exemplo modal use isto ; apaguediálogo "d1 fim ; execute esta rotina quando a barra de rolagem VERMELHO é ajustada aprenda meuvermelho mudeestático "st11 (sentença [Vermelho] barrarolagem "s1) ;Atuliza o valor mostrado no estático em vermelho fim FUNÇÕES DE BITMAPS As funções de bitmap permitem a manipulação de imagens dentro da Janela gráfica do Super Logo. Comandos bitmap Recortebitmap Copiebitmap Colebitmapíndice

Page 356: Manual Logo 3.0

Colebitmap Mudebitmap Mudeíndicebitmap Índicebitmap Mudemodobitmap Modobitmap Blocobmp Carreguebitmap Salvebitmap Tambmp Tamanhobitmap Carreguegif Salvegif Tamgif Selecioneáreaativa Áreaativa Recortebitmap RECORTEBITMAP largura altura RECORTEBMP largura altura Este comando irá "recortar" parte da imagem e colocá-la dentro da memória do Logo (Área de Transferência se Índicebitmap é 0). A qualquer momento posteriormente você pode "colá-lo" (Colebitmap) novamente dentro da imagem. O LOGO irá recortar iniciando na posição da tartaruga com uma largura do primeiro arguemnto e uma altura do segundo argumento. Veja também Mudeíndicebitmap. largura:(INTEIRO) Especifica a largura do bitmap a ser recortado. altura:(INTEIRO) Especifica a altura do bitmap a ser recortado. Nota: Você pode pensar que essas funções são de 1 pixel em largura e altura quando nós começarmos a usá-las, mas elas realmente não são. A razão é que, se você desenha um quadrado com, digamos, "repita 4 [pf 2 pd 90]" quantos pixels de altura ele terá? Ele terá 3 Pixels, e não 2. A razão disso é um pouco complicada, mas, em resumo, o modo como o Logo desenha é que ele possui uma linha imaginária abaixo do centro de cada pixel. Se um pixel é intersecionado (dividido), então ele é aceso. A distância do centro dos pixels representando o lado esquerdo do quadrado para o centro à direita do quadrado é a distância correta (2 pixels). Mas nós temos de ativar ou desativar

Page 357: Manual Logo 3.0

o pixel inteiro. O Logo os ativa para mostrar a linha. Isto adiciona 1/2 pixel em cada lado, deixando o quadrado com 3x3 pixels de tamanho. Os lados dos bitmaps não vão do "centro do pixel ao centro do pixel" como linhas, eles vão do pixel inteiro ao pixel inteiro. Exemplo:

mudeespessuradolápis [2 2] repita 72 [repita 4 [pf 100 pd 90] mudecl (lista contevezes*3 0 0) pd 5] un mudexy -50 -50 recortebitmap 100 100 tat un repita 36 [pf 150 colebitmap pt 150 pd 10]

Copiebitmap copiebitmap largura altura copiebmp largura altura "Copia" uma parte da imagem ativa na tela e a coloca na memória do LOGO (área de transferência se Índicebitmap é 0). Posteriormente você poderá "colar" (Colebitmap) de volta a imagem. O LOGO vai começar a copiar na posição da tartaruga com a largura do primeiro argumento e a altura do segundo argumento. Veja também Mudeíndicebitmap.

Exemplo:

tat mudeel [2 2] repita 72 [repita 4 [pf 100 pd 90] mudecl (lista cv*3 0 0) pd 5] un mudexy -50 -50 copiebitmap 100 100 tat un repita 36 [pf 150 colebitmap pt 150 pd 10] ul

Page 358: Manual Logo 3.0

Colebitmapíndice COLEBITMAPÍNDICE índice x y Este comando irá "colar" de volta as coordenadas x, y do bitmap no índice, a imagem que foi "cortada" (Recortebitmap) dentro do índice atual (ou na Área de Transferência do índice é 0). Veja também Mudeíndicebitmap e Mudemodobitmap. Não confunda os índices, há o índice atual e aquele em que você deseja colar. As coordenadas x, y especificam onde posicionar o canto inferior esquerdo da imagem a colada relativa relativa ao canto inferior esquerdo da imagem de destino. Por que você precisaria de um comando? Porque o céu é o limite quando o assunto é a utilização de animação de limpeza rápida (sem oscilação). Por exemplo, digamos que você tem uma bola rolando em um segundo plano. Você precisa apagar a bola, colocar o segundo plano para trás e desenhar a bola em sua nova posição. O problema é que o usuário verá você apagando a bola e ficará momentaneamente sem ela na tela. Isso causa uma oscilação, se você faz qualquer coisa na memória (este comando lhe permite fazer isso) e apenas desenha (cola) na tela, a bola na posição 1 é imediatamente precedida pela bola na posição 2 (a posição 1 será cancelada) o usuário não verá oscilação alguma. Lembre-se que o índice de destino precisa ter uma imagem para colar. índice:(INTEIRO) Especifica qual bitmap você deseja colar. x:(INTEIRO) Especifica a coordenada x definida para o índice de destino. y:(INTEIRO) Especifica a coordenada y definida para o índice de destino. Exemplo:

; Desenhe um bloco vermelho 100x100 no Buffer de Bitmap 1 mudeíndicebitmap 1 mudecpl [255 0 0] blocobmp 100 100 copiebitmap 100 100 ; Desenhe um bloco verde 50x50 no Buffer de Bitmap 2 tat mudeíndicebitmap 2 mudecpl [0 255 0] blocobmp 50 50

Page 359: Manual Logo 3.0

copiebitmap 50 50 ; Reserve 100x100 de espaço no Buffer de Bitmap 3 tat mudeíndicebitmap 3 copiebitmap 100 100 ; Copie 1 a 3 mudeíndicebitmap 1 Colebitmapíndice 3 0 0 ; Copie 2 a 3 mudeíndicebitmap 2 Colebitmapíndice 3 25 25 ; Cole 3 para a Tela mudeíndicebitmap 3 colebitmap

Colebitmap Colebitmap Colebmp "Cola" de volta a imagem que foi "recortada" (Recortebitmap) ou "copiada" (Copiebitmap) para a memória do LOGO (ou área de transferência se o índice for 0). O LOGO sempre vai "colar" na posição da tartaruga com a tartaruga sendo o canto inferior esquerdo da figura colada. Veja também Mudeíndicebitmap e Mudemodobitmap. Exemplo:

tat mudeel [2 2] repita 72 [repita 4 [pf 100 pd 90] mudecl (lista cv*3 0 0) pd 5] un mudexy -50 -50 recortebitmap 100 100 tat un repita 36 [pf 150 colebitmap pt 150 pd 10] ul

Mudebitmap mudebitmap largura altura mudebmp largura altura

Page 360: Manual Logo 3.0

Redimensiona a imagem "recortada" ou "copiada" (Recortebitmap ou Copiebitmap) corrente dentro das dimensões especificadas. Posteriormente você poderá "colar" (Colebitmap) de volta a imagem. O LOGO vai ajustar a imagem "recortada" ou "copiada" para a largura do primeiro argumento e a altura do segundo argumento. A imagem "recortada" ou "copiada" original é substituída pela sua imagem recém "ajustada". Você pode permanentemente "escalonar" sua imagem com mudebitmap. O zoom ao contrário, apenas vê a imagem temporariamente numa escala diferente. Exemplo:

tat mudeel [2 2] repita 72[repita 4[pf 100 pd 90]mudecl(lista cv*3 0 0)pd 5] un mudexy -50 -50 recortebitmap 100 100 tat colebitmap tat mudebitmap 200 100 colebitmap ul

Mudeíndicebitmap mudeíndicebitmap índice mudeindbmp índice Muda o buffer de recorte ou cole bitmap corrente de acordo com o índice. O índice pode variar de 0 até 1023. Seu propósito é permitir que várias imagens possam ser guardadas na memória prontas para uma colagem rápida em animações. O índice 0 é o default e também se comporta usando a área de transferência como o buffer de recorte. Isto é, se você "recortar" uma imagem no Paint você pode colá-la diretamente no LOGO. O inverso também é verdadeiro, se você "recortar" uma imagem no LOGO ela é válida para o Paint. Use Índicebitmap para obter a configuração atual.

Page 361: Manual Logo 3.0

Exemplo:

tat mudeíndicebitmap 0 repita 3[pf 50 pd 120] recortebitmap 100 100 tat mudeíndicebitmap 1 repita 4[pf 50 pd 90] recortebitmap 100 100 tat mudemodobitmap 3 un dt repita 72[pf 50 colebitmap pt 50 pd 5] mudeíndicebitmap 0 repita 72 [pf 100 colebitmap pt 100 pd 5] ul

Índicebitmap Índicebitmap Indbmp Retorna o índice de bitmap corrente especificado por Mudeíndicebitmap. Exemplo:

mudeíndicebitmap 99 mostre índicebitmap 99

Mudemodobitmap mudemodobitmap modo mudemodobmp modo Muda o modo de bitmap corrente conforme o modo. O modo pode variar de 1 a 9. Seu propósito é permitir que imagens sejam coladas usando métodos diferentes: algumas vezes você quer que o fundo da tela seja apagado e outras

Page 362: Manual Logo 3.0

vezes não. Algumas vezes você pode querer inverter a imagem antes de colá-la e outras vezes não. Existem 9 métodos: Modo1: pega cópia da memória e depois copia para a tela. Modo2: pega cópia da memória ou cópia da tela e depois copia para a tela. Modo3: pega cópia da memória e cópia da tela e depois copia para a tela. Modo4: pega cópia da memória “xor” cópia da tela e depois copia para a tela. Modo5: pega cópia da memória e o inverso da tela e depois copia para a tela. Modo6: pega o inverso da memória e depois copia para a tela. Modo7: pega cópia da memória ou cópia da tela e depois inverte para a tela. Modo8: pega o inverso da memória ou cópia da tela e depois copia para a tela. Modo9: pega o inverso da tela e copia para a tela. Exemplo:

tat un repita 9[mudecp(lista cv*25 cv*25 cv*25) blocobmp 50 5 pf 5] mudexy 0 0 recortebitmap 50 50 pd 90 mudecp [125 125 125] mudexy -250 -50 blocobmp 550 150 mudexy -200 0

Page 363: Manual Logo 3.0

repita 9[mudemodobitmap cv colebitmap pf 50] ul

Modobitmap modobitmap modobmp Retorna o modo corrente de bitmap usado por Mudemodobitmap. Exemplo:

mudemodobitmap 8 mostre modobitmap 8

Blocobmp blocobmp largura altura Dsenha um retângulo opaco com as dimensões dadas. A cor vai ser a cor de Mudecp Exemplo:

blocobmp 200 100 mudecp 10 blocobmp 100 200

Carreguebitmap carreguebitmap arquivo carreguebmp arquivo Tem a mesma função que o comando abrir na opção bitmap do menu. Seu único parâmetro deve descrever o caminho e o nome do arquivo de bitmap a ser carregado. Veja também o comando Salvebitmap. Exemplo:

carreguebitmap "c:\\windows\\bolhas.bmp

Salvebitmap

Page 364: Manual Logo 3.0

salvebitmap arquivo salvebmp arquivo Permite a você salvar uma FIGURA (imagem bitmap) do seu trabalho no disco rígido do computador. LEMBRE-SE se sua imagem foi criada com um programa LOGO não é preciso salvá-la como uma imagem, a menos que você queira usar a imagem em outro aplicativo, como o Paint, ou como um papel de parede. Seu parâmetro é o caminho que descreve um arquivo de bitmap a ser salvo. Veja também os comandos Carreguebitmap e Áreaativa. O formato do arquivo em que você salva as figuras é conhecido como Bitmap (.BMP). É possível manipular esses arquios em outro aplicativos, como o Paint. É importante lembrar que esses arquivos podem ser GRANDES e demorar um pouco para serem carregados. Arquivo:(PALAVRA) Caminho e nome do arquivo ou bitmap a ser salvo. Exemplo:

repita 72 [repita 4[pf 100 pd 90]pd 5] salvebitmap "meuarq.bmp tat carreguebitmap "meuarq.bmp

Tambmp tamanho TAMBMP Este comando exibe o tamanho do bitmap especificado pelo Mudeíndicebitmap atual. Ele emitirá [0 0] caso nenhum bitmap esteja carregado. tamanho:(LISTA) de 2 inteiros representando [Largura Altura] do bitmap carregado. Exemplo:

mostre tambmp [0 0] copiebitmap 100 200 mostre tambmp

Page 365: Manual Logo 3.0

[100 200] Tamanhobitmap Tamanhobitmap arquivo Estre comando exibirá o tamanho do bitmap especificado por uma de suas entradas, que pode ser uma palavra que descreve o arquivo de bitmap que tem seu tamanho exibido. tamanho:(LISTA) de 2 inteiros representando [Largura Altura] do bitmap carregado. arquivo:(PALAVRA) Nome do arquivo do bitmap para exibir o tamanho. Exemplo:

mostre tamanhobitmap "c:\\windows\\forest.bmp [256 256]

Carreguegif CARREGUEGIF arquivo Este arquivo irá carregar a imagem GIF passada no parâmetro, que precisa ser uma palavra que descreve o arquivo a ser carregado. Este comando é o mesmo que o menu Comando carregar bitmap. Veja também o comando Salvegif. arquivo:(PALAVRA) Nomo do arquivo GIF a ser carregado. Exemplo:

carreguegif "c:\\windows\\winlogo.gif Tamgif TAMGIF nome

Page 366: Manual Logo 3.0

Este comando irá devolver uma lista com o tamanho da imagem GIF especificada por sua entrada que precisa ser uma palavra que descreve o arquivo que contém o GIF a ser carregado. nome:(PALAVRA) Nome do arquivo GIF a ter seu tamanho exibido. Exemplo:

mostre tamgif "c:\\windows\\winlogo.gif [401 47]

Salvegif SALVEGIF nome (SALVEGIF nome atraso append laço maxcor corvetor) Este comando permite que você salve uma imagem GIF de seu trabalho no disco do computador, de modo que ela possa ser usada em páginas Web ou no e-mail. Em sua primeira forma a entrada precisa ser uma palavra que descreve o arquivo a ser salvo. A segunda forma permite diversas opções: Você pode salvar um quadro de animação GIF (conjuntos de imagens bitmap compactadas). O atraso especifica quanto tempo, em milisegundos, o quadro demora para ser exibido. O argumento append especifica se você está iniciando uma nova animação ou adicionando uma nova a uma animação já existente. O argumento laço especifica quantas vezes a animação será exibida ( -1 = sem loop (padrão), 0 = loop infinito, n = loop n vezes). Você pode especificar a profundidade máxima de cor com maxcor, as opções são 1 (2 cores), 4 (16 cores), ou 8 (256 cores) bits por pixel (8 é o padrão). Se sua imagem não utiliza muitas cores, é possível reduzir significativamente o tamanho do arquivo GIF usando usando esta opção. É possível especificar qual cor na imagem você deseja que fique transparente no formulário[VERMELHO VERDE AZUL] por meio de transcorvetor (para funcionar confiavelmente, você precisa estar no modo de vídeo de 256 cores). Veja também os comandos Carreguegif e Áreaativa.

Page 367: Manual Logo 3.0

Estes comando salva em um formato conhecido como GIF (Graphics Interchange Format) e foi criado pela CompuServe. O formato é popular na WWW (World Wide Web). E é tão conhecido assim por várias razões. Uma delas é que ele é um formato compactado e as figuras podem ser carregadas rapidamente. A segunda razão é que ele é compatível com "entrelaçamento". O entrelaçamento permite que a imagem seja parcialmente visível enquanto ela é carregada (ela aparece ofuscada e vai se tornando cada vez mais nítida). Outra razão é que ela permite os GIFs animados. GIFs animados permitem que várias imagens sejam agrupadas em um arquivo com um determinado intervalo entre elas para dar a impressão de movimento. nome:(PALAVRA) Nome de arquivo do GIF a ser salvo. atraso:(INTEIRO) Atraso em milisegundos para o quadro. append:(BOOLEANO) Verdadeiro para adicionar quadro. Falso para nova animação. laço:(INTEIRO) Controle de looping (-1 = sem loop (padrão) , 0 = loop infinito, n = loop n vezes). maxcor:(INTEIRO) Profundidade de cor máxima em bits por pixel (1 (2 cores), 4 (16 cores), 8 (256 cores, padrão)). transcorvetor:(LISTA) Lista de três inteiros representando as intensidades Vermelho, Verde e Azul, cada uma delas variando dentro do intervalo 0-255, que você deseja configurar como cor transparente. Notas: SALVEGIF funcionará melhor quando seu computador estiver no modo de 256 cores. Você pode chamar Limpepaleta entre cada quadro porque cada quadro possui sua própria "Paleta de Cores". Exemplo (Imagem Simples):

repita 72 [repita 4 [pf 100 pd 90] pd 5] salvegif "meuarquivo.gif tat carreguegif "meuarquivo.gif Exemplo (GIF Animado): tat

Page 368: Manual Logo 3.0

selecioneáreaativa [-150 -150 150 150] ; Marque para indicar que nós não adicionamos o primeiro quadro atribua "append "Falso repita 36 [ repita 4 [pf 100 pd 90] pd 10~ (salvegif "meuarquivo.gif 0 :append 0) ~ ; Salve um quadro (sem atraso e loop infinito) atribua "append "Verdadeiro ] <Agora abra o arquivo meuarquivo.gif com seu navegador Internet (por exemplo, o Netscape ou o Internet Explorer)

Selecioneáreaativa SELECIONEÁREAATIVA área O mesmo que o item de menu Comando área ativa do bitmap. Ele define a área ativa para leitura e gravação de bitmaps. Veja também Áreaativa. área:(LISTA) de 4 inteiros representando [XLow YLow XHigh YHigh]. Exemplo:

blocobmp 100 100 selecioneáreaativa [0 0 50 50] salvebmp "meuarquivo.bmp tat carreguebitmap "meuarquivo.bmp ;Veja como somente parte da imagem foi recuperada

Áreaativa ÁREAATIVA Este comando irá devolver a área ativa atual definida por Selecioneáreaativa. Exemplo:

selecioneáreaativa [-10 -10 10 10] mostre áreaativa

Page 369: Manual Logo 3.0

[-10 -10 10 10] REDE Uma rede permite que o SuperLogo se comunique com o resto do mundo. Existem inúmeras formas de uma rede e o SuperLogo usarem apenas um formato. Este formato é conhecido como soquetes TCP/IP (conhecido originalmente como o protocolo padrão da Internet). O SuperLogo pode receber dados de outros computadores ou enviar. Os outros computadores não precisam estar executando o SuperLogo, embora isto seja recomendável. É possível enviar e receber dados em qualquer tipo de conexão. E você pode ter pelo menos dois tipos de conexões, uma que você iniciou e outra que você aceitou. SuperLogo Networking assume que o protocolo TCP/IP está disponível e que está operando por meio do que chamamos de WINSOCK.DLL (SuperLogo de 16 bits) ou WSOCK32.DLL (SuperLogo de 32 bits). A Microsoft oferece o protocolo TCP/IP para Windows 3.11 gratuitamente. A empresa inclui o protocolo TCP/IP em Windows 95 e Windows NT. Mas ele não precisa ser, necessariamente, instalado e configurado em ambas as plataformas. Há também um protocolo TCP/IP de domínio público conhecido como Trumpet, que pode ser usado no Windows 3.1. As redes TCP/IP podem rodar sobre uma grande variedade de dispositivos, incluindo modems (PPP), cabos LapLink etc. A CompuServe, A Microsoft Network, a America Online e os provedores de serviço Internet particulares (ISPs), todos oferecem acesso via TCP/IP aos computadores interconectados no mundo todo. Isto significa que você pode estar no Brasil e seu amigo no Japão, ambos com o SuperLogo aberto, e mesmo assim um poderá desenhar na tela do outro ou criar jogos em que ambos possam participar. Desde que um encontre o outro. Inicializerede Terminerede Aceiteconexão Nãoaceiteconexão Envievalorconexãoaceita Recebavalorconexãoaceita Ligueconexão

Page 370: Manual Logo 3.0

Desligueconexão Envievalorconexão Recebavalorconexão Dispositivos relacionados (além do SuperLogo): DNS (Domain Name Service): O TCP/IP serve apenas para interpretar os endereços de máquina que possuem o seguinte formato: 21.100.200.5 (note que cada campo numérico precisa ser menor do que 255). Mas os números não possuem nenhum significado e são difíceis de serem memorizados pelos seres humanos, então as máquinas registram nomes. O DNS é basicamente uma máquina que mantém um banco de dados contendo a relação de interpretação desses nomes para números. As máquinas DNS trocam informações umas com as outras para compartilharem dados. O SuperLogo usa os nomes DNS quando tenta estabelecer uma conexão. O DNS não é exigido para que a configuração de uma pequena rede TCP/IP mantenha-se funcionando. PING: é um simples (geralmente um programa de linha de comando) teste de conecticidade de rede. A maioria das implementações TCP/IP incluem um programa PING. Para usá-lo, basta digitar "PING nó_remoto", onde nó_remoto é a máquina com a qual você deseja estabelecer uma conexão. O PING irá informar se é capaz de localizar a máquina e quanto tempo demora para fazer isso. Enquanto o PING funcionar não é preciso se preocupar com o uso de qualquer outro software TCP/IP (incluindo os comandos de rede do SuperLogo). O PING aceitará ambas as formas de endereçamento (número ou nome). Se ele falhar como o nome, então você pode tentar com o número (caso o saiba). Se o número funciona, mas o nome não existe, isso significa que existe um problema com o DNS. Nenhum DNS: Caso não exista nenhum servidor DNS, você pode usar o arquivo HOSTS (normalmente armazenado na pasta C:\Windows). A Microsoft freqüentemente inclui no Windows um arquivo HOSTS chamado HOSTS.SAM (copie HOSTS.SAM para HOSTS. e edite-o). Trata-se simplesmente de um banco de dados que faz o mapeamento dos endereços em forma de nome para números. Se usar um arquivo HOSTS, então cada máquina da rede precisará usar uma cópia do mesmo arquivo HOSTS com o nome para mapear todas as máquinas na rede. Você pode ter tanto o DNS quanto um arquivo HOSTS, normalmente este último é verificado antes do DNS ser solicitado.

Page 371: Manual Logo 3.0

Soquetes e Serviços: Os serviços são para os soquetes o que o DNS é para os endereços de rede. Os serviços mapeiam os "nomes de serviço" como (TELNET, FTP e POPMAIL) para números de portas de soquete. Você pode encontrar um arquivo Services em C:\Windows, e poderá consultá-lo como desejar. O SuperLogo não é compatível com os nomes Service para números de porta de soquete, ele usa apenas números de porta de soquete. Mas se você deseja conectar-se a um serviço como o TELNET, ou operar como um servidor TELNET, então basta pesquisar o arquivo Services. Geralmente os números de soquete menores que 5000 são reservados para serviços como TELNET e FTP. É melhor usar números de soquete maiores que 5000. Redes: Se você tiver uma rede privada sob seu controle total, pode fazer praticamente tudo o que desejar. Se todas as máquinas forem PCs Windows, então provavelmente você terá que trabalhar sem um servidor DNS (e usar um arquivo HOSTS). Geralmente os servidores DNS são máquinas UNIX. Se você faz parte de uma rede muito grande, precisará pedir o auxílio dos administradores da rede. Caso já esteja trabalhando em rede usando o Netware, é bem possível que esteja executando tanto o TCP/IP quanto o Netware simultaneamente (na verdade, isso é muito simples no Windows 95). Provedores de serviço: Alguns provedores de serviço não oferecem a você um nome, registrando seu número de TCP/IP "dinamicamente". Alguns provedores "recortam" completamente sua rede para acessar um aplicativo que lhe ofereça todos os serviços de que precisa. E talvez eles não ofereçam o acesso WinSock. Se o Netscape funcionar, então o SuperLogo também deverá trabalhar normalmente. Permitir que você receba dados é uma tarefa mais complexa, o outro aplicativo precisa estar pronto para localizá-lo pelo nome ou pelo menos por um endereço de número, se eles usarem um arquivo HOSTS. Se você sabe o nome de sua máquina, mas mas não sabe seu endereço, use o teste PING para obtê-lo, basta digitarr PING nomedasuamáquina e anotar o número que aparecerá. Inicializerede INICIALIZEREDE (INICIALIZEREDE synchronous_dns) Ativa o recurso de rede no SuperLogo. Como opção, você pode chamá-lo com o sinalizador SYNCHRONOUS_DNS como 0 (Asynchronous Default) ou 1

Page 372: Manual Logo 3.0

(Synchronous). O Asynchronous DNS é mais seguro de usar (menos provável de causar uma "queda" do SuperLogo durante uma pesquisa de nomes na rede). Mas algumas pilhas WinSock têm problemas com ele (por exemplo, o Trumpet WinSock). Caso apareça para você a mensagem "Host não Encontrado" e você tiver certeza de que o DNS está funcionando (por exemplo, o ping do host está OK) então tente configurar seu sinalizador como 1. synchronous_dns:(INTEIRO) 1 para Synchronous e 0 para Asynchronous (padrão). Exemplo:

INICIALIZEREDE TERMINEREDE

Terminerede Desativa o recurso de rede no SuperLogo. Exemplo:

INICIALIZEREDE TERMINEREDE

Aceiteconexão ACEITECONEXÃO socket enviar receber Este comando permitirá que você aceite uma conexão sobre rede no soquete. Para obter os dados recebidos chame Recebavalorconexãoaceita em seu código receber. Para desativar o recebimento chame o comando Nãoaceiteconexão. Quando os dados estiverem disponíveis, o código de receber será executado. Quando você realmente enviar os dados com Envievalorconexãoaceita, ele poderá retornar falso (indicando que ele não está pronto para enviar). Se isto acontecer, você precisa esperar até que o código enviar seja executado antes de tentar enviar os dados novamente. Lembre-se que você não pode simplesmente enviar os dados a partir do retorno de chamada enviar, ele não será executado a menos que o primeiro envio seja bloqueado.

Page 373: Manual Logo 3.0

soquete:(INTEIRO) É um número utilizado para identificar qual soquete deve ser atendido. enviar:(LISTA) É uma lista (pequena) dos comando do Logo (ou um nome de procedimento) para ser executado quando os dados estão prontos para serem enviados. receber:(LISTA) É uma lista (pequena) dos comando do Logo (ou um nome de procedimento) para ser executado quando os dados estão disponíveis. O retorno de chamada ENVIAR será chamado na seguinte ordem pelas seguintes razões: 1: Problema Aceito com Sucesso 2: Conexão Aceita 3: Pronto para Enviar 4: Pronto para Enviar (depois de um envio de Erro) 5: Pronto para Enviar (depois de um envio de Erro) . . . n: Pronto para Enviar (depois de um envio de Erro) O retorno de chamada RECEBER será chamado na seguinte ordem pelas seguintes razões: 1: Dados Reais Recebidos 2: Dados Reais Recebidos . . . n: Dados Reais Recebidos Exemplo:

inicializerede ; Inicia a rede ; Espere alguém conectá-lo no soquete 5124 mostre aceiteconexão 5124 [escreva [pronto para enviar]] [escreva [pronto para receber]] verd nãoaceiteconexão terminerede

Page 374: Manual Logo 3.0

Nãoaceiteconexão NÃOACEITECONEXÃO Este comando irá desabilitar as conexões de chegada aceitas. Exemplo:

inicializerede ; Inicie a rede ; Espere alguém conectá-lo ao soquete 5124 mostre aceiteconexão 5124 [escreva [pronto para enviar]] [escreva [pronto para receber]] verd nãoaceiteconexão terminerede

Envievalorconexãoaceita ENVIEVALORCONEXÃOACEITA dados Este comando irá enviar a saída dados do soquete aceito. Quando você enviar dados com este comando, ele pode retornar Falso (o que significa que ele não está pronto para enviar). Se isto acontecer, você precisa esperar até que o código de retorno de chamada enviar de Aceiteconexão seja executado e depois tente enviar os dados novamente. dados:(LISTA) É o valor dos dados que você deseja enviar por meio da rede. Exemplo: (O receptor envia dados para quem estiver conectado)

inicializerede ; Inicie a rede ; Espere alguém conectá-lo ao soquete 5124 mostre aceiteconexão 5124 [escreva [Ok para Enviar Novamente]] [] verd ; Conecte à NomedaMinhaMáquina no soquete 5124 (meu) mostre aceiteconexão "NomedaMinhaMáquina 5124 [] [esc recebavalorconexãoaceita] verd espere 100 ; Espere um pouco até que a conexão seja restabelecida

Page 375: Manual Logo 3.0

OK para Enviar Novamente OK para Enviar Novamente OK para Enviar Novamente mostre envievalorconexãoaceita [Quem é você que está me chamando] ; Envie alguns dados verdadeiro espere 100 ; Espere um pouco antes que nós descartemos as coisas Quem é você que me chamou desligueconexão nãoaceiteconexão terminerede

Recebavalorconexãoaceita RECEBAVALORCONEXÃOACEITA Este comando irá devolver o valor dos últimos dados de rede recebidos no soquete aceito. Ele é mais adequado para chamar este procedimento em seu código de retorno de chamada receber de seu comando Aceiteconexão. Ele será perdido na próxima vez que a rede aceitar retorno de chamada de recebimento. Exemplo:(O Iniciador (conector) envia dados para quem tiver aceito a conexão)

inicializerede ; Inicie a rede ; Espere alguém conectá-lo ao soquete 5124 mostre aceiteconexão 5124 [] [escreva recebavalorconexãoaceita] verd ; Conecte à NomedaMinhaMáquina no soquete 5124 (meu) mostre envievalorconexãoaceita "NomedaMinhaMáquina 5124 [escreva [Ok enviar de novo]] [] verd espere 100 ; Espere um pouco até que a conexão seja restabelecida OK para Enviar Novamente OK para Enviar Novamente OK para Enviar Novamente mostre envievalorconexão [Olá, obrigado por aceitar minha chamada] ; Envie alguns dados verd

Page 376: Manual Logo 3.0

espere 100 ; Espere um pouco antes que nós descartemos as coisas Olá, obrigado por aceitar minha chamada desligueconexão nãoaceiteconexão terminerede

Ligueconexão Ligueconexão NomedaMáquina socket enviar receber Este comando permitirá que você inicie uma conexão sobre a rede para o soquete em NomedaMáquina. Para desativar a conexão basta chamar o comando Desligueconexão. Para obter os dados recebidos chame Recebavalorconexãoaceita em seu código de retorno de chamada receber. Quando você realmente enviar os dados com Envievalorconexãoaceita, ele poderá retornar Falso (indicando que ele não está pronto para enviar). Se isto acontecer, você precisa esperar até que o código de retorno de chamada enviar seja executado antes de tentar enviar os dados novamente. Lembre-se de que você não pode simplesmente enviar os dados a partir do código de retorno de chamada enviar, ele não será executado a menos que o primeiro envio seja bloqueado. NomedaMáquina:(LISTA) É um nome de host TCP/IP do DNS ou um arquivo Hosts. soquete:(INTEIRO) É um número usado para identificar qual soquete enviar. enviar:(LISTA) É uma lista (pequena) de comandos do Logo (ou um nome de procedimento) para executar quando os dados estiverem prontos para serem enviados. receber:(LISTA) É uma lista (pequena) de comandos do Logo (ou um nome de procedimento) para executar quando os dados estiverem prontos para serem enviados.. O retorno de chamada ENVIAR será chamado na seguinte ordem pelas seguintes razões: 1: Problema Aceito com Sucesso 2: Conexão Aceita 3: Pronto para Enviar 4: Pronto para Enviar (depois de um envio de Erro) 5: Pronto para Enviar (depois de um envio de Erro) .

Page 377: Manual Logo 3.0

.

. n: Pronto para Enviar (depois de um envio de Erro) O retorno de chamada RECEBER será chamado na seguinte ordem pelas seguintes razões: 1: Dados Reais Recebidos 2: Dados Reais não Recebidos Exemplo:(este exemplo considera que a máquina remota está atenta ao soquete 5124) inicializerede ; Inicie a rede mostre ligueconexão "nomedamáquinaremota 5124 [escreva [pronto para enviar novamente]] [escreva [Eu tenho algo]] verd desligueconexão terminerede Desligueconexão DESLIGUECONEXÃO Este comando irá desabilitar o recurso que permite o envio de dados. Exemplo:

inicializerede ; Inicie a rede mostre ligueconexão "nomedamáquinaremota 5124 [escreva [pronto para enviar novamente]] [escreva [Eu tenho algo]] verdadeiro desligueconexão terminerede

Envievalorconexão ENVIEVALORCONEXÃO dados

Page 378: Manual Logo 3.0

Este comando irá enviar os DADOS do soquete aberto. Quando você enviar dados com este comando, ele pode retornar Falso (indicando que não estava pronto para enviar). Se isto acontecer, você precisa esperar até que o procedimento de retorno de chamada enviar de LIGUECONEXÃO seja executado e depois tente enviar os dados novamente. dados:(LISTA) É o valor dos dados que você deseja enviar por meio da rede. Exemplo:(O Iniciador (conector) envia dados para quem tiver aceito a conexão)

inicializerede ; Inicie a rede ; Espere alguém conectá-lo ao soquete 5124 mostre aceiteconexão 5124 [] [escreva recebavalorconexãoaceita] verd ; Conecte a NomedaMinhaMáquina no soquete 5124 mostre aceiteconexão "NomedaMinhaMáquina 5124 [escreva [OK enviar novamente]] [] verda espere 100 ; Espere um pouco até que a conexão seja restabelecida OK Enviar Novamente OK Enviar Novamente OK Enviar Novamente mostre envievalorconexão [Olá, obrigado por pegar minha chamada] ; Envie alguns dados verd espere 100 ; Espere um pouco antes que nós descartemos as coisas Olá, obrigado por pegar minha chamada desligueconexão nãoaceiteconexão terminerede

Recebavalorconexão RECEBAVALORCONEXÃO Este comando irá emitir o valor dos últimos dados de rede recebidos no soquete de conexão. É melhor chamar este procedimento em seu código de

Page 379: Manual Logo 3.0

retorno de chamada receber de seu comando Aceiteconexão. Ele será perdido no próximo retorno de chamada recebido na rede. dados:(LISTA) É o valor do último dado recebido na rede. Exemplo:(O receptor Envia os Dados Para Quem Estiver Conectado)

inicializerede ; Inicie a rede ; Espere alguém conectá-lo ao soquete 5124 mostre aceiteconexão 5124 [escreva [Ok Enviar Novamente]] [] verdadeiro ; Conecte a NomedaMinhaMáquina no soquete 5124 (meu) mostre ligueconexão "NomedaMinhaMáquina 5124 [] [escreva recebavalorconexão] verdadeiro espere 100 ; Espere um pouco até que a conexão seja restabelecida Ok Enviar Novamente Ok Enviar Novamente Ok Enviar Novamente mostre envievalorconexãoaceita [Quem é você que me chamou] ; Envie alguns dados verdadeiro espere 100 ; Espere um pouco antes de descartarmos as coisas Quem é você que me chamou desligueconexão nãoaceiteconexão terminerede

MULTIMÍDIA/MÍDIA/SOM Multimídia no Logo significa que você, como um programador logo, pode trabalhar com dispositivos multimídia, como cd-players, placas de som e outros. Comandos MIDI Comandos Sound Wave Comandos de som Comandos de multimídia Comandos MIDI

Page 380: Manual Logo 3.0

Abramidi Fechemidi Mensagemmidi Tabela MIDI Controle de MIDI Glossário MIDI Instrumentos MIDI Abramidi ABRAMIDI ABRAMIDI id Este comando abre o dispositivo MIDI e o acessa por meio de um driver de dispositivo MIDI. O driver de dispositivo escolhido depende de vários fatores. No formato 1 (sem argumentos) o MIDI-MAPPER é inicialmente usado. No formato 2 (argumento de id especificado) permite que você escolha qualquer drive MIDI disponível no seu sistema. O “id” inicia em 0 e vai até 1 menos o número de drivers MIDI disponíveis. Para determinar qual “id” mapear para qual driver experimente diversos comandos ABRAMIDI que aumentam o “id”. ABRAMIDI irá exibir o nome do driver que está sendo utilizado. Id:(INTEIRO) É um índice que especifica qual dispositivo MIDI você deseja abrir. Quando não é fornecido nenhum id, ele seleciona o driver de dispositivo MIDI MAPPER. Basicamente, o MIDI permite que você gere som em sua placa de som. Você precisará instalar os drivers do Windows apropriados para sua placa de som funcionar. A maioria das placas de som vem com player MIDI que basicamente lê as mensagens MIDI a partir do arquivo e as repassa para o driver MIDI. Se você tem seu player MIDI funcionando no Windows, então o SuperLogo também deverá funcionar. Os comandos MIDI no SuperLogo não utilizam arquivos MIDI (.MID ou .MDI). Em vez disso, você deve construir diretamente seqüências de mensagens MIDI e enviá-las para o dispositivo MIDI. É bom lembrar que você pode manipular (reproduzir) arquivos MIDI usando o comando MCI. Você pode imaginar os comandos MIDI no SuperLogo como um teclado programável. Ele opera somente se o vínculo entre seu teclado programável (comandos MIDI) e seu alto-falante for MIDI.

Page 381: Manual Logo 3.0

Disponível apenas para Windows 3.1 ou sistemas compatíveis. Veja também os comandos Mensagemmidi e Fechemidi. Exemplo: ESCREVA ABRAMIDI [MIDI Mapper] FECHEMIDI Fechemidi FECHEMIDI Este comando fecha o dispositivo MIDI. Não há entradas nem saídas. Veja também o comando Abramidi. Exemplo:

ESCREVA ABRAMIDI [MIDI Mapper] FECHEMIDI

Mensagemmidi MENSAGEMMIDI mensagem A entrada precisa ser uma lista. Você já precisa conhecer o comando Abramidi para usar este comando. Mensagem:(LISTA) Uma mensagem MIDI em um dos 3 formatos explicados abaixo. Estes são os 3 formatos de mensagens MIDI, o formato Curto, o formato Longo e o formato Exclusivo do Sistema. Mensagem de formato Curto: [estado dado1 dado2] O formato Curto é o mais comum e sempre uma lista de 3 inteiros. O primeiro inteiro é conhecido como o BYTE DE ESTADO (também conhecido como um BYTE DE COMANDO). Ele precisa ser seguido de 2 bytes de dados,

Page 382: Manual Logo 3.0

mesmo que a mensagem exija somente 1 (basta usar 0). estado:(INTEIRO) Na terminologia MIDI este é o “byte de estado” dado 1:(INTEIRO) Byte de dado 1 do “código de comando” MIDI. dado 2:(INTEIRO) Byte de dado 2 do “código de comando” MIDI. Mensagem de formato Longo: [estado dado1 dado2 estado dado1 dado2...] O formato Longo é semelhante ao formato Curto, mas a lista de inteiros contém muitas mensagens curtas . Mensagem de formato Exclusivo de Sistema: [240 dado1 dado2 dado3 dado4...] O formato EXCLUSIVO DE SISTEMA precisa ser precedido do byte de estado exclusivo do sistema 240 (FO hex). Depois ele pode ser seguido por qualquer quantidade de bytes de dados. dado1:(INTEIRO) Primeiro byte de dado específico para seu dispositivo MIDI. dado2:(INTEIRO) Primeiro byte de dado específico para seu dispositivo MIDI. e assim por diante... Veja a Tabela MIDI que é basicamente uma Especificação da Mensagem MIDI. Esta documentação não tem como objetivo ensinar tudo sobre o recurso MIDI. Mas há informação suficiente aqui para auxiliar nos primeiros passos. Para obter maiores informações a respeito, experimente comprar um livro sobre MIDI (por exemplo, Midi basics, de Akira Otsuka e Akihiko Nakajima). Exemplo:

ESCREVA ABRAMIDI [MIDI Mapper] MENSAGEMMIDI (LISTA 192+13 56 0 192+13 56 0)

Page 383: Manual Logo 3.0

MENSAGEMMIDI (LISTA 144+13 100 100) FECHEMIDI

Tabela MIDI NOME DE COMANDO CÓDIGO DE COMANDO BYTE DE DADO 1 BYTE DE DADO 2 Muda Controle 176 + Canal 0-127 Controle de MIDI0-127 MSB Muda Programa 192 + Canal 0-127 Programa Não usado Pressão do Canal 208 + Canal 0-127 Pressão Não usado Roda do Tom 224 + Canal 0-127 LSB 0-127 MSB Exclusivo do Sistema 240 0-127 Id Codifica Qualquer Núm. de Bytes Indefinido 241 Não usado Não usado Posição da Faixa 242 0-127 LSB 0-127 MSB Seleção da Faixa 243 0-127 Faixa Não usado Indefinido 244 Não usado Não usado Indefinido 245 Não usado Não usado Solicitação de Tom 246 Não usado Não usado Fim do Exclusivo 247 Não usado Não usado Tempo do Relógio 248 Não usado Não usado Indefinido 249 Não usado Não usado Início 250 Não usado Não usado Continua 251 Não usado Não usado Para 252 Não usado Não usado Indefinido 253 Não usado Não usado Indefinido 254 Não usado Não usado Cancela Sistema 255 Não usado Não usado Veja também o Glossário MIDI.

Page 384: Manual Logo 3.0

Controle de MIDI NOME DO COMANDO CÓDIGO DO COMANDO BYTE DE DADO 1 BYTE DE DADO 2 Muda Controle 176 + Canal 0 Indefinido 0-127 MSB Muda Controle 176 + Canal 1 Modulação 0-127 MSB Muda Controle 176 + Canal 2 Controlador de Pausa 0-127 MSB Muda Controle 176 + Canal 3 Contínuo 0-127 MSB Muda Controle 176 + Canal 4 Controlador de Fundo 0-127 MSB Muda Controle 176 + Canal 5 Duração do Portamento 0-127 MSB Muda Controle 176 + Canal 6 Entrada de Dados 0-127 MSB Muda Controle 176 + Canal 7 Volume Principal 0-127 MSB Muda Controle 176 + Canal 8-31 Indefinido 0-127 MSB Muda Controle 176 + Canal 32-63 LSB de 0-31 0-127 LSB Muda Controle 176 + Canal 64 Pedal Descarregador 0:Off 127:On Muda Controle 176 + Canal 65 Portamento 0:Off 127:On Muda Controle 176 + Canal 66 Sostenuto 0:Off 127:On Muda Controle 176 + Canal 67 Pedal Pianíssimo 0:Off 127:On Muda Controle 176 + Canal 68-92 Indefinido 0:Off 127:On Muda Controle 176 + Canal 93 Refrão 0:Off 127:On Muda Controle 176 + Canal 94 Celeste 0:Off 127:On Muda Controle 176 + Canal 95 Fraseador 0:Off 127:On Muda Controle 176 + Canal 96 Entrada de Dados + 1 0:Off 127:On Muda Controle 176 + Canal 97 Entrada de Dados - 1 0:Off 127:On Muda Controle 176 + Canal 98-121 Indefinido 0:Off 127:On Muda Controle 176 + Canal 122 Controle Local 0-127 Muda Controle 176 + Canal 123 Todas As Notas Desativadas 0 Muda Controle 176 + Canal 124 Modo Omni Desativado 0-15 Muda Controle 176 + Canal 125 Modo Omni Ativado 0 Muda Controle 176 + Canal 126 Mono on/Poly off 0 Muda Controle 176 + Canal 127 Poly on/Mono off 0 Veja também o Glossário MIDI. Glossário MIDI Canal: um canal é um número entre 0-15 que corresponde aos canais 1-16. Tom: um tom é um número entre 0-127 e corresponde a uma nota no instrumento. Velocidade: a velocidade é um número entre 0-127 e corresponde ao quão rápido a chave (ou string) é pressionada ou solta (a maioria da terminologia refere-se aos teclados). 0 (zero) significa que está solto.

Page 385: Manual Logo 3.0

Pressão: uma pressão é um número entre 0-127 e corresponde às características de como a chave é acionada. Programa: um programa é um número entre 0-127 e corresponde ao instrumento em uso. Veja também a tabela Instrumentos MIDI. MSB: Most Significant Bits (Bits Mais Significativos). LSB: Least Significant Bits (Bits Menos Significativos). Id Code: Usado para introduzir o Modo Exclusivo de Sistema, especificado pelo fabricante do dispositivo. Faixa: Uma faixa é um rítmo Instrumentos MIDI Piano 0 – Piano de cauda acústico 1- Piano de cauda acústico 2- Piano de cauda elétrico 3- Piano Honky-tonk 4- Piano Rhodes 5- Piano Chorused 6- Cravo 7- Clarinete Percussão cromática 8- Celeste 9- Sistrol 10- Caixinha de música 11- Vibrafone 12- Marimba 13- Xilofone 14- Tubular bells 15- Cítara

Page 386: Manual Logo 3.0

Órgão 16 – Órgão Hammond 17 – Órgão percussivo 18 - Órgão de rock 19 – Órgão de igreja 20 – Órgão de tubos 21 – Acordeão 22 – Harmônica 23 – Tango acordeão Guitarra 24 – Guitarra acústica (náilon) 25 – Guitarra acústica (aço) 26 – Guitarra elétrica (jazz) 27 – Guitarra elétrica (clean) 28 – Guitarra elétrica (muted) 29 – Guitarra overdriven 30 – Guitarra de distorção 31 – Guitarra harmônica Baixo 32 – Baixo acústico 33 – Baixo elétrico (finger) 34 – Baixo elétrico (pick) 35 – Baixo fretless 36 – Baixo slap 1 37 – Baixo slap 2 38 – Baixo Synth 1 39 – Baixo Synth 2 Cordas 40 – Violino 41 – Viola 42 – Violoncelo 43 – Contrabaixo 44 – Tremolo strings 45 – Pizzicato strings 46 – Harpa orquestral 47 – Tímpano

Page 387: Manual Logo 3.0

Conjunto 48 – Conjunto de cordas 1 49 – Conjunto de cordas 2 50 – Sintetizador de cordas 1 51 – Sintetizador de cordas 2 52 – Choir aahs 53 – Voice oohs 54 – Sintetizador de voz 55 – Orquestra hit Metais 56 – Trumpete 57 – Trombone 58 – Tuba 59 – Trumpete mudo 60 – Corneta francesa 61 – Brass section 62 – Sintetizador de metais 1 63 - Sintetizador de metais 2 Instrumento de sopro 64 - Saxofone soprano 65 - Saxofone alto 66 – Saxofone tenor 67 – Saxofone barítono 68 – Oboé 69 – Corneta inglesa 70 – Fagote 71 – Clarinete Instrumentos de tubo 72 – Flautim 73 – Flauta 74 – Flauta de ponta 75 – Flauta pã 76- Bottle de sopro 77- Shakuhachi 78- Apito 79- Ocarina

Page 388: Manual Logo 3.0

Synth Lead 80 – Lead 1 (square) 81 – Lead 2 (sawtooth) 82 – Lead 3 (caliope lead) 83 – Lead 4 (chiff lead) 84 – Lead 5 (charang) 85 – Lead 6 (voice) 86 – Lead 7 (fifths) 87 – Lead 8 (brass + lead) Sintetizador almofada 88 – Pad 1 (new age) 89 – Pad 2 (warm) 90 – Pad 3 (polysynth) 91 – Pad 4 (choir) 92 – Pad 5 (bowed) 93 – Pad 6 (metallic) 94 – Pad 7 (halo) 95 – Pad 8 (sweep) Sintetizador de efeitos 96 – FX 1 (chuva) 97 – FX 2 (trilha sonora) 98 – FX 3 (cristal) 99 – FX4 (atmosfera) 100 – FX 5 (brightness) 101 – FX 6 (duendes) 102 – FX 7 (ecos) 103 – FX 8 (sci-fi) Étnicos 104 – Cítara 105 – Banjo 106 – Shamisen 107 – Koto 108 – Kalimba 109 – Gaita de foles 110 – Rabeca 111 – Shanai

Page 389: Manual Logo 3.0

Percussão 112- Sino 113 – Agogô 114 – Steel drums 115 – Woodblock 116 – Bateria taiko 117 – Tom melódico 118 – Sintetizador de bateria 119 – Prato reverso Efeitos sonoros 120 – Guitar fret noise 121 – Som de respiração 122 – Barulho do mar batendo em uma encosta 123 – Barulho de pássaros 124 – Campainha de telefone 125 – Helicóptero 126 – Aplausos 127 – Metralhadora Comandos de som wave Toquewave Toquewave TOQUEWAVE arquivo sinalizadores O arquivo precisa ter extensão “.WAV”. Os sinalizadores descrevem como o som precisa ser reproduzido. Esse recurso também existe no comando MCI, mas com um controle mais preciso. Porém, esse som não exige uma placa de som real para ser utilizado. Existe um driver público da Microsoft chamado SPEAKER (.EXE, .DRV, .ZIP,... ), que é capaz de emular os recursos do arquivo wave no alto-falante do PC. Arquivo (PALAVRA): O nome do arquivo .WAV. Sinalizadores(INTEIRO): Um sinalizador para indicar como você quer que o som seja reproduzido. As opções são as seguintes:

Page 390: Manual Logo 3.0

0 = Synchronous - não retorna até que esteja concluído. 1 = Asynchronous - retorna imediatamente enquanto o som ainda está sendo reproduzido. 2 = Não usa o som padrão se aquele que foi especificado não puder ser encontrado. 4 = Som na memória (não aceito). 8 = Continua a fazer o loop do som até que outro comando de som seja chamado. 16 = Não pára um som que já está sendo executado. Observação: esses tags podem ser combinados com outros. Exemplo:

toquewave “c:\\windows\\tada.wav 1 +8 toquewave [] 0

Comando de som Som Som som [freqüência duração] som [freqüência duração freqüência duração ...] A entrada tem de ser uma lista de pares. Cada par especifica uma freqüência (em hertz) e uma duração (tempo). O SupeLogo não pode iniciar outras aplicações enquanto um vetor de som está sendo tocado. Quanto maior a freqüência, mais agudo será o som. Quanto maior a duração, mais longo será o som. O som só poderá sair no PC Speaker e só funcionará no Windows. Exemplo:

som [100 200] repita 4 [som [100 200 150 200 200 200]]

Comandos multimídia Mci

Page 391: Manual Logo 3.0

Mci Mci lista-de-comandos-mci (Mci retorno lista-de-comandos-mci) A lista-de-comandos-mci precisa ser uma lista. O comando Mci pode ou não emitir uma lista dependendo do comando Mci que você acionou. A interface Mci é poderosa. Ela abre a porta para permitir que o Logo controle qualquer dispositivo multimídia Windows. Isso inclui placas de som, players de CD-ROM, filmes em vídeo e muito mais. Na segunda forma, se a lista-de-comandos-mci usa a opção “notificar”, então seu código de retorno será executado quando o comando for concluído. O mecanismo de retorno permite que você, por exemplo, execute um arquivo wave e seja notificado quando ele for concluído, de modo que possa iniciar outro imediatamente, sem precisar “esperar”. O comando Mci é projetado para permitir que você, como um programador em Logo, escreva procedimentos para manipular dispositivos multimídia. Agora você pode vincular sons às etapas de criação de um desenho. Pode narrar seu próprio slide show e até mesmo fazer uma gravação perguntando o nome do usuário com sua própria voz. retorno:(LISTA) É uma lista (pequena) de comandos do Logo (ou um nome de procedimento) para executar quando o comando Mci é finalizado se você usa a função “notificar” em vez de “esperar”. A interface Mci permite que você inicie um dispositivo e, opcionalmente, “espere” até que ele termine ou “notifique-o” quando tiver concluído a solicitação. Exemplo:

aprenda it_som escreva mci [open c:\\windows\\media\\Chimes.wav type waveaudio alias wa1] escreva mci [open c:\\windows\\media\\logoff.wav type waveaudio alias wa2] mci [seek wa1 to start] mci [play wa1 wait] repita 2 [mci [seek wa2 to start] mci [play wa2 wait]] mci [close wa1]

Page 392: Manual Logo 3.0

mci [close wa2] fim

Observação: o emulador de placa de som de alto-falantes da Microsoft NÃO é compatível com Mci. Abreviações Esta seção tem como principal objetivo fornecer AJUDA online. Lista com algumas abreviações Lista com algumas abreviações + Esta é uma abreviação para Soma. PT Abreviação de Paratrás. SPS Abreviação de Semprimeiros. SP Abreviação de Semprimeiro. SU Abreviação de Semúltimo. TAT Abreviação de Tartaruga. LJC Abreviação de Limpejanelacomandos. CO Abreviação de Continue. ED Abreviação de Edite.

Page 393: Manual Logo 3.0

EL Abreviação de Elimine. ELARQ Abreviação de Eliminearq. PF Abreviação de Parafrente. DT Abreviação de Desapareçatat. SF Abreviação de Sefalso. EUSELAPIS Abreviação de Éuselápis SV Abreviação de Severd. PE Abreviação de Paraesquerda. UB Abreviação de Useborracha. UL Abreviação de Uselápis. UI Abreviação de Useinversor. UN Abreviação de Usenada. ESC Abreviação de Escreva. LEIAC

Page 394: Manual Logo 3.0

Abreviação de Leiacaractere. LEIACS Abreviação de Leiacaracteres. LEIAL Abreviação de Leialista. PD Abreviação de Paradireita. LEIAP Abreviação de Leiapalavra. SN Abreviação de Sentença. AT Abreviação de Apareçatat. - Abreviação de Diferença. / Abreviação de Quociente. = Abreviação de Sãoiguais. > Abreviação de Émaior. < Abreviação ee Émenor. * Abreviação de Produto.

Page 395: Manual Logo 3.0

Créditos Núcleo de Informática Aplicada à Educação (Nied/Unicamp) Coordenação geral José Armando Valente Coordenador do Núcleo Docente do Instituto de Artes - Departamento de Multimeios da Unicamp Coordenação de desenvolvimento Heloísa Vieira da Rocha Pesquisadora do Núcleo Docente do Instituto de Computação da Unicamp Coordenação pedagógica Fernanda Maria Pereira Freire Maria Cecília Martins Maria Elisabette Brisola Brito Prado Pesquisadoras do Núcleo Equipe de desenvolvimento Alexandre Oberhuber Daniel Henrique Alves Ivo José Garcia dos Santos Estagiários do Núcleo e alunos da Unicamp Divertire/Melhoramentos Diretora executiva Andréa Caran Diretor de desenvolvimento Carlos Seabra

Page 396: Manual Logo 3.0

Gerente editorial Bete Abreu Produção Alexandre Hakomaru Wallace Garcia Marco Pace Vitor Novais Ilustrações Márcia Alevi Multimídia Danilo Oliveira, Alexandre Hakomaru Embalagem Nathalia Sá Cavalcante Um agradecimento especial a todas as pessoas que participaram do beta-teste.