# Справочник &logo;

Эта глава начинается с краткого описания различных типов инструкций. Потом идёт подробное описание каждой команды, затем описываются контейнеры, математические операции, "вопросы" и операторы условного выполнения. В конце даётся несколько примеров создания собственных команд с помощью команды выучи.

## Типы инструкций

### Команды

Используя команды, вы предписываете Черепашке или KTurtle выполнить какое-либо действие. Некоторые команды нуждаются во входных параметрах, некоторые возвращают результат. В данном разделе объясняются все команды, используемые в KTurtle.

    # вперёд - это команда, которой нужно передавать параметры, в нашем случае - это 100:
    вперёд 100

Подробное описание всех команд, поддерживаемых &kturtle;, находится здесь.

### Числа

В Лого есть натуральные числа: `0`, `1`, `2`, `3`, `4`, `5`, ...; отрицательные: `-1`, `-2`, `-3`, ...; и десятичные дроби: `0.1`, `3.14`, `33.3333`, `-5.05`, `-1.0`.

Числа используются в математических расчётах и вопросах. они могут помещаться в контейнеры.

Числа выделяются синим цветом в редакторе кода.

### Строки

Пример:

    напиши "Привет, я строка."

В этом примере `напиши` - команда, которой передаётся строка `"Привет, я строка."`. Строки начинаются и заканчиваются на `"`, так &kturtle; может определить, что это строка.

Строки можно помещать в контейнеры.

Строки выделяются тёмно-красным в редакторе кода.

### Имена

Имена можно давать контейнерам (переменным) и новым командам.

Имена не могут совпадать с именами команд.

    # попытка использовать вперёд в качестве имени,
    # но оно уже занято командой, так что при выполнении получим ошибку
    вперёд = 20

    # это работает:
    вперёд 20

Имена могут состоять из букв, цифр и символа подчёркивания (_), но первой всегда должна быть буква.

Для подробностей см. Контейнеры и справку по команде выучи.

### Присваивание

Присваивание производится символом `=`. В большинстве языков программирования лучше читать один символ `=` не как 'равно', а как 'становится'. Слово 'равно' больше подходит к `==`, это используется в вопросах.

Одинаково можно присваивать значения новым контейнерам и менять их значение, например:

    x = 10
    # контейнер x теперь содержит число 10
    W = "Сейчас мне столько лет: "
    # контейнер W теперь содержит строку "Сейчас мне столько лет: "
    # это выводит на экран содержимое 'W' и 'x'
    напиши W + x

Для подробностей, обратитесь к разделу о контейнерах.

### Математические знаки

&kturtle; поддерживает все основные математические операции: сложение (`+`), вычитание (`-`), умножение (`*`), деление (`/`), можно использовать скобки `(` и `)`.

Для подробностей см. раздел Математические вычисления.

### Вопросы

У программы можно спрашивать вопросы и получать на них ответы (истина или ложь)

Использование вопросов подробно описано в соответствующем разделе.

### Склеивающие слова в вопросах

С помощью них можно соединять несколько вопросов. Это может быть `и`, `или`, а также специальное `не`.

Использование склеивающих слов подробно описано в соответствующем разделе.

### Комментарии

Комментарии - это строки, начинающиеся с `#`. Например:

    # это комментарий!
    напиши "это не комментарий"
    # напиши "а это - комментарий"

Комментарии могут содежать разъяснения к коду, ещё комментарием можно сделать какую-то команду, чтобы она не выполнялась.

Комментарии выделяются тёмно-жёлтым в редакторе кода.

## Команды

Разные команды делают разные вещи, одни из них требуют дополнительную информацию, некоторые возвращают её. Далее мы опишем каждую из поддерживаемых команд. Заметьте, что такие команды выделяются тёмно-зелёным в редакторе кода.

### Двигаем Черепашку.

Существует несколько команд для перемещения Черепашки по экрану.

#### вперёд (вп)

вперёд

      вперёд X

  `вперёд` перемещает Черепашку на X пикселей вперёд. Когда перо опущено Черепашка будет оставлять за собой след. Эта команда также может записываться как `вп`.

#### назад (нд)

назад

      назад X

  `назад` перемещает Черепашку назад на X пикселей. Когда перо опущено Черепашку будет оставлять за собой след. Может так же записываться как `нд`.

#### налево (лв)

налево

      налево X

  Предписывает Черепашке повернуть на X градусов налево. Может записываться и как `лв`.

#### направо (tr)

направо

      направо X

  Предписывает Черепашке повернуть на X градусов направо. Может записываться и как `пр`.

#### направление (нпр)

направление

      направление X

  Устанавливает направление Черепашки на X градусов относительно 0, а не относительно предыдущего направления. Может записываться как `нпр`.

#### центр

центр

      центр

  Перемещает Черепашку в центр холста.

#### иди

иди

      иди X,Y

  Предписывают Черепашке занять определённое место на холсте. Это место находится на X пикселей от левой границы и на Y пикселей от верхней границы холста. Примечание: при перемещении Черепашка не будет оставлять след.

#### иди_гор

иди_гор

      иди_гор X

  `иди_гор` используется для перемещения Черепашки на X пикселей от левой границы холста, высота остается неизменной.

#### иди_верт

иди_верт

      иди_верт Y

  Используется для перемещения Черепашки на Y пикселей от верхней границы холста, положение относительно левой границы остаётся неизменным.

### У Черепашки есть перо

У Черепашки есть перо, которым она рисует линию во время перемещения. Есть несколько команд для управления пером. В данном разделе они будут описаны подробно.

#### перо_подними (пп)

перо_подними

      перо_подними

  `перо_подними` отрывает перо от холста. Пока перо оторвано, Черепашка не будет рисовать линию во время перемещений. Может записываться и как pu. См. также `перо_опусти`.

#### перо_опусти (по)

перо_опусти

      перо_опусти

  `перо_опусти` опускает перо на холст. Когда перо опущено, Черепашка рисует линию при перемещениях. Может записываться и как pd. См. также `перо_подними`.

#### нов_ширина_пера (ншп)

нов_ширина_пера

      нов_ширина_пера X

  `нов_ширина_пера` устанавливает ширину пера (ширину линии) в X пикселей. Может записываться и как `ншп`.

#### нов_цвет_пера (нцп)

нов_цвет_пера

      нов_цвет_пера R,G,B

  `нов_цвет_пера` устанавливает цвет пера. В качестве параметров указывается интенсивность красной, зеленой и синей составляющих цвета (0..255). Может записываться и как `нцп`.

### Команды для работы с холстом.

Существует несколько команд для работы с холстом.

#### нов_размер_холста (нрх)

нов_размер_холста

      нов_размер_холста X,Y

  С помощью этой команды можно поменять размер холста. В качестве входных параметров задаются ширина X и высота Y в пикселях. Может записываться и как `нрх`.

#### нов_цвет_холста (нцх)

нов_цвет_холста

      нов_цвет_холста R,G,B

  `нов_цвет_холста` устанавливает цвет холста. Входными параметрами является комбинация RGB. Может записываться и как `нцх`.

#### обёртка_вкл

обёртка_вкл

      обёртка_вкл

  Этой командой вы устанавливаете обёртку холста. Это значит, что при достижении края холста Черепашка не исчезнет, а окажется на его противоположной стороне.

#### обёртка_выкл

обёртка_выкл

      обёртка_выкл

  Этой командой вы отключаете обёртку холста. Это значит, что Черепашка может выйти за границы холста и “исчезнуть”.

### Команды очистки

Существуют две команды очистки холста.

#### очисти (очс)

очисти

      очисти

  Этой командой вы можете очистить холст от всех следов. Все остальное останется по-прежнему: позиция и угол направления Черепашки, цвет холста, видимость Черепашки и размер холста. Может записываться и как `очс`.

#### сброс

сброс

      сброс

  Очищает более объёмно, нежели команда `очисти`. После выполнения этой команды всё будет выглядеть так, как будто вы только что запустили KTurtle. Черепашка будет расположена в центре экрана, цвет холста будет белым, цвет пера Черепашки также будет белым.

### Черепашка - это спрайт.

Большинство людей и понятия не имеют, что такое спрайты, так вот, спрайты – это маленькие картинки, которые можно перемещать по экрану. Так что Черепашка - спрайт!

Ниже будет дано подробное описание всех команд работы со спрайтами.

Текущая версия KTurtle пока не поддерживает использование спрайтов, отличных от Черепашки. В ближайшем будущем вы сможете заменить Черепашку на любой другой персонаж собственной придумки.

#### покажи

покажи (пж)

      покажи

  Делает Черепашку видимой после того, как она была скрыта. Так же может записываться как `пж`.

#### спрячь (сч)

спрячь

      спрячь

  Скрывает Черепашку. Это полезно, когда Черепашка не уместна в ваших рисунках. Может записываться и как `сч`.

### Может ли Черепашка печатать на холсте?

Черепашка может написать всё, что вы ей прикажете.

#### напиши

напиши

      напиши X

  Команда `напиши` используется для указания Черепашки написать что-либо на холсте. В качестве входных параметров можно передавать строки или числа. Вы можете печатать различные числа и строки, комбинируя их вместе оператором +. Вот маленький пример.

      год = 2003
      автор = "Cies"
      напиши автор + " started the KTurtle project in " + год + " and still enjoys working on it!"

#### нов_размер_шрифта

нов_размер_шрифта

      нов_размер_шрифта X

  Устанавливает размер шрифта, используемого для печати. Входной параметр один, он должен быть числом. Размер задаётся в пикселях.

### Команды для получения случайных чисел.

Команда, которая “бросает игральную кость” для вас.

случайное

      случайное X,Y

  `случайное` – команда, которая имеет входные и выходные параметры. На входе требуются два числа, первое (X) зада`т нижний порог получаемых чисел (минимум), второе (Y) зада`т верхний порог (максимум). Выходной параметр – это псевдослучайное число, которое не меньше минимума и не больше максимума. Вот маленький пример:

      повтори 500 [
        x = случайное 1,20
        вперёд x
        налево 10 - x
      ]

  Используя `случайное`, вы можете привнести немного “хаоса” в вашу программу.

### Взаимодействие через диалоги

Диалог - маленькое окно, в котором предлагается ввести что-нибудь. В &kturtle; есть две команды для реализации интерактивности: `сообщение` `окно_вопроса`

#### сообщение

сообщение

      сообщение X

  Команде `сообщение` требуется передать строку, она будет показана в появившемся окне.

      год = 2003
      автор = "Cies"
      напиши автор + " started the KTurtle project in " + год + " and still enjoys working on it!"

#### окно_вопроса

окно_вопроса

      окно_вопроса X

  Команде `окно_вопроса` требуется передать строку, она будет показана в появившемся окне, аналогично команде сообщение. Но, кроме этого, в окне будет поле для ввода числа или текста. Например

      результат = окно_вопроса "Сколько вам лет?"
      осталось = 18 - результат
      напиши "Через " + осталось + " лет вам будет разрешено водить машину."

  Если пользователь ничего не введёт и просто закроет окно, переменная `осталось` будет пустой.

## Контейнеры.

Контейнеры - это символы или слова, которые используются программистом для хранения чисел или текста.Контейнеры, содержащие числа, называются переменными, а содержащие текст - строками.

Контейнеры до первого их использования содержат 0 по умолчанию. Вот пример:

    напиши N

Не будет напечатано ничего. Если мы будет использовать математические операции с пустыми контейнерами, то получим ошибки.

### Переменные: числовые контейнеры

Давайте начнём с небольшого примера:

    x = 3
    напиши x

В первой строке символ `x` объявляется переменной (числовым контейнером). Как вы можете увидеть, значение переменной `x` устанавливается равной трём. На второй строке это значение выводится на печать.

Помните, что если мы хотим напечатать x, мы должны написать

    напиши "x"

Это было совсем просто, вот пример посложнее:

    A = 2004
    B = 25
    C = A + B

    # следующая команда напечатает "2029"
    напиши C
    назад 30
    # следующая команда напечатает "2004 плюс 25"
    напиши A + " плюс " + B
    назад 30
    # следующая команда напечатает "1979"
    напиши A - B

В первых двух строках переменные `A` и `B` устанавливаются равными 2004 и 25.В третьей строке переменной `С` присваивается результат `A + B`, который равен 2029. Остальное в примере – три команды печати на холсте с командой `назад 30` между ними.Команда `назад 30` используется здесь для уверенности в том, что каждая новая печать на холст будет на новой строке. В данном примере также демонстрируется, как переменные могут быть использованы в математических расчётах.

### Текстовые контейнеры

Обычный текст заключается в кавычки, например:

    напиши "Привет, программист!"

то, что между кавычками, называетсястрокой.

Строки во многом похожи на переменные. Главное же отличие состоит в том, что строки не могут быть использованы в математических выражениях и вопросах. Пример использования строк:

    x = "Привет "
    имя = окно_вопроса "Введите своё имя..."
    напиши x + имя + ", как дела?"

В первой строке x присваивается текст Привет. Затем строке `name` присваивается результат выполнения команды `окно_вопроса` и на холсте печатается комбинация полученных трёх строк.

Эта программа спрашивает ваше имя. Когда вы вводите, к примеру, имя Павел, программа выводит на печать Привет Павел, как дела?. Пожалуйста, не забывайте, что + - единственная математическая операция , которая может использоваться при работе со строками.

## Может ли Черепашка делать вычисления?

Да, Черепашке под силу заниматься математическими вычислениями. Вы можете складывать (+), вычитать (-), умножать (*) и делить (/). Вот пример, демонстрирующий использование всех этих команд.

    a = 20 - 5
    b = 15 * 2
    c = 30 / 30
    d = 1 + 1
    напиши "a: "+a+", b: "+b+", c: "+c+", d: "+d

Знаете ли вы, какие значения примут a, b, c и d? Обратите внимание на использование символа присваивания `=`.

Если в программе вам нужно вычислить простое выражение, вы можете поступать следующим образом:

    напиши 2004-12

Вот пример с приоритетом вычисления:

    напиши ( ( 20 - 5 ) * 2 / 30 ) + 1

Выражение в скобках будет вычислено первым. В данном примере сначала будет получена разность 20 – 5, затем полученное значение будет умножено на 2, поделено на 30, и напоследок будет добавлена единица (результат равен 2).

## Задаём вопросы, получаем ответы...

В следующем разделе мы обсудим команды контроля выполнения `если` и `пока`. В этом разделе мы будем использовать команду `если` для объяснения вопросов.

### Вопросы

Простой пример с вопросом:

    x = 6
    если x > 5 [
      напиши "hello"
    ]

В данном примере вопросом является `x > 5`. Если будет получен ответ “истина” (true), будут выполнены команды в скобках. Вопросы - важная часть программирования. Чаще всего они используются вместе с операторами контроля, такими как если. Все числа и переменные (числовые контейнеры) могут сравниваться друг с другом с помощью вопросов.

Вот возможные вопросы:

#### Типы вопросов

`a == b` | равенство | ответ истина (true), если `a` равно `b`
`a != b` | неравенство | ответ истина (true), если `a` не равно `b`
`a > b` | больше | ответ истина (true), если `a` больше `b`
`a < b` | меньше | ответ истина (true), если `a` меньше `b`
`a >= b` | больше или равно | ответ истина (true), если `a` больше или равно `b`
`a <= b` | меньше или равно | ответ истина (true), если `a` меньше или равно `b`

Вопросы подсвечиваются (выделяются) голубым в редакторе кода.

### Вопросный клей

Вопросы также могут быть совмещены друг с другом с помощью вопросного клея. Это позволяет использовать несколько вопросов как один большой.

    a = 1
    b = 5
    если (a < 5) и (b == 5) [
      напиши "hello"
    ]

В этом вопросе “склеивающее слово” - `и`, оно используется, чтобы совместить два вопроса (a < 5, b==5) вместе. Если с одной стороны результатом будет ложь, то и ответ на весь вопрос будет ложь, потому, что с этим “склеивающим словом” обе стороны должны быть равны истина для получения ответа на весь вопрос истина.

Вот краткий обзор управляющих операторов, более детально они описаны ниже:

#### “Склеивающие слова” для вопросов

`и` | Обе стороны должны быть равны истина для получения ответа истина на весь вопрос.
`или` | Если хотя бы одна сторона равна истина, то и ответ будет истина.
`не` | Только если обе стороны ложь, ответ будет ложь.

Склеивающие слова подсвечиваются фиолетовым в редакторе кода.

#### и

Если вопросы соединяются при помощи `и`, для получения общего ответа "истина", они все должны быть истинными, например:

    a = 1
    b = 5
    если ((a < 10) и (b == 5)) и (a < b) [
      напиши "хм"
    ]

#### или

Если ответ хотя бы на один из вопросов - "истина", то и общий ответ будет таким же, например:

    a = 1
    b = 5
    если ((a < 10) или (b == 10)) или (a == 0) [
      напиши "хм"
    ]

#### не

Это специальная приставка, меняющая ответ на противоположный, например:

    a = 1
    b = 5
    если не ((a < 10) и (b == 5)) [
      напиши "хм"
    ]
    иначе
    [
      напиши "не хм ;-)"
    ]

В этом примере ответ на заданный вопрос - "истина", а приставка `не` изменяет это на "ложь", так что на холсте будет напечатано`"не хм ;-)"`.

## Контроль над выполнением

Управляющие операторы позволяют вам контролировать процесс выполнения (о чём говорит само их название).

Управляющие операторы выделяются тёмно-зелёным цветом и жирным начертанием шрифта. Квадратные скобки, используемые вместе с ними, выделяются светло-зелёным.

### Может ли Черепашка ждать?

Если вы уже немного попрактиковались в программировании в KTurtle, вы могли заметить, что Черепашка может рисовать чересчур быстро. Следующая команда позволяет избежать этого.

жди

      жди X

  `жди` указывает Черепашке подождать X секунд.

      повтори 36 [
        вперёд 5
        направо 10
        жди 0.5
      ]

  Данный код рисует круг, при этом после каждого шага Черепашка будет ждать пол секунды.Это создаёт впечатление неторопливого движения.

### Условное выполнение

если

      если вопрос [ ... ]

  Код, расположенный между скобками, будет выполнен только тогда, когда ответом на вопрос будет истина. Для более подробной информации прочитайте, пожалуйста, раздел Вопросы.

      x = 6
      если x > 5 [
        напиши "x больше пяти!"
      ]

  В первой строке контейнеру `x` присваивается 6. Во второй задаётся вопрос `x > 5`. Если ответом на него будет истина, управляющий оператор `если` позволит выполнить код, расположенный между скобками.

### Цикл "пока"

пока

      пока вопрос [ ... ]

  Управляющий оператор `пока` очень похож на `если`. Разница в том, что `пока` будет повторять код, расположенный между скобками, до тех пор, пока ответом на вопрос не станет ложь.

      x = 1
      пока x < 5 [
        вперёд 10
        жди 1
        x = x + 1
      ]

  В первой строке `x` присваивается 1. На второй строке задаётся вопрос `x < 5`. Так как ответ на этот вопрос - истина, оператор `пока` начнёт выполнять код между скобками, пока ответом на вопрос не станет ложь. В данном случае код между скобками будет выполнен 4 раза потому, что на каждом прогоне в пятой строке `x` будет увеличиваться на 1.

### "Иначе"

иначе

      если вопрос [ ... ] иначе [ ... ]

  Может быть дополнением к оператору условного выполнения `if`. Код между скобками, расположенными после `else` будет выполнен тогда, когда ответом на вопрос будет ложь.

      сброс
      x = 4
      если x > 5 [
        напиши "x больше пяти!"
      ]
      иначе
      [
        напиши "x меньше пяти!"
      ]

  `Если` ставит вопрос, больше ли `x` чем 5. Т.к. `x` равно 4, ответ на вопрос - ложь. Поэтому выполняется код в скобках после `иначе`.

### Считающий цикл "для"

для

      для начальное число до конечное число [ ... ]

  `Для` - это цикл со счётчиком.

      для x = 1 до 10 [
        напиши x * 7
        вперёд 15
      ]

  Каждый раз, когда выполняется код в скобках, значение `x` на 1, и так до тех пор, пока `x` не станет равным 10. Код в скобках выводит на печать произведение `x` и 7. После завершения выполнения программы вы увидите таблицу умножения на 7.

## Создавайте свои собственные команды!

`Выучи` - это особенная команда, потому что она предназначена для создания ваших собственных команд. Создаваемые вами команды могут принимать входные параметры и возвращать различные значения. Давайте посмотрим, как создаются собственные команды:

    выучи круг x [
      повтори 36 [
        вперёд x
        налево 10
      ]
    ]

Новая команда называется `круг`. Её входным параметром является число - размер круга. Теперь команду `круг` можно использовать как же, как и обычные команды:

    выучи круг X [
      повтори 36 [
        вперёд X
        налево 10
      ]
    ]

    иди 30,30
    круг 20

    иди 40,40
    круг 50

В следующем примере будет создана команда, возвращающая значение.

    сброс

    выучи квадрат_числа n [
      r = n * n
      верни r
    ]
    i = окно_вопроса "Введите число и нажмите OK"
    напиши i + ", помноженное на себя: " + квадрат_числа i

В данном примере создана новая команда с именем`квадрат_числа`. Ей передаётся число, а она возвращает его квадрат.