LibreLogo

O LibreLogo é um ambiente de programação simples, similar ao Logo, com gráficos de vetor turtle para ensinar a programar computação (programação e processamento de texto), DTP e conceção de gráficos. Consulte http://www.numbertext.org/logo/librelogo.pdf.

Barra de ferramentas LibreLogo

A barra de ferramentas LibreLogo (Ver - Barras de ferramentas - Logo) contém ícones de movimento de tartaruga, início e paragem do programa, página inicial e limpar ecrã, de tradução/realce da sintaxe bem como uma barra de inserção (linha de comandos).

Ícones de movimento

São equivalentes aos comandos Logo “FORWARD 10”, “BACK 10”, “LEFT 15”, “RIGHT 15”. Clicar num destes ícones irá também focar a deslocação da forma para a sua posição.

Iniciar o programa Logo

Clique no ícone “Iniciar o programa Logo” para executar ou texto (ou a seleção) de um documento do Writer com o LibreLogo. Num documento vazio será inserido e executado um programa de exemplo.

Clique no ícone “Parar” para parar a execução do programa.

Home

Clique no ícone “Home” para redefinir a posição e tamanho da tartaruga.

Limpar ecrã

Clique no ícone "Limpar ecrã" para remover os objetos de desenho no documento.

Editor de programas/Realce da sintaxe/Tradução

O ícone “varinha mágica” define uma disposição em 2 páginas para edição do programa, expande e converte para maiúsculas os comandos abreviados em minúsculas do LibreLogo no documento do Writer. Altere o idioma do documento (Ferramentas - Opções - Definições de idioma - Idiomas - Ocidental) e clique neste ícone para traduzir o programa Logo para o idioma selecionado.

Linha de comandos

Prima Enter na linha de comandos para executar o seu conteúdo. Para parar o programa, utilize o ícone "Parar".

Mantenha premido Enter para repetir a linha de comandos, por exemplo, na seguinte sequência de comandos:

 FORWARD 200 LEFT 89

Para redefinir a linha de comandos, clique-lhe três vezes ou prima Ctrl+A para selecionar os comandos anteriores e escreva os novos comandos.

Interface gráfica para definições básicas de tartaruga

A forma de tartaruga do LibreLogo é um objeto de desenho com um tamanho fixo. Pode posicionar e rodar o objeto utilizando o rato e o ícone Rodar da barra de ferramentas Propriedades do objeto de desenho. Pode mudar a largura da linha, a cor da linha e a cor da área da tartaruga para definir os atributos PENSIZE, PENCOLOR e FILLCOLOR do LibreLogo.

Edição do programa

Os desenhos e programas LibreLogo usam o mesmo documento Writer. A tela LibreLogo está na primeira página do documento Writer. Pode inserir uma quebra de página antes dos programas LibreLogo, e definir a ampliação usando o ícone da "varinha mágica" na barra de ferramentas Logo, e também mudar o tamanho da letra para uma disposição confortável de duas páginas para a programação LibreLogo: a página esquerda (primeira) é a tela, e a página da direita (segunda) é para o editor de programas LibreLogo.

Linguagem de programação LibreLogo

O LibreLogo é uma linguagem de programação do tipo Logo, traduzida em diversos idiomas pela comunidade do LibreOffice. O LibreLogo é compatível com os anteriores sistemas Logo, como por exemplo os programas que são utilizados no ensino de programação.

 TO triangle :size
REPEAT 3 [
FORWARD :size
LEFT 120
]
END

triangle 10 triangle 100 triangle 200

Diferenças em relação à linguagem de programação Logo

Outras funções LibreLogo

Comandos LibreLogo

Sintaxe básica

Distinção de maiúsculas

Os comandos e as cores não diferenciam minúsculas de maiúsculas:

 PRINT “Olá, Mundo!”
print “Olá, Mundo, novamente!”

Os nomes das variáveis diferenciam minúsculas de maiúsculas:

 a = 5
A = 7
PRINT a
PRINT A

Linhas do programa

As linhas do LibreLogo são os parágrafos do documento do Writer. Uma linha de programa pode ter diversos comandos:

 PRINT “Olá, Mundo!” PRINT “LibreLogo”

Comentários

O ponto e vírgula serve para identificar as linhas ou parte delas como comentários (parágrafo):

 ; comentário
PRINT 5 * 5 ; comentário

Quebrar linhas do programa em vários parágrafos

É possível quebrar uma linha do programa em vários parágrafos usando o til no final da linha:

 PRINT “Esta é uma mensagem de aviso ” + ~
“muito extensa”

Movimentação

FORWARD (fd)

 FORWARD 10 ; move para a frente em 10pt (1pt = 1/72 polegadas)
FORWARD 10pt ; ver acima
FORWARD 0.5in ; move para a frente em 0.5 polegadas (1 polegada = 2.54 cm)
FORWARD 1" ; ver acima
FD 1mm
FD 1cm

BACK (bk)

 BACK 10 ; move para trás 10pt

LEFT (lt)

 LEFT 90 ; gira 90 graus para a direita
LEFT 90° ; ver acima
LT 3h ; ver acima (posição do relógio)
LT any ; gira aleatoriamente

RIGHT (rt)

 RIGHT 90 ; gira 90 graus para a esquerda

PENUP (pu)

 PENUP ; a tartaruga move-se sem desenhar

PENDOWN (pd)

 PENDOWN ; a tartaruga move-se e desenha

POSITION (pos)

 POSITION [0, 0] ; roda e move a tartaruga para o canto superior esquerdo
POSITION PAGESIZE ; roda e move a tartaruga para o canto inferior direito
POSITION [PAGESIZE[0], 0] ; roda e move a tartaruga para o canto superior direito
POSITION ANY ; roda e move a tartaruga aleatoriamente

HEADING (seth)

 HEADING 0 ; roda para o norte
HEADING 12h ; consulte acima
HEADING [0, 0] ; roda para o canto superior esquerdo
HEADING ANY ; roda aleatoriamente

Outros comandos

HIDETURTLE (ht)

 HIDETURTLE ; oculta a tartaruga (até que utilize o comando showturtle)

SHOWTURTLE (st)

 SHOWTURTLE ; mostra a tartaruga

HOME

 HOME ; repõe a posição inicial da tartaruga

CLEARSCREEN (cs)

 CLEARSCREEN ; remove os objetos de desenho do documento

FILL e CLOSE

 FILL ; fecha e preenche a linha ou pontos da forma atual
CLOSE ; fecha a forma de linha atual ou une os pontos da forma

Exemplo: para preencher um triângulo

 FORWARD 50 LEFT 120 FORWARD 50 FILL

Exemplo: para desenhar um triângulo

 FORWARD 50 LEFT 120 FORWARD 50 CLOSE

Definições de linha

PENSIZE (ps)

 PENSIZE 100 ; a largura da linha é 100 pontos
PENSIZE ANY ; equivalente a PENSIZE RANDOM 10

PENCOLOR/PENCOLOUR (pc)

 PENCOLOR “red” ; define a cor vermelha (por nome da cor, consulte constantes de cor)
PENCOLOR [255, 255, 0] ; define a cor amarela (lista RGB)
PENCOLOR 0xffff00 ; define a cor amarela (hexadecimal)
PENCOLOR 0 ; define a cor preto (0x000000)
PENCOLOR ANY ; define aleatoriamente a cor
PENCOLOR [5] ; define a cor vermelha (por identificador, consulte constantes de cor)
PENCOLOR “invisible” ; define a cor transparente para formas sem contornos
PENCOLOR “~red” ; define um vermelho aleatório

PENTRANSPARENCY

 PENTRANSPARENCY 80 ; definir a transparência da cor real da caneta para 80%

PENCAP/LINECAP

 PENCAP “none” ; sem fim de linha (padrão)
PENCAP “round” ; fim de linha redondo
PENCAP “square” ; fim de linha quadrado

PENJOINT/LINEJOINT

 PENJOINT “rounded” ; junção de linha redonda (padrão)
PENJOINT “miter” ; junção de linha precisa
PENJOINT “bevel” ; junção de linha bisel
PENJOINT “none” ; sem junção de linha

PENSTYLE

 PENSTYLE “solid” ; linha sólida (padrão)
PENSTYLE “dotted” ; linha pontilhada
PENSTYLE “dashed” ; linha tracejada

; padrão personalizado de acordo com estes argumentos:
; – número de pontos na proximidade
; – tamanho do ponto
; – número de traços na proximidade
; – tamanho do traço
; – distância entre pontos e traços
; – tipo (opcional):
; 0 = os pontos são retângulos (padrão)
; 2 = os pontos são quadrados (tamanho e distância são proporcionais ao pensize)

PENSTYLE [3, 1mm, 2, 4mm, 2mm, 2] ; ...––...––...––

Definições de preenchimento

FILLCOLOR/FILLCOLOUR (fc)

 FILLCOLOR “blue” ; preenche com a cor azul, consulte também PENCOLOR
FILLCOLOR “invisible” CIRCLE 10 ; cria um círculo não preenchido
FILLCOLOR [“blue”, “red”] ; cria um gradiente entre azul e vermelho
FILLCOLOR [[255, 255, 255], [255, 128, 0]] ; cria um gradiente entre branco e cor de laranja
FILLCOLOR [“blue”, “red”, 1, 0, 0] ; cria um gradiente axial (com as definições de rotação e contornos especificadas), valores possíveis: 0-5 = linear, axial, radial, elíptico, quadrado e retângular
FILLCOLOR [“red”, “blue”, 0, 90, 20] ; cria um gradiente linear com 20% de contorno, e com um ângulo de 90 graus a partir da cabeça da tartaruga
FILLCOLOR [“red”, “blue”, 0, 90, 20, 0, 0, 200, 50] ; cria um gradiente com intensidade entre 200% e 50%
FILLCOLOR [ANY, ANY, 2, 0, 0, 50, 50] ; cria um gradiente radial com cores aleatórias e posicionado verticalmente e horizontalmente a 50-50% a partir do centro

FILLTRANSPARENCY

 FILLTRANSPARENCY 80 ; definir a cor real de prenchimento para 80%
FILLTRANSPARENCY [80] ; definir o gradiente linear de transparência de 80% para 0%
FILLTRANSPARENCY [80, 20] ; definir o gradiente linear de transparência de 80% para 20%
FILLTRANSPARENCY [80, 20, 1, 90] ; definir o gradiente axial de transparência rodado com 90 graus da cabeça efetiva da tartaruga
FILLTRANSPARENCY [80, 20, 2, 0, 20, 50, 50] ; definir o gradiente radial de transparência de 80% no exterior para transparência de 20% interior com 20% de margem, e com 50-50% posições horizontal e vertical do centro

FILLSTYLE

 FILLSTYLE 0 ; preencher sem tracejado (padrão)
FILLSTYLE 1 ; tracejados simples negros (horizontais)
FILLSTYLE 2 ; tracejados simples negros (45 graus)
FILLSTYLE 3 ; tracejados simples negros (-45 graus)
FILLSTYLE 4 ; tracejados simples negros (verticais)
FILLSTYLE 5 ; tracejados cruzados vermelhos (45 graus)
FILLSTYLE 6 ; tracejados cruzados vermelhos (0 graus)
FILLSTYLE 7 ; tracejados cruzados azuis (45 graus)
FILLSTYLE 8 ; tracejados cruzados azuis (0 graus)
FILLSTYLE 9 ; cruzado triplo azul
FILLSTYLE 10 ; tracejados simples negros e largos (45 graus)

; tracejado personalizado especificado por uma lista com os seguintes argumentos:
; – estilo (1 = simples, 2 = duplo, 3 = tracejado triplo)
; – cor
; – distância
; – grau

FILLSTYLE [2, “green”, 3pt, 15°] ; tracejados cruzados verdes (15 graus)

Objetos de desenho

CIRCLE

 CIRCLE 100 ; desenha um círculo (diâmetro = 100pt)

ELLIPSE

 ELLIPSE [50, 100] ; desenha um elipse (50x100pt)
ELLIPSE [50, 100, 2h, 12h] ; desenha um setor elíptico (no sentido horário das 2h até às 12h)
ELLIPSE [50, 100, 2h, 12h, 2] ; desenha um segmento elíptico
ELLIPSE [50, 100, 2h, 12h, 3] ; desenha um arco elíptico

SQUARE

 SQUARE 100 ; desenha um quadrado (tamanho = 100pt)

RECTANGLE

 RECTANGLE [50, 100] ; desenha um retângulo (50×100pt)
RECTANGLE [50, 100, 10] ; desenha um retângulo com os cantos arredondados

POINT

 POINT ; desenha um ponto com o tamanho e a cor do pincel

CLOSE pode unir os últimos pontos, FILL pode preencher a forma definida pelos pontos. Por exemplo, é possível criar uma estrela “flat” a partir do seu centro.

 PENUP
REPEAT 5 [
FORWARD 80
POINT
BACK 80
RIGHT 36
FORWARD 50
POINT
BACK 50
RIGHT 120
] FILL

LABEL

 LABEL “texto” ; imprime texto na posição da tartaruga
LABEL 'texto' ; ver acima
LABEL "texto ; ver acima (só para palavras únicas)

TEXT

 CIRCLE 10 TEXT “texto” ; define o texto do objeto de desenho atual

Definições do tipo de letra

FONTCOLOR/FONTCOLOUR

 FONTCOLOR “green” ; define a cor do tipo de letra

FONTFAMILY

 FONTFAMILY “Linux Libertine G” ; define o tipo de letra (família)
FONTFAMILY “Linux Libertine G:smcp=1” ; define também o tipo de capitalização (versaletes)
FONTFAMILY “Linux Libertine G:smcp=1&onum=1” ; versaletes + figuras antigas

FONTSIZE

 FONTSIZE 12 ; define 12pt

FONTWEIGHT

 FONTWEIGHT “bold” ; define o texto como negrito
FONTWEIGHT “normal” ; define o texto como normal

FONTSTYLE

 FONTSTYLE “italic” ; define o texto como itálico
FONTSTYLE “normal” ; define o texto como normal

PICTURE (pic)

PICTURE serve para

Agrupamento de formas

 ; PICTURE [ Comandos LibreLogo ]
PICTURE [ FORWARD 100 CIRCLE 100 ] ; agrupa na forma de árvore

Consulte também “Agrupar” na ajuda do LibreOffice Writer.

 TO tree location
PENUP POSITION location HEADING 0 PENDOWN
PICTURE [ FORWARD 100 CIRCLE 100 ] ; agrupa na forma de árvore
END

PICTURE [ tree [230, 400] tree [300, 400] ] ; formas agrupadas em forma agrupada

Iniciar novas formas de linhas

 PICTURE ; inicia uma nova forma de linha
FORWARD 10 PICTURE FORWARD 10 ; duas formas de linha

Guardar imagens SVG

 PICTURE “exemplo.svg” [ CIRCLE 5 ] ; guarda a imagem no formato SVG, na pasta do utilizador
PICTURE “Desktop/exemplo.svg” [ FORWARD 100 CIRCLE 5 ] ; como acima, mas com caminho relativo
PICTURE “/home/utilizador/exemplo.svg” [ CIRCLE 5 ] ; caminho absoluto para Unix/Linux
PICTURE “C:\exemplo.svg” [ CIRCLE 5 ] ; caminho absoluto para Windows

Guardar animações SVG/SMIL (desenho com comandos SLEEP)

 PICTURE “animação.svg” [ CIRCLE 5 SLEEP 1000 CIRCLE 99 ] ; guarda como animação SVG/SMIL (consulte também SLEEP)
PICTURE “animação2.svg” [ CIRCLE 5 SLEEP 1000 CIRCLE 99 SLEEP 2000 ] ; como acima, mas SLEEP obriga a um ciclo: após 2 segundos a animação SVG é aberta nos navegadores compatíveis com SMIL

Consistência na margem esquerda

Utilizar PICTURE para manter a consistência das posições e formas de linhas na margem esquerda do Writer:

 PICTURE [ CIRCLE 20 POSITION [-100, 100] CIRCLE 20 ]

Ciclos

REPEAT

 ; REPEAT número[ comandos ]

REPEAT 10 [ FORWARD 10 LEFT 45 CIRCLE 10 ] ; repete 10 vezes
 ; número é opcional

REPEAT [ POSITION ANY ] ; ciclo sem fim

REPCOUNT

Variável de ciclo (também nos ciclos FOR e WHILE).

 REPEAT 100 [ FORWARD REPCOUNT LEFT 90 ]

FOR IN

Ciclo para os elementos da lista:

 FOR i IN [1, 5, 7, 9, 11] [
FORWARD i
LEFT 90
]

Ciclo dos caracteres numa sequência de caracteres:

 FOR i IN “texto” [
LABEL i
FORWARD 10
]

WHILE

 WHILE TRUE [ POSITION ANY ] ; ciclo sem fim
WHILE REPCOUNT <= 10 [ FORWARD 50 LEFT 36 ] ; igual a REPEAT 10 [ ... ]

BREAK

Para o ciclo.

 REPEAT [ ; ciclo sem fim
POSITION ANY
IF REPCOUNT = 100 [ BREAK ] ; equivalente a REPEAT 100 [ ... ]
]

CONTINUE

Ir para a próxima iteração do ciclo.

 REPEAT 100 [
POSITION ANY
IF REPCOUNT % 2 = 0 [ CONTINUE ]
CIRCLE 10 ; cria círculos a cada 2.º posição
]

Condições

IF

 ; IF condição [ bloco verdadeiro ]
; IF condição [ bloco verdadeiro ] [ bloco falso ]

IF a < 10 [ PRINT “Pequeno” ]
IF a < 10 [ PRINT “Pequeno” ] [ PRINT “Grande” ]

AND, OR, NOT

Operadores lógicos.

 IF a < 10 AND NOT a = 5 [ PRINT “0, 1, 2, 3, 4, 6, 7, 8 or 9” ]
IF a < 10 AND a != 5 [ PRINT “0, 1, 2, 3, 4, 6, 7, 8 or 9” ] ; como acima

Subrotinas

TO, END

Nova palavra (ou procedimento).

 TO triangle
REPEAT 2 [ FORWARD 100 RIGHT 120 ] FILL
END

REPEAT 10 [ triangle PENUP POSITION ANY PENDOWN ]

OUTPUT

Devolve o valor da função.

 TO randomletter
OUTPUT RANDOM “qwertzuiopasdfghjklyxcvbnm”
END

PRINT randomletter + randomletter + randomletter ; imprime aleatoriamente 3 letras da sequência

STOP

Regressar do procedimento.

 TO example number
IF number < 0 [ STOP ]
PRINT SQRT number ; imprime a raiz quadrada
]

example 100
example -1 ; sem resultados nem erros
example 25

Variáveis padrão

ANY

Valor aleatório padrão das cores, etc.

 PENCOLOR ANY ; cor aleatória da caneta

TRUE

Valor lógico.

 WHILE TRUE [ POSITION ANY ] ; ciclo sem fim
PRINT TRUE ; imprimir verdadeiro

FALSE

Valor lógico.

 WHILE NOT FALSE [ POSITION ANY ] ; ciclo sem fim
PRINT FALSE ; imprime falso

PAGESIZE

 PRINT PAGESIZE ; imprimir lista do tamanho de página em pontos, por ex. [595.30, 841.89]

PI/π

 PRINT PI ; imprime 3.14159265359

Input/Output

PRINT

 PRINT “texto” ; imprime “texto” numa caixa de diálogo
PRINT 5 + 10 ; imprime 15

INPUT

 PRINT INPUT “valor?” ; pede e imprime uma cadeia de texto numa caixa de diálogo
PRINT FLOAT (INPUT “Primeiro número?”) + FLOAT (INPUT “Segundo número?”) ; é uma calculadora básica

SLEEP

 SLEEP 1000 ; espera 1000 ms (1 segundo)

GLOBAL

Definir variáveis globais usadas em procedimentos.

 GLOBAL about
about = “LibreLogo”

TO example
PRINT about
GLOBAL about ; se quisermos adicionar um novo valor
about = “novo valor da variável global”
END

example
PRINT about

Funções

RANDOM

 PRINT RANDOM 100 ; número flutuante aleatório (0 <= x < 100)
PRINT RANDOM “texto” ; letra aleatório do “texto”
PRINT RANDOM [1, 2] ; elemento aleatório da lista (1 ou 2)

INT

 PRINT INT 3.8 ; imprime 3 (parte inteira de 3,8)
PRINT INT RANDOM 100 ; número inteiro aleatório (0 <= x < 100)
PRINT INT “7” ; converte o parãmetro da cadeia para inteiro

FLOAT

 ; converte o parâmetro da cadeia de texto num número flutuante
PRINT 2 * FLOAT “5.5” ; imprime 11.0

STR

 ; converte o parâmetro numérico numa cadeia de texto
PRINT “Resultado: ” + STR 5 ; imprime “Resultado: 5”
PRINT 10 * STR 5 ; imprime 5555555555

SQRT

 PRINT SQRT 100 ; imprime 10, a raiz quadrada de 100

SIN

 PRINT SIN 90 * PI/180 ; imprime 1.0 (o seno de 90° em radianos)

COS

 PRINT COS 0 * PI/180 ; imprime 1.0 (o seno de 0° em radianos)

LOG10

 PRINT LOG10 100 ; imprime 2.0 (logaritmo comum de 100)

ROUND

 PRINT ROUND 3.8 ; imprime 4 (arredondamento de 3,8)
PRINT ROUND RANDOM 100 ; número inteiro aleatório (0 <= x <= 100)

ABS

 PRINT ABS -10 ; imprime 10, o valor absoluto de -10

COUNT

 PRINT COUNT “texto” ; imprime 5, o número de caracteres em “texto”
PRINT COUNT [1, 2, 3] ; imprime 3, o tamanho da lista

SET

 ; Converte a lista para um conjunto Python
PRINT SET [4, 5, 6, 6] ; imprime {4, 5, 6}
PRINT SET [4, 5, 6, 6] | SET [4, 1, 9] ; imprime {1, 4, 5, 6, 9}, união
PRINT SET [4, 5, 6, 6] & SET [4, 1, 9] ; imprime {4}, interseção
PRINT SET ([4, 5, 6, 6]) - SET [4, 1, 9] ; imprime {5, 6}, diferença
PRINT SET [4, 5, 6, 6] ^ SET [4, 1, 9] ; imprime {1, 5, 6, 9}, diferença simétrica

RANGE

 ; geração de listas Python
PRINT RANGE 10 ; imprime [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
PRINT RANGE 3 10 ; imprime [3, 4, 5, 6, 7, 8, 9]
PRINT RANGE 3 10 3 ; imprime [3, 6, 9]

FOR i IN RANGE 10 50 10 [ ; ciclo para [10, 20, 30, 40]
FORWARD i
LEFT 90
]

LIST

 ; remover os elementos repetidos de uma lista utilizando conjunto e lista
PRINT LIST (SET [1, 3, 5, 5, 2, 1]) ; imprime [1, 3, 5, 2]

TUPLE

Conversão para Python tuple (lista não modificável)

 PRINT TUPLE [4, 5]

SORTED

Devolve uma lista ordenada.

 PRINT SORTED [5, 1, 3, 4] ; imprime [1, 3, 4, 5]

SUB

Substituir sequências de caracteres usando padrões regex (expressões regulares).

 PRINT SUB (“t”, “T”, “texto”) ; imprime “Texto”, substituindo “t” por “T”
PRINT SUB (“(.)”, “\\1\\1”, “texto”) ; imprime “tteexxttoo”, duplicando todos os caracteres

SEARCH

Procurar padrões de sequências de caracteres usando padrões regex.

 IF SEARCH (“\w”, "word") [ PRINT “Letra na palavra” ]

FINDALL

Localizar todas as sequências de caracteres no texto de entrada, coincidentes com o padrão regex.

 PRINT FINDALL(“\w+”, “Cães, gatos.”) ; imprime [“Cães”, “gatos”], a lista das palavras.

MIN

 PRINT MIN [1, 2, 3] ; imprime 1, o menor elemento da lista

MAX

 PRINT MAX [1, 2, 3] ; imprime 3, o maior elemento da lista

Constantes de cor

 PENCOLOR “SILVER” ; define a cor pelo nome
PENCOLOR [1] ; define a cor por identificador
PENCOLOR “~SILVER” ; escolhe uma cor prateada aleatória

Identificador

Nome

0

BLACK

1

SILVER

2

GRAY/GREY

3

WHITE

4

MAROON

5

RED

6

PURPLE

7

FUCHSIA/MAGENTA

8

GREEN

9

LIME

10

OLIVE

11

YELLOW

12

NAVY

13

BLUE

14

TEAL

15

AQUA

16

PINK

17

TOMATO

18

ORANGE

19

GOLD

20

VIOLET

21

SKYBLUE

22

CHOCOLATE

23

BROWN

24

INVISIBLE