Что за программа кукарача

— А меня зовут Гена. Я работаю в зоопарке Крокодилом.
— А что мы будем сейчас делать?
— Ничего. Давайте просто побеседуем.

Э. Успенский

Повторим кратко, что мы узнали о Кукараче из предыдущего учебника «Азбуки Роботландии».

Среда обитания Кукарачи и его СКИ

Вспомним среду, в которой трудится исполнитель, его СКИ. И, самое главное, вспомним язык программирования, на котором можно создавать для него программы.

Исполнитель

Палку в воду бросит, а телёнок принесёт. Скажет ему: «Лежать» — и Гаврюша лежит. Прикажет ему Матроскин: «Взять! Куси!» — тот сразу бежит, и бодаться начинает.

Э. Успенский
Скрыть ответы

Вопрос. Опишите среду Кукарачи .

Ответ. Кукарача работает на клетчатом поле. Исполнитель может переползать из клетки в клетку вверх, вниз, влево, вправо, но не по диагонали. Выход исполнителя за пределы поля запрещён (отказ Не могу! ). В каждой клетке может находиться кубик с нанесённым на его грань символом. Кукарача, перемещаясь по полю, может толкать один или несколько кубиков перед собой и «сбрасывать» кубики за пределы поля.

Кукарача и латинские советы | Rumba latin tips | Перезалив

Скрыть ответы

Вопрос. Расскажите про скрытые символы на кубиках и индикатор.

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

Исполнитель в состоянии прочитать символ на кубике независимо от того, была ли запись символа обычной или скрытой. Кубик с обычной надписью исполнитель толкает, но не переворачивает.

В среде есть специальная ячейка памяти (её не видно на экране), которая называется индикатором . В начальный момент (перед выполнением программы) в эту ячейку помещается значение ПУСТО . Затем значение индикатора меняется каждый раз, когда Кукарача передвигается в соседнюю клетку. Если в клетке был кубик (исполнитель толкнул его) в индикатор записывается символ с кубика, в противном случае в индикатор записывается ПУСТО .

Скрыть ответы

Вопрос. Опишите СКИ Кукарачи .

Ответ. Система команд исполнителя (СКИ) включает пять команд:

Команда Как выполняется
ВПРАВО Сместиться на одну клетку вправо
ВЛЕВО Сместиться на одну клетку влево
ВВЕРХ Сместиться на одну клетку вверх
ВНИЗ Сместиться на одну клетку вниз
СТОЯТЬ Пустая команда — исполнитель не выполняет никаких действий

Любая команда, кроме команды СТОЯТЬ , может привести к отказу Не могу , если её выполнение уводит Кукарачу за пределы поля.

Язык программирования

И стал он галчонка учить разговаривать. Целыми днями сидел около него и говорил:
— Кто там? Кто там? Кто там?

Э. Успенский

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

Кукарача Изначально без Кьюбн Экшена/ Что такое Кукарача/ Восьмерка/ Лекция Румба/ История Фигуры

Программа может быть записана в одну длинную строку:

ЭТО Шаг ВЛЕВО ВНИЗ ВПРАВО КОНЕЦ

Но так не делают. Программу записывают лесенкой, чтобы человеку было легче её читать, и снабжают комментариями:

ЭТО Шаг ВЛЕВО // В первый столбец ВНИЗ // На следующую строку ВПРАВО // Толкнуть кубик КОНЕЦ

Для записи комментариев в программах Кукарачи используют две косых черты «//». Они сами и всё, что находится правее до конца строки, не принимается во внимание при выполнении программы.

Скрыть ответы

Вопрос. Что представляет собой программа в языке Кукарачи ?

Ответ. Программа представляет собой последовательность процедур , записанных в любом порядке. Процедура описывает действия исполнителя, а имя процедуры может быть использовано наравне с командой из СКИ исполнителя в других процедурах или в командной строке.

Скрыть ответы

Вопрос. Как записывается процедура?

Ответ. Процедура записывается следующим образом:

Описание процедуры

ЭТО и КОНЕЦ — ключевые слова языка программирования.

Ключевые слова — служат для построения языковых конструкций. Они должны записываться точно так, как обозначены в языке.

Читайте также:
Детокс программа что это

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

Командой в процедуре может быть:

  • команда из СКИ
  • вызов процедуры (имя процедуры)
  • команда языка программирования

Скрыть ответы

Вопрос. Назовите команды языка программирования Кукарачи .

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

Команда языка программирования Как выполняется

ПОВТОРИ число команда

Повторение выполнения команды указанное число раз.
Пример
ПОВТОРИ 5 ВПРАВО
ПОКА условие команда Повторение выполнения команды, пока условие имеет значение истина. Проверка условия — перед выполнением команды.
Пример
ПОКА ПУСТО ВПРАВО
ЕСЛИ условие ТО команда1 ИНАЧЕ команда2 Проверяется условие и выполняется либо команда1 (при значении условия истина ), либо команда2 (при значении условия ложь ). Часть ИНАЧЕ команда2 может быть опущена.
Пример
ЕСЛИ A ТО ВПРАВО ИНАЧЕ ВЛЕВО Объединение нескольких команд в одну. Используют там, где по правилам языка должна быть одна команда, а нужно много.
Пример

Интерпретатор

— Заходите, — пригласил Винтика и Шпунтика Бублик. — Я вас познакомлю с Шурупчиком. Это интересная личность.

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

Интерпретатор — это одна из процедур этой программы. Именно интерпретатор выполняет программу, написанную для Кукарачи .

Интерпретатор читает программу с «чужими» для Кукарачи словами: ЭТО , КОНЕЦ , ПОВТОРИ , и переводит её на язык исполнителя — то есть на язык команд из его СКИ.

Скрыть ответы

Вопрос. Объясните, как интерпретатор выполнит процедуру Ух .

Ответ. Интерпретатор передаст Кукараче 5 команд ВПРАВО .

Скрыть ответы

Вопрос. Как интерпретатор проверяет условия?

Ответ. Интерпретатор сравнивает запись условия в программе со значением индикатора в среде Кукарачи и вырабатывает значения истина или ложь по правилам, описанным в следующей таблице:

Запись условия Результат проверки
символ Истина , если индикатор содержит этот символ, ложь в противном случае. НЕ символ Ложь , если индикатор содержит этот символ, истина в противном случае. ПУСТО Истина , если индикатор содержит ПУСТО , ложь в противном случае. НЕ ПУСТО Ложь , если индикатор содержит ПУСТО , истина в противном случае. ЦИФРА Истина , если индикатор содержит одну из цифр (0, 1, 2, 3, 4, 5, 6, 7, 8, 9), ложь в противном случае. НЕ ЦИФРА Ложь , если индикатор содержит одну из цифр (0, 1, 2, 3, 4, 5, 6, 7, 8, 9), истина в противном случае.

Команды языка программирования

На брюках было: два кармана спереди, два кармана сзади, два кармана по бокам и один карман внизу, на колене.

Скрыть ответы

Вопрос. Как работает цикл: ПОВТОРИ число команда ?

Ответ. Интерпретатор выполнит команду, записанную после числа, указанное количество раз. Примеры показаны в таблице:

Команда Как выполнится

ПОВТОРИ 7 ВНИЗ

Кукарача 7 раз выполнит команду ВНИЗ . ПОВТОРИ 4 Шаг Процедура Шаг выполнится 4 раза. Составная команда выполнится 5 раз ( Кукарача 5 раз выполнит последовательность команд ВНИЗ ВПРАВО ).

Скрыть ответы

Вопрос. Как работает команда ветвления:

Ответ. Интерпретатор проверяет условие и, если условие верное, то выполняет первую команду, иначе (если условие ложное) — вторую. В любом случае работает только одна команда, либо команда1 , либо команда2 . Примеры показаны в таблице:

Команда Как выполнится

ЕСЛИ ЦИФРА ТО ВЛЕВО ИНАЧЕ ВПРАВО

Если индикатор содержит цифру (исполнитель последним ходом толкнул цифру), то Кукарача шагнёт в соседнюю клетку слева, иначе — в соседнюю клетку справа. ЕСЛИ НЕ ПУСТО ТО Шаг1 ИНАЧЕ Шаг2 Если индикатор содержит символ (исполнитель последним ходом толкнул кубик с символом), выполнится процедура Шаг1 , иначе — процедура Шаг2 .

Скрыть ответы

Вопрос. Как работает команда ветвления в сокращённой форме:

Ответ. Интерпретатор проверяет условие и, если условие верное, то выполняет команду. Если условие ложное, команда не выполняется. Примеры показаны в таблице:

Команда Как выполнится

ЕСЛИ ЦИФРА ТО ВЛЕВО

Если индикатор содержит цифру (исполнитель последним ходом толкнул цифру), то Кукарача шагнёт в соседнюю клетку слева, иначе останется на месте. ЕСЛИ НЕ ПУСТО ТО Шаг
Читайте также:
Hard reset что это за программа
Если индикатор содержит символ (исполнитель последним ходом толкнул кубик с символом), выполнится процедура Шаг , иначе процедура Шаг выполняться не будет.

Скрыть ответы

Вопрос. Как работает команда цикла ПОКА :

  1. Сначала проверяется условие.
  2. Если условие ложно, выполнение цикла заканчивается.
  3. Если условие истинно, выполняется команда, записанная после условия, и всё начинается сначала: проверяется условие, выполняется команда и так далее.

Примеры показаны в таблице:

Команда Как выполнится

ПОКА ПУСТО ВПРАВО

Если перед входом в цикл индикатор содержал символ (любой), команда ВПРАВО не выполнится ни разу. Иначе исполнитель будет шагать вправо, пока не толкнёт кубик. ПОКА НЕ ЦИФРА Шаг Если перед входом в цикл индикатор содержал цифру, процедура Шаг не выполнится ни разу. Иначе будет выполняться процедура Шаг , пока исполнитель не толкнёт кубик с цифрой.

Тестирование и отладка программ

В это время корзина с силой ударилась о землю и перевернулась.

Посмотрите, как Вася решил задачу Расставь цифры .

Задача. Расставь цифры
Исполнитель стоит в левом верхнем углу поля. Во второй строке, начиная с первой клетки, находится плотный ряд кубиков с цифрами. Число кубиков не более 9. Цифры в ряду расположены в произвольном порядке и значение каждой из них больше 2. Поставить кубики в строки с номерами, равными значениям цифр.

Пример начального и конечного состояний среды задачи Расставь цифры

Задача решается при помощи цикла ПОКА (для обнаружения конца цепочки цифр) и переключателя, который вызывает одну из 7 процедур для обработки цифр: 3, 4, 5, 6, 7, 8, 9.

ЭТО Цифры_на_место ВНИЗ // В индикатор первую цифру ПОКА НЕ ПУСТО < Установка_цифры Шаг >КОНЕЦ // Установим цифру и вернёмся во 2-ю строку ЭТО Установка_цифры ЕСЛИ 3 ТО Цифра_3 ИНАЧЕ ЕСЛИ 4 ТО Цифра_4 ИНАЧЕ ЕСЛИ 5 ТО Цифра_5 ИНАЧЕ ЕСЛИ 6 ТО Цифра_6 ИНАЧЕ ЕСЛИ 7 ТО Цифра_7 ИНАЧЕ ЕСЛИ 8 ТО Цифра_8 ИНАЧЕ ЕСЛИ 9 ТО Цифра_9 КОНЕЦ // Толкнём следующую цифру ЭТО Шаг ВВЕРХ ВПРАВО ВНИЗ КОНЕЦ ЭТО Цифра_3 СТОЯТЬ КОНЕЦ ЭТО Цифра_4 ВНИЗ ВВЕРХ КОНЕЦ ЭТО Цифра_5 ПОВТОРИ 2 ВНИЗ ПОВТОРИ 2 ВВЕРХ КОНЕЦ ЭТО Цифра_6 ПОВТОРИ 3 ВНИЗ ПОВТОРИ 3 ВВЕРХ КОНЕЦ ЭТО Цифра_7 ПОВТОРИ 4 ВНИЗ ПОВТОРИ 4 ВВЕРХ КОНЕЦ ЭТО Цифра_8 ПОВТОРИ 5 ВНИЗ ПОВТОРИ 5 ВВЕРХ КОНЕЦ ЭТО Цифра_9 ПОВТОРИ 6 ВНИЗ ПОВТОРИ 6 ВВЕРХ КОНЕЦ

После того как программа написана, её начинают тестировать , то есть пытаются найти в программе ошибки.

Тестируют программы, запуская их с разными допустимыми состояними среды. Обычно таких состояний очень много, трудно поверить, но для задачи Расставь цифры таких состояний насчитывается 47 079 207 , то есть более 47 миллионов!

Проверить такое число вариантов невозможно, поэтому проверяют несколько типичных и все особые начальные состояния среды.

Наборы начальных состояний назвают тестами .

Вот необходимый набор тестов для задачи Расставь цифры :

Исходная запись Комментарий
3 Особый случай: одна цифра.
3456789 Промежуточный вариант между крайними. Присутствуют все возможные цифры (проверим правильность установки каждой цифры).
755786733 Особый случай: максимальное число цифр.

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

Процесс тестирования и исправления ошибок программисты называют отладкой программы.

Тестирование устанавливает факт наличия ошибки, а для исправления нужно найти место ошибки в программном коде, исправить, и убедиться, что непрошедший тест теперь проходит правильно.

Скопируйте прямо с этой страницы программу Цифры_на_место в приложение Кукарача , и проверьте правильность выполнения всех 3-х тестов.

Источник: robotlandia.ru

Что за язык кукарача?

Кукарача- это язык программирования. В языке программирования Кукарачи, как и в обычном языке, слова разделяются пробелами. Конец строки также является разделителем слов.

Программу записывают лесенкой, чтобы человеку было легче её читать, и снабжают комментариями:

ВЛЕВО // В первый столбец

ВНИЗ // На следующую строку

ВПРАВО // Толкнуть кубик

Для записи комментариев в программах Кукарачи используют две косых черты «//». Они сами и всё, что находится правее до конца строки, не принимается во внимание при выполнении программы.

Читайте также:
Импост что это за программа

Кукарача Windows — это среда, в которой можно работать с исполнителем:

в командном режиме (при помощи команд из СКИ исполнителя);

при помощи программ, написанных на языке программирования Кукарачи.

Источник: www.bolshoyvopros.ru

Игрушечный ЯП — Cockroach

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

Авторы курса сделали только exe-шник под Windows. Когда младший сын начал требовать «Папа научи программировать» принял волевое решение — сделаю свою имплементацию. И сделал.

Че это вообще?

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

Поддерживаются простые команды — ВВЕРХ , ВНИЗ , ВПРАВО , ВЛЕВО и их группировка с помощью <> .

После каждого действия известен результат — какую букву толкнул жучок.

Есть циклы — ПОВТОРИ x , ПОКА y и условие ЕСЛИ z ТО . ИНАЧЕ .

И даже процедуры — ЭТО proc_name . КОНЕЦ

Поэтому, в процессе обучения ребенок учится довольно сложных концепциям включая рекурсию и процедурное программирование.

Поле

Поле работает совсем очевидно — массивчик char’ов и специальный символ для жучка. Процедуры, которые передвигают жучка изменяя состояние. Запоминаем последнюю букву, которую толкнули. Осталось добавить загрузку/выгрузку в строку примерно такого вида:

А_А__ _1_1_ _____ ____~

а также колбек на изменение, что бы отрисовывать и симпатичный компонент готов.

Как сделать интерпретатор?

Оказалось, что сделать интерпретатор не так уж и сложно. Надо понимать что такое синтаксис и грамматика, почитать немного примеров и воспользоваться готовыми либами.

Я взял antlr — т.к мой основной язык java и там этот генератор парсеров на слуху. В итоге получилась такая грамматика

Грамматика задает правила для парсера что бы из текста сформировать синтаксическое дерево. Пример на картинке.

простите мне было лень делать дерево для сабжевого ЯП

Интерпретатору всего-лишь надо обойти это дерево верным образом и выполнить необходимые действия. Действия следуют из их смысла:

  • Определение процедуры — запоминаем имя процедуры в специальной мапке. Ключ — название, значение — поддерево команд.
  • Вызов процедуры (токен ID) — ищем определение процедуры и вызываем соответствующее поддерево команд.
  • Цикл ПОВТОРИ x — выполняем поддерево x раз.
  • Цикл ПОКА у — проверяем условие y и выполняем поддерево пока оно выполняется.
  • ЕСЛИ z ТО . ИНАЧЕ . — проверяем условие z и выполняем то или иное поддерево.
  • Обычные команды — изменяем состояние поля.

Интерфейс

Последний раз я делал UI еще во времена когда jquery и extjs были модными :), поэтому погуглив как сейчас делается интерфейс слегка ох^Wудивился обилию возможностей. В итоге собрал из туториала который первым заработал рабочее one page application и запилил с помощью того что знаю — bootstrap и jquery.

Очень хотелось сделать подсветку синтаксиса, а нагугленный компонент поддерживал другой генератор парсеров. Нет проблем — записать грамматику немного другим синтаксисом проще простого.

Несмотря на то, что в CodeMirror довольно подробная документация разобраться в API оказалось не так просто. Возможно, я отвык от уровня документирования js компонент. Но, в итоге, подсветка синтаксиса и текущей команды во время дебага и запуска работает.

Сохранение файликов сделал через localStorage — удобненько.

Сложности

Первая реализация интерпретатора написана на java и работает через консоль. Пошаговое выполнение (отладку) легко сделать через ожидание ввода с консоли.

А вот в javascript простой возможности останавить выполнение в рандомном месте нет. Поэтому, пришлось заморочиться и сделать, что бы интерпретация приложения работала на promise’ах. Команда кукарачи выполняется при выполнении Promise.resolve .

Публикация

Вкратце — github прекрасен)

Оказалось, что в github есть бесплатный, автоматизированный, удобный функционал, что бы опубликовать one page application. Называется github pages. Обалденно удобно. Собираешь свое приложение, указываешь папочку, жмешь кнопку и вуаля — приложение готово и работает.

Ну вот и все pet project готов и вроде как работает. Ребенок два раза позанимался программированием и получил массу удовольствия. Я тоже доволен и пописал интересный код.

А еще у меня есть канал с выступлениями и ссылками на интересные пейперы из мира разработки СУБД.

  • antlr
  • ненормальное программирование

Источник: habr.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru