LEFTRIGHTUPDOWNMOVE {C} {R}READ {M} {D?}WRITE {M} {D?}INC {M} {N?}DEC {M} {N?}{M} = {expression}+-*/%( )VAR {V} = {expression}PROC {N}F{N} {A1?}{A2?}{A3?}IF {expression}ELSEELSE IF[ ]REPEAT {N?}WHILEBREAKRESTARTEXITRETURNPUSHPOP+, −, *, /, %, (, ) are supported.Главная цель Kidsprogramming – визуализировать выполнение написанного ребёнком кода. Визуализация улучшает понимание программирования на начальных этапах обучения.
Kidsprogramming предлагает обучение программированию через практику решения базовых задач.
Ребёнку предлагается запрограммировать поведение робота Байтика на квадратном поле 8 x 8. Робот умеет перемещаться по клеткам поля, а также считывать и записывать числа в клетки, тем самым собирая или оставляя различные предметы в клетках. Несмотря на небольшой размер поля на нём можно реализовать и визуализировать любые алгоритмы. Само поле можно представить как массив данных.
Kidsprogramming предлагает 20 заданий от простого к сложному. Через решения заданий ребёнок познакомится с базовыми кирпичиками программирования: алгоритм, условный оператор, цикл, процедура, переменная, массив, а также освоит базовые приёмы написания кода с помощью встроенного простого языка программирования. Этот язык прост и нагляден, но при этом похож на современные промышленные языки. Используя язык Kidsprogramming можно решить любую задачу программирования, даже самую сложную. Вооружившись полученным представлением и навыками ребёнок в дальнейшем сможет разобраться с любым современным промышленным языком программирования. Новые задания будут добавляться постепенно, у нас много идей!
Для успешного освоения программирования ребёнок обязательно должен буквально щупать код, менять программы и смотреть к чему это приводит, экспериментировать. В процессе обучения через визуализацию легче развивается абстрактное мышление - основное для программиста. Даже понимание, казалось бы, логичных вещей формируется через ощущения и закрепляется практикой. Помимо формирования базовых навыков и понятий Kidsprogramming позволяет ребёнку легко, наглядно и безопасно экспериментировать с кодом.
Важно!
Kidsprogramming обучает настоящему, а не игрушечному программированию: написанию настоящего кода для решения настоящих задач. Освоив программирование в Kidsprogramming ребёнку в дальнейшем не составит труда изучить промышленный язык программирования.
. Решайте задания последовательно, начиная с первого race. Задания расположены в порядке возрастания сложности.

в левой панели и сообщение об успешном решении задания.
либо знак
(если в процессе выполнения кода возникла ошибка, например деление на ноль).
. В студию загрузятся исходные данные этого теста. Можно разобраться что пошло не так и поправить код.
и выберите другое задание.Язык программирования Kidsprogramming очень прост и состоит всего из нескольких команд: LEFT RIGHT UP DOWN MOVE READ WRITE IF ELSE REPEAT WHILE BREAK RESTART RETURN EXIT PROC PUSH POP разделённых цветом на несколько групп.
Команды перемещения: LEFT RIGHT UP DOWN MOVE
Команды чтения / записи: READ WRITE
Команды для создания ветвления логики: IF ELSE
Команды для работы с циклом: REPEAT WHILE BREAK RESTART
Команды для работы с процедурами: PROC RETURN
Команды для работы со стеком: PUSH POP
Команды завершения программы: EXIT или (пустая команда)
Команды должны быть расположены построчно, каждая следующая команда на новой строке, например:
RIGHT
UP
LEFT
У команд могут быть аргументы. Аргументы команды всегда записываются после команды в той же строке, например:
READ A
RIGHT
A = A + B
WRITE B
здесь A это аргумент команды READ, B это аргумент команды WRITE, A + B это 3 аргумента команды A =.
Максимальное количество аргументов в строке: 3. Большинство команд поддерживают максимум 3 аргумента.
Логические или математические выражения часто требуют больше аргументов. В этом случае допустимо переносить аргументы на следующие строки, используя команды + или OR. Например:
A = R * 2
+ C / 2
или
IF X > 1
AND Y < 8
LEFT
END IF
Блоки кода
IF
{команды в блоке}
END IF
WHILE
{команды в блоке}
END WHILE
REPEAT
{команды в блоке}
END REPEAT
автоматически раскрашиваются в цвет чтобы выделятся для большей наглядности. Команды END выполняют только функцию ограничения блока кода.
Комментарий должен занимать минимум одну строку и быть заключен в фигурные скобки, например {команды в блоке}
Последняя строчка кода всегда пустая и служит маркером окончания программы.

Интерфейс студии состоит из двух панелей: левой и правой. В мобильном режиме панели переключаются с помощью свайпа.

Левая панель предназначена для редактирования кода, запуска программы на выполнение, генерации данных, и других функций.

В верхнем тулбаре содержатся кнопки для запуска программы на выполнение, генерации данных, отмены изменений, включения шпионского режима.
Чтобы начать или возобновить выполнение программы, нажмите кнопку «Старт».
Выполняет только одну команду и приостанавливает выполнение программы (ставит на паузу).
Чтобы остановить выполнение программы, нажмите кнопку «Стоп». Программа завершится автоматически, если достигнет пустой строки кода (как правило последней).
Чтобы приостановить выполнение программы, нажмите кнопку «Пауза». После паузы работу программы можно возобновить, нажав кнопку «Старт» или «Шаг».
Отменяет последнее изменение в коде программы после редактирования и возвращает предыдущую версию программы существовавшую до последнего изменения.
Возвращает последнее отменённое изменение в коде программы после отмены редактирования.
Добавляет пустую строчку наверх листинга.
Генерирует новые случайные данные для программы. Например, если задание состоит в том, чтобы найти яблоко сред груш, нажатие кнопки «Сгенерировать новый набор данных для задания» изменит позицию яблока в искомой строке поля. Таким образом можно генерируя новые уникальные данные и проверяя выполнение программы на разных исходных данных убедится в правильности работы программы при различных условиях.
Генерация нового набора данных заблокирована в режиме свободного творчества.
Раскрывает содержимое клеток поля. Например, если выбрано задание по поиску грибочка, вы сможете увидеть заранее в какой именно клетке поля он спрятался. Кнопка полезна для отладки программы и для упрощения разработки алгоритмов через визуальное представление исходных данных.
Скрывает содержимое клеток поля. Скрытый режим демонстрирует в каких слепых условиях работает типичная программа, когда, например, для поиска предмета ей приходится проверять клетку за клеткой без возможности посмотреть сразу всё поле, как это сделал бы человек. Также режим полезен для проверки алгоритмов на случайном наборе данных. Клетки, которые уже были посещены Байтиком, не скрываются.

Панель команд предназначена для редактирования кода и отладки программы. Панель состоит из строк с командами. Каждая строка поделена 6 на колонок:
Показывает какая конкретно команда сейчас выполняется или будет выполняться после паузы.
Указатель текущей команды может принимать дополнительные формы:
Выполнение завершено
Вы остановили выполнение программы, либо программа выполнилась полностью и остановилась. В следующий раз программа начнёт выполнятся с первой строки листинга. При клике на иконку откроется панель журнала.
Ошибка
В процессе выполнения данной команды произошла ошибка. Байтик пытался выполнить неверную операцию (например, попытался выйти за пределы поля), либо в команде указаны неверные аргументы. Детали ошибки можно будет найти в панели журнала. При клике на иконку откроется панель журнала.
Локальная проверка задания пройдена
Выполнившийся код решил задачу верно на текущем наборе данных. Если нажать на иконку, то появится окно с сообщением об успешном тесте и возможностью проверить задание на других данных или на сервере.
Локальная проверка задания не пройдена
Выполнившийся код решил задачу неверно. Результаты выполнения отличаются от ожидаемых. Если нажать на иконку ошибки, то появится окно со сравнением ожидаемого и полученного результатов.
Когда программа достигнет этой точки, выполнение программы поставится на паузу. Это полезно при отладке сложных программ, если вы хотите автоматически остановить программу на каком-то месте и посмотреть значения переменных в этот момент. Чтобы поставить точку останова кликните два раза на области с номером команды. Чтобы снять точку останова сделайте тоже самое ещё раз.
Открывает список с доступными командами или список с доступными значениями аргументов для выбранной команды.

Команды сгруппированы по назначению (группы выделены цветом). Каждая команда имеет свой условный символ (для наглядности).

У каждой команды есть свой список доступных аргументов и своё количество аргументов. Если кнопка выбора значения аргумента недоступна, значит команда не поддерживает аргумент с таким номером. Команды могут иметь до трёх аргументов включительно.
Например, команда MOVE имеет два обязательных аргумента: номер колонки и номер строки куда следует переместить Байтика. Команда LEFT не имеет аргументов. Команда IF имеет три аргумента. Команда READ имеет два аргумента: один обязательный, один не обязательный. Обязательные аргументы всегда расположены первыми.
Добавляет строчку для ввода команды ниже. Таким образом можно вставить новую команду в любое место листинга.
Удаляет строку листинга.
Потянув за эту иконку можно переместить строку в другое место листинга. Таким образом можно поменять команды местами.
Панель команд поддерживает редактирование кода с помощью клавиатуры. Кнопками навигации на клавиатуре можно перемещать фокус, устанавливая конкретную строку или колонку для редактирования.

Команда в фокусе
Если начать набирать текст на клавиатуре, команды и аргументы будут подставляться и добавляться автоматически в соответствии с набранными символами. Кроме символов текста поддерживаются следующие кнопки:
Строки команд можно выделять мышкой.
Если нажать правую кнопку мышки на строке команды или на группе выделенных строк, то можно вызвать контекстное меню команд.

Строки можно копировать, вырезать, вставлять, удалять, а также можно добавлять комментарии к строкам.
Чтобы добавить комментрий к строке необходимо нажать правую кнопку мыши на нужной строке, и в открывшемся меню выбрать пункт меню «Добавить комментарий».

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

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

Нижний тулбар показывает результат вычисления логического условия («истина» или «ложь»), содержимое регистров A и B, текущую позицию Байтика.
Имеет два состояния: поднятый, опущенный.
Поднятый флаг свидетельствует о том, что последнее вычисленное условие в командах IF или WHILE истинно.
Опущенный флаг свидетельствует о том, что последнее вычисленное условие в командах IF или WHILE ложно.
A
Отображает содержимое регистра А (число).
B
Отображает содержимое регистра B (число).
C
Отображает текущую позицию Байтика по горизонтали (номер колонки)
R
Отображает текущую позицию Байтика по вертикали (номер строки)

В правой панели находится поле 8x8, по клеткам которого может перемещаться Байтик; тулбар работы с листингами и кнопки вызова вспомогательных панелей: панели выбора задачи, панели стека и панели журнала.
8x8В правой панели находится поле 8x8. Все задачи состоят в том чтобы так или иначе запрограммировать алгоритм действий Байтика над клетками этого поля. Байтик может перемещаться по клеткам поля, а также читать и записывать числа (коды) в клетки. Выходить за рамки поля 8x8 Байтику нельзя. При попытке выйти за пределы поля программа остановится и выдаст ошибку.
Поле имеет два состояния: скрытое и открытое. В скрытом режиме содержимое клеток не видно до тех пор, пока их не посетит Байтик. Клетки поля открываются кнопкой «Включить шпионский режим» в верхнем тулбаре левой панели.
Клетки могут хранить числа, текст, и иконки, представленные своими кодами.
Каждая клетка поля пронумерована и имеет свой адрес, состоящий из двух чисел: номер колонки и номер строки. Нумерация начинается с 1.

В открытом режиме мы видим содержимое всех клеток поля.

В скрытом режиме мы видим содержимое только тех клеток поля, которые посетил Байтик.
Отображает позицию Байтика в данный момент выполнения программы.
Закрытая клетка отображается оранжевым цветом. Её содержимое неизвестно. Она может быть как пустой, так и может хранить что-то внутри.
Клетка открыта, её содержимое видно.
Если открытая клетка пуста, то она отобразится светло жёлтым цветом.
Клетка, которую уже посетил Байтик всегда открыта. Чтобы открыть клетку достаточно поместить Байтика на неё (команды LEFT RIGHT UP DOWN MOVE). Байтик и программа всё ещё не будут знать содержимое этой клетки (для этого содержимое клетки нужно прочитать командой READ), но Вы увидите, что там находится. Посещённая клетка имеет белый фон.
Пустая посещённая клетка.
Закрывает Студию.
Открывает панель Журнала. В Журнал выводятся результаты выполнения команд, ошибки, а также результат выполнения задания. По журналу можно отследить последовательность выполнения команд и какие фактические аргументы были ими использованы. Журнал полезен для отладки.
Открывает стек-панель для просмотра значений переменных и стека.
Открывает список иконок для выбора вида Байтика. Байтик может принимать вид робота, яблочка, грибочка, манипулятора, кораблика и т.д.

Выбирает скорость выполнения команд. Скорость регулируется от x1 до x9. Нормальная скорость x4. Чтобы программа выполнялась быстрее нужно выбрать число побольше. Чтобы внимательнее рассмотреть этапы выполнения программы, можно замедлить интерпретатор, установив число поменьше. Кнопка переключает скорость по кругу.
В клетке может сдержаться число, буква, или иконка. Каждая буква или иконка имеет свой цифровой код. При записи этого кода (числа) в клетку, в клетке появится соответствующая коду буква или картинка. При чтении значения из клетки, когда в клетку записано число, буква или картинка, всегда прочитается их числовой код. Что именно появится в клетке при записи числового кода (число, буква, или картинка) зависит от выбранного режима чтения/записи.
Режим чтения/записи задаётся авторами задания и недоступен для изменения, если выбрано конкретное задание. В режиме свободного творчества режим чтения/записи можно менять самостоятельно.
![]()
Клетки поля в режиме чтения/записи иконок (
)

Клетки поля в режиме чтения/записи чисел (
)

Клетки поля в режиме чтения/записи букв (
)

Нижний правый тулбар предназначен для выбора заданий, а также сохранения и выбора сохранённых листингов.
Открывает панель с заданиями.
Открывает диалог выбора ранее сохраннёных листингов.
Сохраняет листинг. Если Вы хотите сохранить копию листинга под другим именем, тонужно задать листингу другое имя, а затем нажать эту кнопку.
Создаёт новый несохранённый листинг. При этом очищается панель команд и сбрасывается текущее задание.
Для того чтобы сохранить программу нужно задать имя файлу/листингу
Показывает название выбранного для решения задания. В режиме свободного творчества показывается пустым.
Позволяет выбрать задание для решения или выбрать режим свободного творчества. Задания расположены от простого (race) к сложному (store). Решайте задания последовательно, одно за другим и зарабатывайте монстриков (умения) и баллы в чемпионате.
В панели отображается список доступных для выполнения заданий. Их можно переключать и смотреть их описание с подробным объяснением и примерами что именно нужно сделать.
Чтобы выбрать задание для выполнения нужно нажать кнопку «Выбрать задание». Задание будет автоматически проверятся по окончании выполнения программы (после каждого запуска по кнопке «Старт»). Проверка задания осуществляется только для тех исходных данных, на которых программа была запущена. Чтобы сгенерировать новый набор данных, нажмите «Сгенерировать новый набор данных». Всесторонняя проверка возможна только при нескольких запусках решения на различных наборах данных, учитывающих разные случаи.
Если вы хотите поэкспериментировать в свободном формате, нужно выбрать режим свободного творчества в списке заданий. Этот режим позволяет:
В режиме свободного творчества можно писать любой код по своему усмотрению решая исследовательские задачи, выдумывая задачи самостоятельно или просто развлекаясь. Чтобы Байтик мог работать с данными в клетках поля их можно заполнить вручную любыми данными (в зависимости от выбранного режима чтения/записи).

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

Если программа отработала на данном наборе данных верно, появится зелёное окошко.

Если программа отработала на данном наборе данных неверно, указатель команды примет форму иконки
, но диалог автоматически не появится. Чтобы вызвать диалог с результатом выполнения, нужно нажать на эту иконку указателя команды. При нажатии появится жёлтое окошко со сравнением полученных и ожидаемых результатов.
В окошке Вы увидите текстовое сообщение чёрным шрифтом что именно нужно было сделать, ссылку на подсказку, а также сравнение полученных и ожидаемых результатов.

Ожидается определённое состояние флага: поднят или опущен.

Ожидается определённое значение в регистре.

Ожидаются определённые значения в клетках поля.

Ожидается перемещение Байтика по определённым клеткам поля (белым). Также ожидается что Байтик займёт определённую клетку поля. Ожидаемая позиция Байтика показана полупрозрачной иконкой.

Ожидается что Байтик не попадёт на определённые клетки поля (серые).
Если Вы уверены в правильности работы программы, её необходимо загрузить на сервер для выполнения автоматической слепой проверки. Запустится всесторонний тест на различных наборах данных, который определит правильность выполнения задания. Если все тесты пройдены, задание будет засчитано и Вам начислятся баллы за его решение.

Если во время автоматической слепой проверки какой либо из тестов завершён некорректно, решение засчитано не будет. Нажав кнопку
можно загрузить исходные данные, на которых тест был выполнен и разобраться почему программа отработала на них некорректно.
Отображает состояние переменных и стека.
Если Вам не хватает регистров А и B для хранения информации Вы можете объявить переменные с помощью команды VAR.

Объявленные переменные отображаются ярким цветом. Их можно использовать в программе: записывать в них значения и читать из них значения.

Необъявленные переменные отображаются бледным цветом. Они недоступны для использования в программе.
PROC
Показывает значения аргументов и служебной информации, передаваемых в процедуры при их вызове. Может использоваться при отладке динамических программ, использующих рекурсию. Непосредственно в процедурный стек записывать и считывать значения нельзя. Имеет лимит 768 сохраняемых значений.
STACKУстроен точно также как процедурный стек, но используется для пользовательских нужд. В пользовательский стек можно сохранять значения с помощью команды PUSH, а считывать с помощью команды POP. Стрелка
указывает на вершину стека. Имеет лимит 64 сохраняемых значений.
LEFTПеремещает Байтика на одну клетку влево
RIGHTПеремещает Байтика на одну клетку вправо
UPПеремещает Байтика на одну клетку вверх
DOWNПеремещает Байтика на одну клетку вниз
MOVE {C} {R}Перемещает Байтика на колонку C строки R
READ {M} {D?}Читает значение клетки поля, на которой сейчас находится Байтик, и помещает прочитанное значение в ячейку памяти {M}. Если указан необязательный аргумент {D?}, то после чтения Байтик сместится на одну клетку влево L, вправо R, вверх U, или вниз D.
READ A
Если Байтик находится на клетке поля со значением 1, то в результате выполнения этой команды в регистр A запишется 1. 1 это код значения фактически записанного в клетку. В зависимости от выбранного режима чтения/записи этот код может представлять определённую иконку или букву.
READ B R
Если Байтик находится на клетке поля 4,4 со значением 2, то в результате выполнения этой команды в регистр B запишется 2, а Байтик сместится вправо на клетку 5,4.
READ X U
Если Байтик находится на пустой клетке поля 4,4, то в результате выполнения этой команды в переменную X запишется 0, а Байтик сместится вверх на клетку 4,5.
WRITE {M} {D?}Записывает значение из ячейки памяти {M} в клетку поля, на которой сейчас находится Байтик. Если указан необязательный аргумент {D?}, то после записи Байтик сместится влево L, вправо R, вверх U, или вниз D.
WRITE B
Если Байтик находится на клетке поля 4,4, а значение в регистре B равно 2, то в результате выполнения этой команды в клетку поля 4,4 запишется 2. В клетке появится иконка или буква (в зависимости от выбранного режима чтения/записи) соответствующая коду 2.
WRITE X R
Если Байтик находится на клетке поля 4,4, а значение в переменной X равно 5, то в результате выполнения этой команды в клетку поля 4,4 запишется 5, а Байтик сместится вправо на клетку 5,4.
WRITE A D
Если Байтик находится на клетке поля 4,4, а значение в регистре A равно 0, то в результате выполнения этой команды в клетку поля 4,4 запишется 0 (т.е. содержимое клетки поля сотрётся), а Байтик сместится вниз на клетку 4,3.
INC {M} {N?}Увеличивает значение в ячейке памяти {M} на значение в ячейке памяти {N?}. Если аргумент {N?} не указан, значение в {M} увеличивается на 1 (единицу).
INC A
Эта команда увеличит значение в A на 1. Если значение в регистре A равно 1, после выполнения этой команды значение в А станет равно 2.
INC B 2
Эта команда увеличит значение в B на 2. Если значение в регистре B равно 3, после выполнения этой команды значение в B станет равно 5.
INC A B
Эта команда увеличит значение в A на значение в B. Если значение в регистре A равно 1, а значение в регистре B равно 2, то после выполнения этой команды значение в A станет равно 3.
DEC {M} {N?}Уменьшает значение в ячейке памяти {M} на значение в ячейке памяти {N?}. Если аргумент {N?} не указан, значение в {M} уменьшается на 1 (единицу).
DEC A
Эта команда уменьшит значение в A на 1. Если значение в регистре A равно 1, то после выполнения этой команды значение в А станет равно 0.
DEC B 2
Эта команда уменьшит значение в B на 2. Если значение в регистре B равно 3, то после выполнения этой команды значение в B станет равно 1.
DEC A B
Эта команда уменьшит значение в A на значение в B. Если значение в регистре A равно 5, а значение в регистре B равно 2, то после выполнения этой команды значение в A станет равно 3.
{M} = {expression}Вычисляет выражение {expression} и записывает вычисленное значение в ячейку памяти {M}. Результатом выражения всегда является число.
A = 2
Записывает 2 в регистр А
B = 2 + 3
Вычисляет 2 + 3 и записывает результат 5 в регистр B
A = B – 7
Если значение в регистре B равно 9, то после выполнения этой команды значение в регистре А станет равно 2.
+A = 2 + X
Если значение в переменной X равно 1, то после выполнения этой команды значение в регистре А станет равно 3.
-A = A - 3
Если значение в регистре А равно 5, то после выполнения этой команды значение в регистре А станет равно 2.
*B = A * 3
Если значение в регистре А равно 3, то после выполнения этой команды значение в регистре B станет равно 9.
/B = A / B
Если значение в регистре А равно 6, а значение в регистре B равно 2, то после выполнения этой команды значение в регистре B станет равно 3.
X = A / B
Если значение в регистре А равно 5, а значение в регистре B равно 2, то после выполнения этой команды значение в переменной X станет равно 2.
%B = A % B
Если значение в регистре А равно 6, а значение в регистре B равно 2, то после выполнения этой команды значение в регистре B станет равно 0.
X = A % B
Если значение в регистре А равно 5, а значение в регистре B равно 2, то после выполнения этой команды значение в переменной X станет равно 1.
Сначала вычисляются выражения в скобках. Следующим приоритетом обладают операции умножения и деления. Последним приоритетом обладают операции сложения и вычитания. Операции с одинаковым приоритетом вычисляются слева направо.
Пример:
3 % 5 * 4 / 2 - 5 + 2 * 1
Выражение вычислится в следующей последовательности:
(3 % 5 * 4 / 2) - 5 + (2 * 1)
3 % 5 = 3
3 * 4 = 12
12 / 2 = 6
2 * 1 = 1
6 - 5 + 1 = 2
( )Круглые скобки задают приоритет операций и формируют подвыражения.
X = 2 *
(
+ A + B
)
Вычисляет значение выражения 2 * (A + B) и записывает результат в переменную X. Сначала вычисляется выражение в скобках (A + B), а затем полученный результат умножается на 2. Итоговое значение записывается в переменную X. Если значения регистров A = 2, B = 3, то вычислит X = 10. Для формирования длинных выражений необходимо пользоваться переносом аргументов на другие строки.
Внимание!
Знак
+передAв скобках+ A + Bобязателен, так как в каждой строке наличие команды обязательно, и команда обязательно должна быть первой. При переносе выражения на строку ниже, мы всё равно обязаны начать следующую строку с команды. В данном случае+это команда. Находясь первыми внутри скобок команды+,*,/,%игнорируются, то есть не участвуют в вычислениях и просто обозначают продолжение выражения.
X = 8 -
(
(
+ A + B
)
/
(
+ A - B
)
)
Вычисляет значение выражения 8 - ((A + B) / (A - B)) и записывает результат в переменную X. Сначала вычисляются выражения во внутренних скобках (A + B) и (A - B), затем вычисляется целочисленное деление /, затем вычитание из 8, и итоговое значение записывается в переменную X. Если значения регистров A = 3, B = 2, то вычислит это выражение в следующей последовательности:
X = 8 - ((3 + 2) / (3 - 2))
X = 8 - (5 / 1)
X = 8 - 5
X = 3
Ещё один пример выражения:
X = 7 +
(
(
- 2 + B
)
/
(
- 2 + A
)
)
Вычисляет значение выражения 7 + ((-2 + B) / (-2 + A)) и записывает результат в переменную X. Сначала вычисляются выражения во внутренних скобках (-2 + B) и (-2 + A), затем вычисляется целочисленное деление /, затем сложение + с 7, и итоговое значение записывается в переменную X. Если значения регистров A = 3, B = 4, то вычислит это выражение в следующей последовательности:
X = 7 + ((-2 + 4) / (-2 + 3))
X = 7 + (2 / 1)
X = 7 + 2
X = 9
Внимание!
Знак
-перед2в скобках НЕ игнорируется. Знак минус-обозначает и продолжение выражения после переноса, и делает число2отрицательным (-2).
VAR {V} = {expression}Объявляет и инициализирует переменную {V}. По умолчанию в программе всегда доступны только регистры A и B. Их не нужно объявлять. Переменные X Y I J V W не доступны по умолчанию и должны быть объявлены для использования. Команда VAR объявляет интерпретатору о необходимости выделить дополнительную память для хранения данных.
VAR X
Объявляет переменную X и записывает в неё 0. После обьявления переменная X доступна для чтения и записи другими командами.
VAR Y = 1
Объявляет переменную Y и записывает в неё 1. После обьявления переменная Y доступна для чтения и записи другими командами.
VAR J = A
Объявляет переменную J и записывает в неё значение из регистра A. Если в регистре A было записано 3, то значение в переменной J будет равно 3. После обьявления переменная J доступна для чтения и записи другими командами.
VAR V = A + 1
Объявляет переменную V и записывает в неё значение выражения A + 1. Если в регистре A было записано 1, то значение в переменной V будет равно 2. После обьявления переменная V доступна для чтения и записи другими командами.
VAR I =
+ A - 3
* B + 1
Объявляет переменную I и записывает в неё значение выражения A - 3*B + 1. Если регистры A = 8, B = 2, то значение в переменной I будет равно 3. После обьявления переменная I доступна для чтения и записи другими командами.
Внимание!
Знак
+передAобязателен, так как в каждой строке наличие команды обязательно, и команда обязательно должна быть первой. В данном случе знак+используется для переноса длинного выражения на следующую строку и формирования многострочного выражения. Тем не менее интерпретатор воспринимает это выражение в одну строкуA - 3*B + 1, а знак+передAигнорируется. Вместо знака+можно использовать знаки*,/,%. Знак-поменяет знакA, и сделает его отрицательным, если оно было положительным.
PROC {N}Объявляет процедуру с именем {N}. Доступны имена F1 F2 F3 F4 F5 F6 F7 F8 F9. Код, написанный в процедуре можно вызывать неоднократно из любого места программы, в том числе и из самой процедуры (такой вызов называется рекурсивным). В процедуре можно использовать для чтения 3 дополнительные переменные A1,A2,A3 – аргументы процедуры. Для того чтобы использовать аргументы, они должны быть переданы в процедуру при её вызове. Код внутри процедуры имеет свой собственный контекст: интерпретатор создаёт копии регистров A и B для каждого вызова процедуры. Изменение регистров A и B внутри вызванной процедуры не отражается на их значениях в других процедурах и главном коде. Переменные X Y I J V W, в отличие от регистров A B, являются глобальными. Изменение значений переменных X Y I J V W внутри кода вызванной процедуры приводит к их изменению в других процедурах и главном коде.
PROC F1
X = 0
Y = 0
END PROC
Объявлена процедура F1, которая очищает переменные X и Y – записывает в них 0.
PROC F2
X = A1 + A2
X = X + A3
END PROC
Объявлена процедура F2, которая записывает в переменную X сумму трёх своих аргументов. Сначала суммируются аргументы A1 и A2, а результат записывается в переменную X, затем к X прибавляется значение третьего аргумента A3 и общий результат записывается в переменную X.
PROC F3
INC A 2
END PROC
Процедура F3 увеличивает значение регистра A на 2, но это никак не влияет на регистр A вне вызова этой процедуры, так как при каждом вызове процедуры для неё создаётся её собственный контекст.
F{N} {A1?}{A2?}{A3?}Вызывает объявленную процедуру. Место объявления в коде не важно. Процедура может быть объявлена как до, так и после вызова. При вызове процедуры в неё можно передать до 3х аргументов включительно. Передавать аргументы {A1?}{A2?}{A3?} при вызове процедуры не обязательно. Необходимость передачи аргументов зависит от логики самой процедуры.
F1
Вызывает и выполняет процедуру F1
F2 1 2 3
Вызывает и выполняет процедуру F2, передавая в неё значения 1 2 3 в качестве аргументов.
F3 A B
Вызывает и выполняет процедуру F3, передавая в неё копии значений из регистров A и B в качестве аргументов.
PROC F1
X = A1 + A2
X = X + A3
END PROC
A = 1
F1 A 2 3
Запишет в переменную X сумму A + 2 + 3, или 1 + 2 + 3, т.е. X = 6.
При каждом вызове процедуры для неё создаётся её собственный контекст с копиями регистров A и B.
A = 1
F1
B = A
PROC F1
INC A 2
END PROC
Сначала в A записывается 1. Потом вызывается процедура F1, которая увеличивает A на 2. Но в процедуре F1 существует свой собственный контекст (иными словами - своя собственная копия A) и A внутри процедуры равно 0. В результате выполнения INC A 2 в A записывается 2. Программа выходит из процедуры и выполняет команду B = A, которая копирует значение A в B. Вне вызова процедуры, в главном коде, существует свой собственный контекст и своя собственная копия регистра A. В B записывается значение 1, так как значение в регистре A вне процедуры было равно 1. Т.е. процедура выполнялась в своём собственном контексте и когда код вышел из процедуры, контекст вызова этой процедуры восстанавился. Т.е. исходное значение которое было записано в A до вызова процедуры восстанавливается.
VAR X = 1
F3
B = X
PROC F3
INC X 2
END PROC
В данном примере вместо регистра A используется переменная X. Результат будет другой. В переменную X действительно запишется значение 3, так как переменные X Y I J V W являются глобальными, и в отличие от регистров A и B, для них не создаётся копий на каждый вызов процедуры.
IF {expression}Условный оператор. Вычисляет логическое выражение {expression}. Если выражение истинно, выполняет код внутри блока IF. Если выражение ложно, игнорирует код внутри блока IF. Используется для создания ветвления логики в программе.
IF A > 1
LEFT
END IF
Если значение в А больше 1, то Байтик сместится влево. Например, если А = 3, то Байтик сместится.
Если A = 0 – не сместится
Если A = 1 – не сместится
Если A = 2 – сместится
ELSEВыполняет код в своём блоке, когда условие, заданное в IF, ложно.
IF A > 1
LEFT
ELSE
RIGHT
END IF
Если значение в А больше 1 то Байтик сместится влево, иначе сместится вправо. Например, если A = 3, то Байтик сместится влево
Если A = 0 – сместится вправо
Если A = 1 – сместится вправо
Если A = 2 – сместится влево
IF A ≥ 2
LEFT
ELSE
RIGHT
END IF
Если значение в А больше или равно 2, то Байтик сместится влево, иначе сместится вправо. Например если A = 3, то Байтик сместится влево.
Если A = 0 – сместится вправо
Если A = 1 – сместится вправо
Если A = 2 – сместится влево
Если A = 3 – сместится влево
ELSE IFДобавляет проверку дополнительного условия в ELSE
IF A = 0
LEFT
ELSE IF A = 1
RIGHT
ELSE IF A = 2
UP
ELSE
DOWN
END IF
Данный код смещает Байтика вниз если A = 3 или больше.
Если A = 0 – сместится влево
Если A = 1 – сместится вправо
Если A = 2 – сместится вверх
Если A = 3 – сместится вниз
Если A = 4 – сместится вниз
Данный код эквивалентен следующему:
IF A = 0
LEFT
ELSE
IF A = 1
RIGHT
ELSE
IF A = 2
UP
ELSE
DOWN
END IF
END IF
END IF
Выражение, в котором сравниваются числа. Результатом логического выражения всегда является либо ИСТИНА, либо ЛОЖЬ.
<Меньше
1 < 2 - ИСТИНА
1 < 1 - ЛОЖЬ
2 < 1 - ЛОЖЬ
>Больше
2 > 1 - ИСТИНА
1 > 1 - ЛОЖЬ
1 > 2 - ЛОЖЬ
≤Меньше или равно. Альтернативное написание <=
1 ≤ 2 - ИСТИНА
2 ≤ 2 - ИСТИНА
2 ≤ 1 - ЛОЖЬ
≥Больше или равно. Альтернативное написание >=
2 ≥ 1 - ИСТИНА
2 ≥ 2 - ИСТИНА
1 ≥ 2 - ЛОЖЬ
=Равно
2 = 2 - ИСТИНА
2 = 1 - ЛОЖЬ
≠Не равно. Альтернативное написание <>
2 ≠ 1 - ИСТИНА
2 ≠ 2 - ЛОЖЬ
ANDЛогическое И. Логическое условие истинно, если составляющие его подвыражения истинны.
| Подвыражение 1 | Подвыражение 2 | Результат |
|---|---|---|
| Истина | Истина | Истина |
| Истина | Ложь | Ложь |
| Ложь | Истина | Ложь |
| Ложь | Ложь | Ложь |
IF C > 0
AND C < 9
WRITE 1
END IF
В текущую клетку запишется 1, только если С > 0 И C < 9, например:
| Значение C | С > 0 |
C < 9 |
Результат | Действие |
|---|---|---|---|---|
| 0 | Ложь | Истина | Ложь | Не выполнится |
| 1 | Истина | Истина | Истина | Выполнится |
| 2 | Истина | Истина | Истина | Выполнится |
| 3 | Истина | Истина | Истина | Выполнится |
| 4 | Истина | Истина | Истина | Выполнится |
| 5 | Истина | Истина | Истина | Выполнится |
| 6 | Истина | Истина | Истина | Выполнится |
| 7 | Истина | Истина | Истина | Выполнится |
| 8 | Истина | Истина | Истина | Выполнится |
| 9 | Истина | Ложь | Ложь | Не выполнится |
ORЛогическое ИЛИ. Логическое условие истинно, если хотя бы одно составляющее его подвыражение истинно.
| Подвыражение 1 | Подвыражение 2 | Результат |
|---|---|---|
| Истина | Истина | Истина |
| Истина | Ложь | Истина |
| Ложь | Истина | Истина |
| Ложь | Ложь | Ложь |
IF C = 1
OR C = 8
WRITE 1
END IF
В текущую клетку запишется 1, если С = 1 ИЛИ C = 8, например:
| Значение C | С = 1 |
C = 8 |
Результат | Действие |
|---|---|---|---|---|
| 0 | Ложь | Ложь | Ложь | Не выполнится |
| 1 | Истина | Ложь | Истина | Выполнится |
| 2 | Ложь | Ложь | Ложь | Не выполнится |
| 3 | Ложь | Ложь | Ложь | Не выполнится |
| 4 | Ложь | Ложь | Ложь | Не выполнится |
| 5 | Ложь | Ложь | Ложь | Не выполнится |
| 6 | Ложь | Ложь | Ложь | Не выполнится |
| 7 | Ложь | Ложь | Ложь | Не выполнится |
| 8 | Ложь | Истина | Истина | Выполнится |
| 9 | Ложь | Ложь | Ложь | Не выполнится |
Сначала вычисляются выражения в скобках. Следующим приоритетом обладают операции логического И. Последним приоритетом обладают операции логического ИЛИ. Операции с одинаковым приоритетом вычисляются слева направо.
Пример:
5 > 1 AND 5 < 4 OR 2 > 1 AND 2 < 4
Выражение вычислится в следующей последовательности:
(5 > 1 AND 5 < 4) OR (2 > 1 AND 2 < 4)
(ИСТИНА AND ЛОЖЬ) OR (ИСТИНА AND ИСТИНА)
(ЛОЖЬ) OR (ИСТИНА)
ИСТИНА
Результат выражения - ИСТИНА.
[ ]Квадратные скобки задают приоритет логических операций и формируют подвыражения.
IF A = 1
AND
[
AND A ≠ B
]
END IF
Задаёт логическое выражение A = 1 AND [A ≠ B] для условного оператора. Сначала вычисляется подвыражение в скобках [A ≠ B], затем операция логического И с подвыражением A = 1. Если значения регистров A = 2, B = 3, то условие ложно. Если значения регистров A = 1, B = 0, то условие истинно.
Внимание!
Операторы
ANDиORв скобках в начале выражения[AND A ≠ B]обязателены, но игнорируются. В каждой строке наличие команды обязательно, и команда обязательно должна быть первой. При переносе выражения на следующую строку мы всё равно обязаны начать следующую строку с команды. В данном случаеAND(илиOR)находясь первыми внутри скобок игнорируются, и просто обозначают продолжение многострочного условного выражения на следующей строке.
IF
[
[
AND C = 1
AND R = 2
]
OR
[
AND C = 2
AND R = 1
]
]
END IF
Задаёт логическое выражение [[C = 1 AND R = 2] OR [C = 2 AND R = 1]] для условного оператора. Сначала вычисляются выражения во внутренних скобках [C = 1 AND R = 2] и [C = 2 AND R = 1], затем выполняется операция логического ИЛИ между двумя подвыражениями. Если значения регистров С = 1, R = 2, то выражение истинно. Если значения регистров С = 2, R = 1, то выражение истинно. Если значения регистров С = 3, R = 1, то выражение ложно.
VAR X =
[
[
AND C = 1
AND R = 2
]
OR
[
AND C = 2
AND R = 1
]
]
END IF
Вычисляет логическое выражение [[C = 1 AND R = 2] OR [C = 2 AND R = 1]] и присваивает результат переменной X. Сначала вычисляются выражения во внутренних скобках [C = 1 AND R = 2] и [C = 2 AND R = 1], затем выполняется операция логического ИЛИ между двумя выражениями. Если значения регистров С = 1, R = 2, то выражение истинно и в X записывается 1. Если значения регистров С = 2, R = 1, то выражение истинно и в X записывается 1. Если значения регистров С = 3, R = 1, то выражение ложно и в X записывается 0.
| Логическое выражение | Значение |
|---|---|
| Ложь | 0 |
| Истина | 1 |
REPEAT {N?}Повторяет код в своём блоке N раз. Если N не указано, код будет повторятся бесконечно.
REPEAT 7
RIGHT
END REPEAT
Выполнит команду RIGHT 7 раз, т.е. сместит Байтика до последней (8й) колонки.
REPEAT A
IF C < 8
RIGHT
END IF
END REPEAT
Повторит код A раз. Если A = 8, то выполнит код 8 раз.
WHILEПовторяет код пока выполняется условие, записанное в WHILE (то есть пока условие истинно). Команда по сути представляет из себя команду IF, которая повторяет код внутри блока до тех пор, пока условие не станет ложным (или, другими словами, прекращает повторение блока тогда, когда условие стало ложным). Для того чтобы код не зациклился навсегда, необходимо чтобы в условии была задействована переменная/регистр, которая меняется внутри блока.
WHILE R < 8
UP
END WHILE
Допустим изначально Байтик находился на клетке поля 1,1. Сначала проверяется условие R < 8. Так как Байтик находится в строке 1, то условие – истинно (1 < 8). Байтик перемещается на одну клетку вверх (команда UP). Теперь R = 2 (так как Байтик переместился на одну строку вверх). Теперь снова проверяется условие R < 8. R всё ещё меньше 8 (R = 2) - условие истинно. Байтик снова перемещается вверх. Так происходит до тех пор, пока Байтик не достигнет седьмой строчки (R = 7). Условие выполнится (7 < 8), Байтик переместится вверх (на восьмую строчку, R = 8), и при следующей проверке условия, окажется что оно ложно (8 < 8) – ложь. Блок внутри WHILE не выполнится, и выполнение программы продолжится со следующей после END WHILE команды.
WHILE A < 8
INC A 2
END WHILE
Программа увеличивает значение в регистре А до тех пор, пока оно не станет больше или равно 8.
Цикл будет выполнятся до тех пор пока A < 8. На каждой итерации A увеличивается на 2.
| Значение A | Условие | Итерация | Значение A после итерации |
|---|---|---|---|
0 |
0 < 8 |
выполняется | 2 |
2 |
2 < 8 |
выполняется | 4 |
4 |
4 < 8 |
выполняется | 6 |
6 |
6 < 8 |
выполняется | 8 |
8 |
8 < 8 |
не выполняется | 8 |
BREAKПрерывает цикл. Команда полезна для того чтобы преждевременно прервать цикл, до проверки его основного условия.
REPEAT 8
IF C = 8
BREAK
END IF
RIGHT
END REPEAT
Цикл выполняется 8 раз, смещая каждый раз Байтика вправо. На 8й итерации Байтик уже находится на 8й колонке поля. Условие C = 8 истинно, команда BREAK выполняется, цикл прерывается, не выполнив команду RIGHT 9й раз (это привело бы к попытке выхода Байтика за границы поля и ошибке).
WHILE С < 8
RIGHT
READ B
IF B = 1
BREAK
END IF
END WHILE
Программа проверяет все клетки строки и завершается при одном из следующих условий:
8 (С < 8 ложно)B = 1RESTARTНачинает цикл заново. Цикл начинается с проверки условия.
REPEAT 7
IF A = 1
WRITE 2 R
A = 0
RESTART
END IF
WRITE 4 R
A = 1
END REPEAT
WRITE 2 U
Программа записывает поочерёдно числа 2 и 4 во все клетки первой строки поля. Цикл выполяется 7 раз. Сначала в текущую клетку поля записывается 4, Байтик смещается вправо и устанавливается флаг того, что записалось число 4 (A = 1). На следующей итерации цикла срабатывает условие A = 1, означающее, что на предыдущей итерации записалось число 4. Значит, сейчас нужно записать число 2. Записывается 2, Байтик смещается вправо, флаг сбрасывается (A = 0), и цикл начинается заново (RESTART), не доходя до команды WRITE 4 R. Когда Байтик достигает последней клетки, цикл завершается. В последнюю клетку поля записывается 2. В процессе выполнения переменные и регистры будут меняться следующим образом:
C |
A |
запись |
|---|---|---|
1 |
0 |
4 |
2 |
1 |
2 |
3 |
0 |
4 |
4 |
1 |
2 |
5 |
0 |
4 |
6 |
1 |
2 |
7 |
0 |
4 |
8 |
1 |
2 |
EXITЗавершает выполнение программы. Программа завершается, когда интерпретатору попадается пустая строка без команды, или команда EXIT. Последняя строка программы всегда пустая и означает её окончание. Если требуется завершить программу где-то в середине основного кода, можно воспользоваться командой EXIT.
READ A
IF A = 8
EXIT
END IF
WRITE 2
Программа читает значение в текущей клетке поля. Если значение равно 8, программа завершается. Если условие A = 8 ложно, программа выполнится дальше и запишет в клетку число 2 (т.е. перепишет 8 на 2 в текущей клетке).
PROC F1
READ A
IF A = 8
EXIT
END IF
END PROC
F1
WRITE 2
Программа читает значение в текущей клетке поля. Если значение равно 8, программа завершается. Если условие A = 8 ложно, программа выполнится дальше и запишет в клетку число 2 (т.е. перепишет 8 на 2 в текущей клетке).
Внимание!
Команда
EXITзавершает всю программу, даже если вызывается в процедуре. Если вам нужно завершить только процедуру, используйте командуRETURN
RETURNЗавершает выполнение процедуры, в которой вызвана. После завершения процедуры, вызвавший процедуру код продолжает выполняться.
PROC F1
READ A
IF A = 8
RETURN
END IF
WRITE 2
END PROC
F1
READ A
Программа читает значение в текущей клетке поля. Если значение равно 8, процедура F1 завершается. Если условие A = 8 ложно, процедура выполнится дальше и запишет в клетку число 2 (т.е. перепишет 8 на 2 в текущей клетке). После завершения процедуры значение из текущей клетки поля читается в регистр A.
PUSHПомещает значение на вершину стека. Команда полезна для последовательного запоминания состояния программы или создания собственного контекста в процессе выполнения. Чаще всего команда используется при построении динамических программ, с раходящимся количеством ветвлений логики. Например, при быстрой сортировке мы должны помнить границы сортируемого массива, а на каждой итерации количество запоминаемых границ удваивается.
После помещения значения в стек счётчик стека (регистр S) увеличивается на 1. Счётчик стека показывает заполненность стека. Максимально возможную длину стека можно узнать прочитав регистр M. Интерпретатору доступен стек размером 64 элемента.
PUSH C
PUSH R
Код сохраняет в стеке текущую позицию Байтика
PUSH 11
WRITE S R
PUSH 12
WRITE S R
Программа помещает в стек числа 11 и 12. После каждой записи в стек в клетки поля записываются значения счётчика стека (1 и 2).
IF S < M
PUSH A
END IF
Программа записывает значение из регистра A в стек, если стек не заполнен до конца.
POPСчитывает значение c вершины стека и удаляет его оттуда. Команда полезна для восстановления состояния программы при возврате на предыдущий шаг выполнения.
PUSH C
PUSH R
RIGHT
UP
POP B
POP A
MOVE A B
Программа сохраняет в стеке позицию Байтика, а потом восстанавливает значения позиции в регистрах A (ранее сохранённую колонку C) и B (ранее сохранённый строку R), и перемещает Байтика на старую позицию.
PUSH 12
PUSH 11
WRITE S R
POP A
WRITE S R
POP A
WRITE S R
Программа помещает в стек числа 12 и 11. После записи в стек и после каждого считывания из стека код записывает в клетки поля значения счётчика стека: 2, 1, 0.
IF S > 0
POP A
END IF
Программа считывает из стека значение в регистр А, если стек не пустой.
| Код | Название | Иконка |
|---|---|---|
1 |
грибочек | |
2 |
яблочко | |
3 |
банан | |
4 |
груша | |
5 |
ананас | |
6 |
виноград | |
7 |
лимон | |
8 |
апельсин | |
9 |
мухомор | |
10 |
бомбочка | |
11 |
машинка | |
12 |
манипулятор | |
13 |
робот | |
14 |
приведение | |
15 |
ракета | |
16 |
квадратик | |
17 |
влево | |
18 |
вниз | |
19 |
вправо | |
20 |
вверх | |
21 |
цель | |
22 |
кошечка | |
23 |
собачка | |
24 |
сердечко | |
25 |
кораблик | |
26 |
пицца | |
27 |
черепашка |
| Код | Символ |
|---|---|
1 |
a |
2 |
b |
3 |
c |
4 |
d |
5 |
e |
6 |
f |
7 |
g |
8 |
h |
9 |
i |
10 |
j |
11 |
k |
12 |
l |
13 |
m |
14 |
n |
15 |
o |
16 |
p |
17 |
q |
18 |
r |
19 |
s |
20 |
t |
21 |
u |
22 |
v |
23 |
w |
24 |
x |
25 |
y |
26 |
z |
27 |
A |
28 |
B |
29 |
C |
30 |
D |
31 |
E |
32 |
F |
33 |
G |
34 |
H |
35 |
I |
36 |
J |
37 |
K |
38 |
L |
39 |
M |
40 |
N |
41 |
O |
42 |
P |
43 |
Q |
44 |
R |
45 |
S |
46 |
T |
47 |
U |
48 |
V |
49 |
W |
50 |
X |
51 |
Y |
52 |
Z |
53 |
0 |
54 |
1 |
55 |
2 |
56 |
3 |
57 |
4 |
58 |
5 |
59 |
6 |
60 |
7 |
61 |
8 |
62 |
9 |
63 |
, |
64 |
. |
65 |
! |
66 |
? |
| Код | Назначение | Чтение | Запись | Процедура меняет контекст |
|---|---|---|---|---|
A |
Общее назначение | Да | Да | Да |
B |
Общее назначение | Да | Да | Да |
C |
Позиция Байтика по горизонтали (номер колонки) | Да | Нет | Нет |
R |
Позиция Байтика по вертикали (номер строки) | Да | Нет | Нет |
S |
Текущий размер стека | Да | Нет | Нет |
M |
Максимальный размер стека | Да | Нет | Нет |
X Y I J V W
F1 F2 F3 F4 F5 F6 F7 F8 F9
A1 A2 A3
Указатель на конкретную клетку поля, по которому мы можем однозначно её найти. В Kidsprogramming поле представлено 64мя клетками: 8 рядов по 8 колонок. Клетки нумеруются от 1 до 8 слева направо, снизу вверх. В обозначении адреса первое число обозначает номер колонки, второе число номер строки.
Адрес левой нижней клетки 1,1
Адрес правой нижней клетки 8,1
Адрес левой верхней клетки 1,8
Адрес правой верхней клетки 8,8
Последовательность конкретных шагов, описывающих логику выполнения. Алгоритм может состоять из набора последовательных шагов, выполняемых друг за другом; ветвлений (когда какая-то часть шагов пропускается и не выполняется, в зависимости от заданных в алгоритме условий и проверок), циклов (когда какая-то часть шагов выполняется повторно заданное количество раз); процедур (когда какая-то группа шагов могут быть вызвана на исполнение по имени).
Значения передаваемые в процедуру при её вызове, либо значения передаваемые оператору при его использовании, либо значения передаваемые команде при её вызове.
Курсор в виде определённой фигурки, например робота, манипулятора, банана, привидения и т.д. Конкретный вид Байтика не влияет на выполнение кода программы.
Участок кода ограниченный условным оператором IF или ELSE или ELSE IF или циклом REPEAT или WHILE и оканчивающийся соответствующей командой END IF или END REPEAT или END WHILE.
Участок алгоритма в котором когда шаги выполнения могут пойти по разным сценариям.
Вычисляемая формула, результат вычисления которой можно записать в переменную или регистр. Выражения бывают математические и логические. Значением математического выражения всегда является число. Значением логического выражения всегда является либо ИСТИНА, либо ЛОЖЬ. Результат логического выражения можно присвоить переменной или регистру. В этом случае значением ИСТИНА будет эквивалентно 1, а значением ЛОЖЬ будет число 0.
Внутренняя программа, которая исполняет заданные команды в заданной последовательности.
Данные, на которых работает составленная программа. В Kidsprogramming исходные данные варьируются в зависимости от конкретного задания. Например, в задании forester грибочек может находится в любой из клеток первой строки. Программа должна это учитывать, корректино работая на любых возможных исходных данных (т.е. находить грибочек, где бы он не находился).
Разовое выполнение команд внутри цикла. Повторное выполнение команд внутри цикла – следующая итерация (вторая, третья и т.д.)
Воплощение алгоритма или его части в конретных командах. Часто используется выражение код программы – это означает набор команд из которых состоит программа; код цикла – набор команд составляющих цикл; код процедуры – набор команд/инструкций из которых состоит процедура.
Единичная инструкция, предписывающая Байтику выполнить какое либо действие. Байтик поддерживает набор следующих команд:
LEFT RIGHT UP DOWN MOVE READ WRITE IF ELSE REPEAT WHILE BREAK RESTART RETURN EXIT PROC PUSH POP
В начале выполнения программы для неё создаётся контекст: Байтик принимает исходную позицию, регистры и переменные очищаются, стек очищается. Это необходимо для гарантии повторяемости результатов выполнения программы. У процедур свой контекст выполнения. При каждом вызове процедуры для неё создаётся собственный контекст вызова с копиями регистров A и B и значениями в них равными 0. Перед выполнением процедуры интерпретатор запоминает значения регистров A и B в момент вызова процедуры, а после выполнения процедуры восстанавливает их прежние значения, возвращая исходных контекст.
Тоже самое что и «Регистр».
Определяет адрес клетки поля на которой находится Байтик в данный момент исполнения программы.
Текст программы, состоящей из команд Байтику. Листинг можно сохранить, отредактировать, загрузить.
Логическое выражение указанное в качестве аргумента команды IF или ELSE IF
Область памяти для хранения информации (чисел), организованной в виде последовательности ячеек памяти, каждая из которых имеет свой адрес и к каждой из которых можно обратится по этому адресу, независимо от остальных. В отличие от стека обеспечивает независимый доступ к каждой ячейке. Для того чтобы получить доступ к внутренней или любой другой ячейке массива, можно просто обратится к ней по её адресу. В отличие от стека количество ячеек массива должно быть известно заранее. В нашей программе строки и колонки поля являются массивами, а само поле - двумерным массивом.
Вспомогательные инструкции формирующие выражения и подвыражения. В Kidsprogramming поддерживается набор следующих операторов:
Математические + - * / % ( )
Логические < > ≤ ≥ = ≠ AND OR [ ]
Проверка работы программы и исправление ошибок.
Ячейка в памяти в которой можно хранить информацию, например, числа, значения промежуточных вычислений, индексы, адреса, возвращаемые из процедуры значения и т.д. Переменная имеет имя (В Kidsprogramming возможные имена ограничены буквами X Y I J V W). К переменной можно обращаться по имени и записывать или считывать из неё значения. Переменные можно использовать по своему усмотрению, для любых целей, обычно для хранения информации (чисел). Переменные необходимо обьявлять командой VAR.
Веб-сайт с авторизацией, задачами, студией, средой исполнения (интерпретатором), справочником, чемпионатом и другими функциями.
Исполняемый код, который компьютер или исполняющая среда может загрузить и выполнить. Например, студия Kidsprogramming сама по себе является программой. Kidsprogramming решает задачу обучения программированию и позволяет решать задачи и составлять алгоритмы управления Байтиком. В Kidsprogramming можно составить программу для подсчёта яблок, поиска грибочка, дешифровки сообщения от собачек, навигации, морского боя и решения других увлекательных задач. Код решений этих задач тоже является программой.
Изолированный участок кода, который можно вызывать по имени. Изоляция создаётся за счёт того что процедура выполняется в своём свобственном контексте со своими собственными копиями регистров A и B при каждом вызове, а также переданными необязательными аргументами A1 A2 A3, которые восстанавливаются при выходе из процедуры. В Kidsprogramming доступны следующие имена процедур: F1 F2 F3 F4 F5 F6 F7 F8 F9
Специальная переменная, которые всегда доступна для чтения / записи и не требующая предварительного обьявления. Часто используется для хранения промежуточной информации или результатов промежуточных вычислений, либо содержит значения внутренних переменных исполняющей среды (например, текущий размер стека).
Допустые регистры: A B C R S M
Kidsprogramming поддерживает 3 режима чтения/записи: числа, иконки, текст. В зависимости от режима чтения / записи в клетки поля будут записываться или числа, или иконки, или текст. Команда WRITE принимает в качестве первого аргумента числовой код. В режиме чтения / записи числа числовой код равен непосредственно записываемому числу. Команда READ считывает числовой код записанный в клетку поля, хотя визуально в клетке может находится число, иконка, или текст, в зависимости от выбранного режима. Режим чтения/записи задаётся задачей или вручную в свободном режиме.
Вызов процедуры из той же самой процедуры. В большинстве случаев рекурсия аналогична циклическому выполнению, и её лучше заменить циклом. Только некоторые задачи удобнее решать с помощью рекурсии. Это задачи, в которых количество ветвлений алгоритма меняется в процессе выполнения, динамически. Отсюда название для способа решения таких задач - динамическое программирование. Типичная задача для решения с помощью рекурсии – алгоритм быстрой сортировки.
Улучшение кода программы. Решив задачу, вы можете захотеть упростить код, сократить количество команд, или сделать его более понятным, при этом сохранив алгоритм выполнения. Например, для перемещения Байтика вправо ввех на одну клетку можно воспользоваться последовательностью из команд UP, RIGHT, а можно воспользоваться одной командой MOVE. Ещё одно назначения рефакторинга – ускорение алгоритма. Например, для сортировки фруктов можно воспользоваться алгоритмом пузырьковой сортировки, а можно более быстрым алгоритмом быстрой сортировки.
Решение задачи с помощью конкретной программы / алгоритма / кода.
Программа с визуальным интерфейсом или без него, исполняющая команды, и задающая контекст их выполнения. Kidsprogramming поддерживает две среды исполнения: локальную (студия) и сервер (автоматические тесты для проверки заданий).
Программа, в которой нужно решать задачи, писать код, изучать программирование на практике.
Исполняющая среда поддерживает только одну команду в одной строке. Каждая следующая команда должна быть расположена только на следующей строке. Пустая строка означает конец программы. Длинные условные или математические выражения нужно разбивать на несколько строк и каждую следующую строку начинать с оператора + (для математических выражений) или OR (для логических выражений)
Область памяти для хранения информации (чисел) организованной в виде канцелярских стикеров. Для того чтобы получить доступ к нижнему стикеру, надо снять верхние. Новые стикеры клеятся поверх старых. Стек удобен тем что не требует именования переменных и автоматически обеспечивает последовательный доступ к информации. Применяется тогда, когда количество переменных неизвестно и может меняться в процессе выполнения программы. Kidsprogramming имеет встроенный стек размером 64 элемента.
Слово текущий в контексте Kidsprogramming всегда используется в значении настоящий, в данный момент. Например текущий размер стека означает размер стека в данный момент.
После выполнения кода выполняется локальный тест того, что задание решено верно. Локальная проверка учитывает только работу программы на конкретных исходных используемые данных и проверяет что на этих конкретных данных программа отработала корректно. Для полной проверки решения программа загружается на сервер где выполняются автоматические тесты на всех возможных данных.
Область интерфейса программы с кнопками.
Команда IF которая обеспечивает ветвление алгоритма.
Индикатор какого-либо условия, указывающий на его истинность, или ложность.
Команды WHILE или REPEAT, которые обеспечивают циклическое выполнение участка кода.
Аргумент должен быть переменной
Аргумент должен быть задан. Аргумент команды обязателен, его нельзя пропускать.
Аргумент должен быть числом
Значение аргумента должно быть между 1 и 8
Значение аргумента должно быть больше или равно 0
Аргумент должен быть регистром или переменной
Аргумент должен быть регистром, переменной или аргументом процедуры A1 A2 A3
Аргументы A1 A2 A3 могут использовать только внутри процедур. Использование аргументов A1 A2 A3 без передачи значения в них при вызове процедуры невозможно.
Попытка прочитать пустой стек
Не могу переместится. Попытка выхода Байтиком за границы поля 8x8
Условное выражение не может быть пустым. Условное выражение в командах IF WHILE обязательно.
Выражение не может быть пустым
Попытка записать значение в полностью заполненный стек. Максимальная длина стека 64 элемента.
Нет такого кода в алфавите. Попытка записать код, которого нет в таблице символов.
Нет такого кода. Попытка записать код, которого нет в таблице иконок.
+, −, *, /, %, (, ) are supported.Только операторы +, −, *, /, %, (, ) поддерживаются. Некорретное использование оператора.
Процедура не обьявлена. Использование не обьявленной процедуры.
Второй аргумент должен быть оператором равно =
Неожиданный конец выражения. Выражение не заверешено. Скорее всего используется оператор без аргумента, пропущен аргумент либо оператор, два оператора подряд, либо количество открывающих скобок ( или [ не соответствует количеству закрывающих скобок ) или ].
Неожиданный оператор. Скорее всего используется оператор без аргумента, два оператора подряд, пропущен аргумент либо оператор, либо количество открывающих скобок ( или [ не соответствует количеству закрывающих скобок ) или ].
Неожиданное число. Скорее всего используется оператор без аргумента, два оператора подряд, пропущен аргумент либо оператор, либо количество открывающих скобок ( или [ не соответствует количеству закрывающих скобок ) или ].
Неизвестная команда.
Имя переменной обязательно. Нельзя обьявить переменную без имени.
Использование не обьявленной переменной. Переменную необходимо обьявить перед использованием.
Записываемый код должен быть числом. Попытка записать не число.
0.X = X + 1( ) и командой +[ ] и командой ORC или R чтобы проверить текущую позицию Байтика