Зейберт А.М.

Техника однотактовых программ на Лого

 

I. Что такое "однотактовая программа"

Представим себе, что исполнителю "Ученик" надо провести в школе один учебный день. Исполнитель понимает команды МИНУТА_НА_УРОКЕ и МИНУТА_НА_ПЕРЕМЕНЕ, а также структуры ПОВТОРИ и ЕСЛИ. Для краткости будем считать, что день состоит из трех уроков и двух перемен √ 10 и 15 минут.

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

ЭТО ДЕНЬ
ПОВТОРИ 45 [МИНУТА_НА_УРОКЕ]
ПОВТОРИ 10 [МИНУТА_НА_ПЕРЕМЕНЕ]
ПОВТОРИ 45 [МИНУТА_НА_УРОКЕ]
ПОВТОРИ 15 [МИНУТА_НА_ПЕРЕМЕНЕ]
ПОВТОРИ 45 [МИНУТА_НА_УРОКЕ]
КОНЕЦ

Эта программа последовательно описывает действия исполнителя, что собственно и должна делать программа. Можно сказать, что в программе заложен некоторый сюжет √ на этом основании такую программу мы будем называть "сюжетной".

Теперь представим, что в языке нашего исполнителя есть датчик ЧТО_СЕЙЧАС, который возвращает значения ⌠урок■ либо ⌠перемена■ в зависимости от текущего времени. Тогда программу дня можно попытаться описать таким образом:

ЭТО ДЕНЬ
ПОВТОРИ 160
 [ЕСЛИИНАЧЕ ЧТО_СЕЙЧАС = "урок
  [МИНУТА_НА_УРОКЕ]
  [МИНУТА_НА_ПЕРЕМЕНЕ]
 ]
КОНЕЦ

Программа не только занимает меньше места, она обладает еще одним поразительным свойством. То, что для нас (программистов) является двумя совершенно различными действиями (поведение на уроке и на перемене), для исполнителя оказалось записано одной и той же инструкцией (начинающейся с команды ЕСЛИИНАЧЕ). Программа фиксирует не столько последовательность действий, сколько правило поведения исполнителя. Это стало возможным благодаря тому, что нам удалось одной и той же инструкцией описать поведение исполнителя в любой момент времени (по аналогии с музыкой √ в любой "такт" нашего компьютерного произведения). Такую организацию программы мы и будем называть "однотактовой".

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

 

II. Структура однотактовой программы.

Самый простой способ организовать бесконечную однотактовую программу √ это бесконечная рекурсия. Основой структуры будет процедура ТАКТ, в которой будут описываться действия, происходящие в универсальный момент времени. Зафиксировать реальную продолжительность такта можно с помощью команды ЖДИ.

ЭТО ТАКТ
<Действия>
ЖДИ 1
ТАКТ
КОНЕЦ

Сразу оговорим одно возможное усложнение √ счетчик (переменная :сч) √ и будем пока считать общую структуру однотактовой программы утвержденной:

ЭТО ТАКТ :сч
<Действия>
ЖДИ 1
ТАКТ :сч + 1
КОНЕЦ

III. Классификация действий.

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

Действия

1
Безусловные

2
Условные

 

2.1
По времени

2.2
По действиям пользователя

2.3
По событиям программы

 

2.1.1
Периодичные

2.1.2
Случайные

2.2.1
Клавиша

2.2.2
Мышка

2.3.1
Черепашки

2.3.2
Переменные

 Надеемся, что все позиции этой схемы понятны хотя бы в первом приближении. Наиболее разумно знакомиться с ними в порядке их нумерации, однако никто не может запретить Вам обратиться к тем разделам, которые интересуют Вас в большей степени. После знакомства с разделом 2.1.1 (Периодичные условные действия) Вы можете рассмотреть специально приготовленный пример, демонстрирующий отличие однотактового программирования от других возможных способов создания проектов с динамической графикой.