LibreLogo

LibreLogo е проста среда за програмиране с костенуркова векторна графика, подобна на Logo, за преподаване на програмиране и текстообработка, издателска дейност и графичен дизайн. Вижте http://www.numbertext.org/logo/librelogo.pdf.

Лента с инструменти LibreLogo

Лентата с инструменти LibreLogo (Изглед - Ленти с инструменти - Logo) съдържа икони за движение на костенурката, стартиране и спиране на програмата, инициализиране, изчистване на екрана, открояване и превеждане на синтаксиса, както и поле за въвеждане (команден ред).

Икони за придвижване на костенурката

Те са еквивалентни на командите на Logo „FORWARD 10“, „BACK 10“, „LEFT 15“ и RIGHT 15“. Щракването върху някоя от тях освен това фокусира костенурката, превъртайки страницата до нейната позиция.

Стартиране програма на Logo

Щракнете върху иконата „Стартиране програма на Logo“, за да се изпълни целият (или само избраният) текст в документа на Writer като програма на LibreLogo. Ако документът е празен, ще бъде вмъкната и изпълнена примерна програма.

Щракнете върху иконата „Стоп“, за да спрете изпълнението на програмата.

Инициализиране

Щракнете върху иконата „Инициализиране“, за да нулирате позицията и настройките на костенурката.

Изчистване на екрана

Щракнете върху иконата „Изчистване на екрана“, за да премахнете графичните обекти от документа.

Редактиране на програма/открояване на синтаксиса/превеждане

Иконата „вълшебна пръчка“ задава оформление с две страници за редактиране на програма, после разгръща и преобразува в главни букви командите на Logo в документа на Writer. Променете езика на документа (Инструменти - Настройки - Езикови настройки - Езици - Западни) и щракнете върху тази икона, за да се преведе програмата на Logo към избрания език.

Команден ред

Натиснете Enter в командния ред, за да се изпълни съдържанието му. За да спрете програмата, използвайте иконата „Стоп“.

Задръжте Enter за повтаряне на командния ред, например с последователност от команди като долната:

 FORWARD 200 LEFT 89

За да изчистите командния ред, щракнете трикратно в него или натиснете Ctrl+A, за да изберете предишните команди, и въведете новите команди.

Графичен потребителски интерфейс на основните настройки на костенурката

Костенурката на LibreLogo е обикновен графичен обект с фиксиран размер. Можете да я позиционирате и въртите по стандартния начин с мишката и иконата за въртене от лентата Свойства на графичен обект. Променяйте дебелината и цвета на линията и цвета на областта, за да задавате атрибутите PENSIZE, PENCOLOR и FILLCOLOR на LibreLogo.

Редактиране на програма

Рисунките и програмите на LibreLogo споделят един и същ документ на Writer. Платното на LibreLogo е първата страница на документа. Можете да вмъкнете знак за нова страница преди програмите на LibreLogo и да зададете увеличение с иконата „вълшебна пръчка“ от лентата Logo, както и да промените размера на шрифта, за да получите удобно оформление от две страници: лявата (първата) страница е платното, а дясната (втората) е редакторът на програми.

Език за програмиране LibreLogo

LibreLogo е лесен за локализиране програмен език, подобен на Logo, локализиран на няколко езика от езиковите общности на LibreOffice. Той е съвместим с по-старите системи на Logo що се отнася до простите програми, използвани за обучение.

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

triangle 10 triangle 100 triangle 200

Разлики с програмния език Logo

Други особености на LibreLogo

Команди на LibreLogo

Основен синтаксис

Зачитане на регистъра

Командите и имената на цветове са нечувствителни към регистъра:

 PRINT “Здравей, свят!”
print “Здравей отново, свят!”

Имената на променливи са чувствителни към регистъра:

 a = 5
A = 7
PRINT a
PRINT A

Програмни редове

Редовете от програма на LibreLogo са абзаци в документа на LibreOffice Writer. Един програмен ред може да съдържа няколко команди:

 PRINT “Здравей, свят!” PRINT “LibreLogo”

Коментари

Всичко след знак точка и запетая до края на реда (абзаца) се счита за коментар:

 ; това са коментари
PRINT 5 * 5 ; още коментари

Разделяне програмен ред на няколко абзаца

Възможно е програмен ред да се раздели на няколко абзаца, като в краищата им се поставя знак тилда:

 PRINT “Това е много дълго ” + ~
“съобщение за грешка”

Придвижване на костенурката

FORWARD (fd)

 FORWARD 10 ; придвижване напред с 10пкт (1пкт = 1/72 инча = 0,35мм)
FORWARD 10pt ; виж по-горе
FORWARD 0.5in ; придвижване напред с 0,5 инча (1 инч = 2,54 см)
FORWARD 1" ; виж по-горе
FD 1mm
FD 1cm

BACK (bk)

 BACK 10 ; придвижване назад с 10пкт

LEFT (lt)

 LEFT 90 ; завъртане срещу часовниковата стрелка на 90°
LEFT 90° ; виж по-горе
LT 3h ; виж по-горе (посока по часовника)
LT any ; завъртане в случайна посока

RIGHT (rt)

 RIGHT 90 ; завъртане по часовниковата стрелка на 90°

PENUP (pu)

 PENUP ; костенурката няма да оставя следа

PENDOWN (pd)

 PENDOWN ; костенурката ще оставя следа

POSITION (pos)

 POSITION [0, 0] ; завъртане и придвижване към горния ляв ъгъл
POSITION PAGESIZE ; завъртане и придвижване към долния десен ъгъл
POSITION [PAGESIZE[0], 0] ; завъртане и придвижване към горния десен ъгъл
POSITION ANY ; завъртане и придвижване към случайна позиция

HEADING (seth)

 HEADING 0 ; обръщане на север
HEADING 12h ; същото
HEADING [0, 0] ; завъртане към горния ляв ъгъл
HEADING ANY ; завъртане в случайна посока

Други команди за костенурката

HIDETURTLE (ht)

 HIDETURTLE ; скрива костенурката (до команда showturtle)

SHOWTURTLE (st)

 SHOWTURTLE ; показва костенурката

HOME

 HOME ; връща началната позиция на костенурката

CLEARSCREEN (cs)

 CLEARSCREEN ; премахва графичните обекти от документа

FILL и CLOSE

 FILL ; затваря и запълва текущата фигура или точки
CLOSE ; затваря текущата фигура или съединява точките

Пример: запълване на равностранен триъгълник:

 FORWARD 50 LEFT 120 FORWARD 50 FILL

Пример: чертане на равностранен триъгълник:

 FORWARD 50 LEFT 120 FORWARD 50 CLOSE

Настройки на писеца

PENSIZE (ps)

 PENSIZE 100 ; дебелина на линията 100 пункта
PENSIZE ANY ; същото като PENSIZE RANDOM 10

PENCOLOR/PENCOLOUR (pc)

 PENCOLOR “red” ; червен цвят на писеца (по име, вижте константите за цветовете)
PENCOLOR [255, 255, 0] ; жълт цвят (списък с компоненти RGB)
PENCOLOR 0xffff00 ; жълт цвят (шестнайсетичен код)
PENCOLOR 0 ; черен цвят (0x000000)
PENCOLOR ANY ; случаен цвят
PENCOLOR [5] ; червен цвят (по идентификатор, вижте константите за цветовете)
PENCOLOR “invisible” ; невидим цвят за фигури без видимо очертание
PENCOLOR “~red” ; случаен червен цвят

PENTRANSPARENCY

 PENTRANSPARENCY 80 ; задава прозрачност от 80% за цвета на писеца

PENCAP/LINECAP

 PENCAP “none” ; без крайчета на линиите (по подразбиране)
PENCAP “round” ; закръглени крайчета
PENCAP “square” ; квадратни крайчета

PENJOINT/LINEJOINT

 PENJOINT “rounded” ; закръглени съединения на линиите (по подразбиране)
PENJOINT “miter” ; остри съединения
PENJOINT “bevel” ; скосени съединения
PENJOINT “none” ; без съединения

PENSTYLE

 PENSTYLE “solid” ; непрекъсната линия (по подразбиране)
PENSTYLE “dotted” ; пунктирана линия
PENSTYLE “dashed” ; прекъсната линия

; шарка от точки и тирета, зададена със следните аргументи:
; – брой последователни точки
; – дължина на точката
; – брой последователни тирета
; – дължина на тирето
; – разстояние между тиретата/точките
; – тип (незадължителен):
; 0 = точките са правоъгълни (по подразбиране)
; 2 = точките са квадратни (дължините и разстоянията са относителни спрямо размера на писеца)

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

Настройки за запълване

FILLCOLOR/FILLCOLOUR (fc)

 FILLCOLOR “blue” ; запълване със син цвят, виж и PENCOLOR
FILLCOLOR “invisible” CIRCLE 10 ; незапълнен кръг
FILLCOLOR [“blue”, “red”] ; преливане между червено и синьо
FILLCOLOR [[255, 255, 255], [255, 128, 0]] ; между бяло и оранжево
FILLCOLOR [“blue”, “red”, 1, 0, 0] ; осев градиент (с настройки за завъртане и прагове), допустими стойности: 0-5 = линеен, осев, радиален, елиптичен, квадратен или правоъгълен градиент
FILLCOLOR [“red”, “blue”, 0, 90, 20] ; линеен с праг от 20%, завъртян на 90° спрямо посоката на костенурката
FILLCOLOR [“red”, 'blue”, 0, 90, 20, 0, 0, 200, 50] ; интензивност от 200% до 50%
FILLCOLOR [ANY, ANY, 2, 0, 0, 50, 50] ; радиален градиент със случайни цветове и позиция на центъра 50% по хоризонтала и вертикала

FILLTRANSPARENCY

 FILLTRANSPARENCY 80 ; 80% прозрачност за текущия цвят на запълване
FILLTRANSPARENCY [80] ; линеен градиент на прозрачността от 80% до 0%
FILLTRANSPARENCY [80, 20] ; линеен градиент на прозрачността от 80% до 20%
FILLTRANSPARENCY [80, 20, 1, 90] ; осев градиент на прозрачността под ъгъл 90° спрямо посоката на костенурката
FILLTRANSPARENCY [80, 20, 2, 0, 20, 50, 50] ; радиален градиент на прозрачността от 80% отвън до 20% отвътре с праг от 20% и позиция на центъра 50% по хоризонтала и вертикала

FILLSTYLE

 FILLSTYLE 0 ; запълване без щриховка (по подразбиране)
FILLSTYLE 1 ; черни единични щрихи (хоризонтални)
FILLSTYLE 2 ; черни единични щрихи (45 градуса)
FILLSTYLE 3 ; черни единични щрихи (45 градуса)
FILLSTYLE 4 ; черни единични щрихи (вертикални)
FILLSTYLE 5 ; червени пресечени щрихи (45 градуса)
FILLSTYLE 6 ; червени пресечени щрихи (0 градуса)
FILLSTYLE 7 ; сини пресечени щрихи (45 градуса)
FILLSTYLE 8 ; сини пресечени щрихи (0 градуса)
FILLSTYLE 9 ; сини тройно пресечени щрихи
FILLSTYLE 10 ; дебели единични черни щрихи (45 градуса)

; потребителска щриховка, зададена чрез следните аргументи:
; – стил (1 = единична, 2 = двойна, 3 = тройна щриховка)
; – цвят
; – стъпка
; – наклон

FILLSTYLE [2, “green”, 3pt, 15°] ; зелени пресечени щрихи (15 градуса)

Графични обекти

CIRCLE

 CIRCLE 100 ; чертае кръг (диаметър = 100пкт)

ELLIPSE

 ELLIPSE [50, 100] ; чертае елипса с диаметри 50 и 100
ELLIPSE [50, 100, 2h, 12h] ; чертае елиптичен сектор (от посока по часовника 2 ч. до 12 ч.)
ELLIPSE [50, 100, 2h, 12h, 2] ; чертае елиптичен сегмент
ELLIPSE [50, 100, 2h, 12h, 3] ; чертае дъга от елипса

SQUARE

 SQUARE 100 ; чертае квадрат (размер = 100пкт)

RECTANGLE

 RECTANGLE [50, 100] ; чертае правоъгълник (50×100пкт)
RECTANGLE [50, 100, 10] ; чертае правоъгълник със заоблени ъгли

POINT

 POINT ; чертае точка с размера и цвета на писеца

CLOSE може да съедини последните точки, а FILL – да запълни фигура, зададена чрез точки. Лесно е например да се нарисува „плоска“ звезда, започвайки от центъра й:

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

LABEL

 LABEL “текст” ; отпечатва текст в позицията на костенурката
LABEL 'текст' ; виж по-горе
LABEL "текст ; виж по-горе (само за единични думи)

TEXT

 CIRCLE 10 TEXT “текст” ; задава текста на текущия графичен обект

Настройки на шрифта

FONTCOLOR/FONTCOLOUR

 FONTCOLOR “green” ; задава цвета на шрифта

FONTFAMILY

 FONTFAMILY “Linux Libertine G” ; задава шрифт (фамилия)
FONTFAMILY “Linux Libertine G:smcp=1” ; задава и особеност на шрифта (малки главни букви)
FONTFAMILY “Linux Libertine G:smcp=1&onum=1” ; малки главни букви + минускулни цифри

FONTSIZE

 FONTSIZE 12 ; задава размер на шрифта 12пкт

FONTWEIGHT

 FONTWEIGHT “bold” ; задава получер шрифт
FONTWEIGHT “normal” ; задава нормално тегло

FONTSTYLE

 FONTSTYLE “italic” ; задава курсивен вариант
FONTSTYLE “normal” ; задава обикновен вариант

PICTURE (pic)

PICTURE служи за

Групиране на фигури

 ; PICTURE [ команди_на_LibreLogo ]
PICTURE [ FORWARD 100 CIRCLE 100 ] ; групирана дървовидна фигура

Вижте също „Групиране“ в помощта на LibreOffice Writer.

 TO tree location
PENUP POSITION location HEADING 0 PENDOWN
PICTURE [ FORWARD 100 CIRCLE 100 ] ; дървовидна групирана фигура
END

PICTURE [ tree [230, 400] tree [300, 400] ] ; групирани фигури в групирана фигура

Започване на нова фигура

 PICTURE ; започва нова фигура
FORWARD 10 PICTURE FORWARD 10 ; две фигури

Запазване на изображения във формат SVG

 PICTURE “пример.svg” [ CIRCLE 5 ] ; запазва рисунката като SVG файл в папката на потребителя
PICTURE “Desktop/пример.svg” [ FORWARD 100 CIRCLE 5 ] ; същото, с относителен път
PICTURE “/home/user/пример.svg” [ CIRCLE 5 ] ; абсолютен път за Unix/Linux
PICTURE “C:\пример.svg” [ CIRCLE 5 ] ; абсолютен път за Windows

Запазване на анимации във формат SVG/SMIL (рисунки с команди SLEEP)

 PICTURE “анимация.svg” [ CIRCLE 5 SLEEP 1000 CIRCLE 99 ] ; запазване като анимация SVG/SMIL (виж също SLEEP)
PICTURE “анимация2.svg” [ CIRCLE 5 SLEEP 1000 CIRCLE 99 SLEEP 2000 ] ; същото, но със SLEEP след последния обект за циклично повторение: след 2 секунди анимацията се рестартира в браузърите, съвместими с SMIL

Съгласуване в левия край на платното

Използвайте PICTURE, за да поддържате взаимното разположение на позиции и фигури в левия край на платното:

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

Цикли

REPEAT

 ; REPEAT брой [ команди ]

REPEAT 10 [ FORWARD 10 LEFT 45 CIRCLE 10 ] ; повтаряне 10 пъти
 ; броят не е задължителен

REPEAT [ POSITION ANY ] ; безкраен цикъл

REPCOUNT

Брояч на цикъла (също и в циклите с FOR и WHILE).

 REPEAT 100 [ FORWARD REPCOUNT LEFT 90 ]

FOR IN

Цикъл по елементите на списък:

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

Цикъл по знаците в знакова последователност:

 FOR i IN “текст” [
LABEL i
FORWARD 10
]

WHILE

 WHILE TRUE [ POSITION ANY ] ; безкраен цикъл
WHILE REPCOUNT <= 10 [ FORWARD 50 LEFT 36 ] ; като REPEAT 10 [ ... ]

BREAK

Спира цикъла.

 REPEAT [ ; безкраен цикъл
POSITION ANY
IF REPCOUNT = 100 [ BREAK ] ; еквивалентно на REPEAT 100 [ ... ]
]

CONTINUE

Преход към следващата итерация на цикъла.

 REPEAT 100 [
POSITION ANY
IF REPCOUNT % 2 = 0 [ CONTINUE ]
CIRCLE 10 ; чертае кръгове на всяка втора позиция
]

Условия

IF

 ; IF условия [ блок за true ]
; IF условие [ блок за true ] [ блок за false ]

IF a < 10 [ PRINT “Малко” ]
IF a < 10 [ PRINT “Малко” ] [ PRINT “Голямо” ]

AND, OR, NOT

Логически операции.

 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” ] ; същото като горното

Подпрограми

TO, END

Нова дума (или процедура).

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

REPEAT 10 [ triangle PENUP POSITION ANY PENDOWN ]

OUTPUT

Резултатна стойност на функцията.

 TO randomletter
OUTPUT RANDOM “qwertzuiopasdfghjklyxcvbnm”
END

PRINT randomletter + randomletter + randomletter ; отпечатва случайна последователност от три букви

STOP

Връща управлението от процедурата.

 TO example number
IF number < 0 [ STOP ]
PRINT SQRT number ; отпечатва квадратния корен
]

example 100
example -1 ; не се отпечатва нищо, няма грешка
example 25

Променливи по подразбиране

ANY

Подразбирана случайна стойност за цветове и т.н.

 PENCOLOR ANY ; случаен цвят на писеца

TRUE

Логическа стойност.

 WHILE TRUE [ POSITION ANY ] ; безкраен цикъл
PRINT TRUE ; отпечатва true

FALSE

Логическа стойност.

 WHILE NOT FALSE [ POSITION ANY ] ; безкраен цикъл
PRINT FALSE ; отпечатва false

PAGESIZE

 PRINT PAGESIZE ; отпечатва като списък размера на страницата в пунктове, например [595.30, 841.89]

PI/π

 PRINT PI ; отпечатва 3.14159265359

Вход/изход

PRINT

 PRINT “текст” ; отпечатва “текст” в диалогов прозорец
PRINT 5 + 10 ; отпечатва 15

INPUT

 PRINT INPUT “Входна стойност?” ; показва подкана и приема низ чрез диалогов прозорец
PRINT FLOAT (INPUT “Първо число?”) + FLOAT (INPUT “Второ число?”) ; прост калкулатор

SLEEP

 SLEEP 1000 ; изчаква 1000 мс (1 с)

GLOBAL

Задава глобални променливи, използвани в процедурите.

 GLOBAL about
about = “LibreLogo”

TO example
PRINT about
GLOBAL about ; когато искаме да добавим нова стойност
about = “нова стойност за глобалната променлива”
END

example
PRINT about

Функции

RANDOM

 PRINT RANDOM 100 ; случайно число с плаваща запетая (0 <= x < 100)
PRINT RANDOM “текст” ; случайна буква от “текст”
PRINT RANDOM [1, 2] ; случаен елемент от списъка (1 или 2)

INT

 PRINT INT 3.8 ; отпечатва 3 (цялата част на 3,8)
PRINT INT RANDOM 100 ; случайно цяло число (0 <= x < 100)
PRINT INT “7” ; преобразува параметър – низ в цяло число

FLOAT

 ; преобразува параметъра – низ в число с плаваща запетая
PRINT 2 * FLOAT “5.5” ; отпечатва 11.0

STR

 ; преобразува числовия параметър в низ
PRINT “Резултат: ” + STR 5 ; отпечатва “Резултат: 5”
PRINT 10 * STR 5 ; отпечатва 5555555555

SQRT

 PRINT SQRT 100 ; отпечатва 10, квадратния корен на 100

SIN

 PRINT SIN 90 * PI/180 ; отпечатва 1.0 (синус от 90° в радиани)

COS

 PRINT COS 0 * PI/180 ; отпечатва 1.0 (косинус от 0° в радиани)

LOG10

 PRINT LOG10 100 ; отпечатва 2.0 (десетичен логаритъм от 100)

ROUND

 PRINT ROUND 3.8 ; отпечатва 4 (закръглено 3,8)
PRINT ROUND RANDOM 100 ; случайно цяло число (0 <= x <= 100)

ABS

 PRINT ABS -10 ; отпечатва 10, абсолютната стойност на -10

COUNT

 PRINT COUNT “текст” ; отпечатва 5, броя знаци в “текст”
PRINT COUNT [1, 2, 3] ; отпечатва 3, дължината на списъка

SET

 ; Преобразува списък в множество на Python
PRINT SET [4, 5, 6, 6] ; отпечатва {4, 5, 6}
PRINT SET [4, 5, 6, 6] | SET [4, 1, 9] ; отпечатва {1, 4, 5, 6, 9}, обединение
PRINT SET [4, 5, 6, 6] & SET [4, 1, 9] ; отпечатва {4}, сечение
PRINT SET ([4, 5, 6, 6]) - SET [4, 1, 9] ; отпечатва {5, 6}, разлика
PRINT SET [4, 5, 6, 6] ^ SET [4, 1, 9] ; отпечатва {1, 5, 6, 9}, симетрична разлика

RANGE

 ; Генериране на списъци като в Python
PRINT RANGE 10 ; отпечатва [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
PRINT RANGE 3 10 ; отпечатва [3, 4, 5, 6, 7, 8, 9]
PRINT RANGE 3 10 3 ; отпечатва [3, 6, 9]

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

LIST

 ; премахва повтарящите се елементи от списък чрез преобразуване между множество и списък
PRINT LIST (SET [1, 3, 5, 5, 2, 1]) ; отпечатва [1, 3, 5, 2]

TUPLE

Преобразуване към n-торка на Python (константен списък)

 PRINT TUPLE [4, 5]

SORTED

Връща сортиран списък.

 PRINT SORTED [5, 1, 3, 4] ; отпечатва [1, 3, 4, 5]

SUB

Замества поредица от знаци чрез регулярен израз.

 PRINT SUB (“т”, “Т”, “текст”) ; отпечатва “Текст”, заменяйки “т” с “Т”
PRINT SUB (“(.)”, “\\1\\1”, “текст”) ; отпечатва “ттеекксстт”, удвоявайки всеки знак

SEARCH

Претърсва знакова последователност чрез регулярен израз.

 IF SEARCH (“\w”, "word") [ PRINT “В думата има буква.” ]

FINDALL

Намира всички знакови последователности във входния низ, които отговарят на дадения регулярен израз.

 PRINT FINDALL(“\w+”, “Кучета, котки.”) ; отпечатва [“Кучета”, “котки”], списък от думите.

MIN

 PRINT MIN [1, 2, 3] ; отпечатва 1, най-малкия елемент на списъка

MAX

 PRINT MAX [1, 2, 3] ; отпечатва 3, най-големия елемент от списъка

Константи за цветове

 PENCOLOR “SILVER” ; задаваме по име
PENCOLOR [1] ; задаване по идентификатори
PENCOLOR “~SILVER” ; случаен сивкав цвят

Идентификатор

Име

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