Квант

52

Законы программирования.
Правила записи predписаний на языке Робик
Заочная школа программирования

Урок 1

Программы, написанные на большинсте современных языков программирования, состояят из отдельных predложений — точно так же, как и тексты на обычных, «человеческих» языках. Большинство читателей «Кванта», верятно, помнит, что почти любое predложение на русском языке можно отнести к одной из трех больших групп: повествовательные, вопросительные и восклицательные predложения. Ham будет удобнее рассматривать predложения называть утверждениями, вопросами и predписаниями. Можно сказать, что вопрос — это predложение, на которое можно ответить. Примеры вопросов:

Какой он, этот слонопотам? Нeyжели очень злой? Идет ли он на свист? И, если идет, то зачем? Любит ли он поросит? И как он их любит?

Утверждение — это predложение, про которого имеет смысл спросить, истинно оно или ложно. Примеры:

Хорошо живет на свете Винни-Пух!
2+2=4.

Кот Матроскин подойти к телефону не может, он очень занят, он на печи лежит.

Предписание — это predложение, про которого имеет смысл спросить — как его исполить? Примеры:

Позовите, пожалуйста, кota Матросина к телефону!

Поднимите мои веки!

Не открывают рот, Пятачок, а то в него попадет мыло.

Скажите, пожалуйста, который час.

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

— Я не понимаю, как Вы получили эту формулу, — сказал один из присутствовших.

— Это утверждение, а не вопрос,— ответил лектор. — Вопрос есть?

В большинсте языков программирования самостояльным predложением может быть предложен и predложенный: если робот нужно дать задание (а программа — это, по определению, задан и еда робота или ЭВМ), то каждое predложение должно быть таким, чтобы его можно было буквально использовать — оно должно быть predписанием.

Роботу можно сказать:

— Запомни, что 2+2=4.

No beccsмысленно сообщать ему:

2+2=4.

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

Краткую формулировку этого правила называют первым законом программирования:

Программа состоит из predписаний.

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

В инструкциях для любых вычислительных устройств обязательно перечислются predписания, которые могут быть этих устройствми использованы. Такой перечень называется системой predписаний (сокращенно — СПР).

Итак: система predписаний — это множество predписаний, которые понимает и может использовать робот или вычислительная машина.

Например, система predписаний для робота РД-1, умелошего использовать

53

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

Система predписаний РД-1

ОТКРОЙ ОКНО; НАМОЧИ ТРЯПКУ;
ЗАКРОЙ ОКНО; СОТРИ С ДОСКИ;
СЯДЬ НА МЕСТО;

С системами predписаний связи во важнейшее правило, которое называют вторым законом программирования:

В программах для любых роботов и ЭВМ можно использовать те и только те predписания, которые есть в их системах predписаний.

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

Робота или вычислительной машину можно научить одному или несколько языкам программирования. В этом случае к их СПР добавь яю тся predписания этого языка (языков).

Общие правила predписания начинается с новой строки.

  1. В конце predписания ставится точка с запятой (;).

  2. Каждое predписание начинается с новой строки.

  3. В конце predписания ставится точка с запятой (;).

*) Описываемый здесь язык Робик — это сокращенный вариант языка Робик-3, использующего для обучения школьников в Харьковской и Новосибирской школе юных программов.

Внимательного читателя может удивить отсутствие правил употребления заглавных букв. Объясняется это просто: для того, чтобы ЭВМ или робот использовали predписание, его необходимо набрать на клавишах терминала или другого аналогичного устройства, а буквы на клавиатуре — только заглавны е; поэтому совершенно безразлично, какими буквами будут написаны в журнале; здесь мы будем записывать их заглавны и буквами, но при выполнении наших заданий predписания можно писать по правилам русского языка: первый буква — заглавная, далее — строчные.

Тепер, зная общие правила записи predписаний в языке Робик, мы можем составить первую программу для описанного выше робота РД-1, который долженстерть с dockи и проверить класс на перемене.

Bot пример правильно программы:

ОТКРОЙ ОКНО;
НАМОЧИ ТРЯПКУ;
СОТРИ С ДОСКИ;
ЗАКРОЙ ОКНО;
СЯДЬ НА МЕСТО;

Задание 1.1. Среди приведены ниже примеры нуждной памяти правильные и перечисленные все ошибки в остальных программах.

Программа A

  1. СОТРИ С ДОСКИ;
  2. НАМОЧИ ТРЯПКУ;
  3. ОТКРОЙ ОКНО;
  4. ЗАКРОЙ ОКНО;
  5. СЯДЬ НА МЕСТO;

Программа B
НАМОЧИ ТРЯПКУ;
ОТКРОЙ ОКНО;
СОТРИ С ДОСКИ;

54

ЗАКРОЙ ОКНО;
СЯДЬ НА МЕСТО;

Программа С
ОТКРОЙ ОКНО;
НАМОЧИ ТРЯПКУ;
ВЫТРИ С ДОСКИ;
ПОДМЕТИ ПОЛ;
СЯДЬ ЗА ПАРТУ;

Программа D
ОТКРОЙ ОКНО;
НАМОЧИ ТРЯПКУ;
СЯДЬ НА МЕСТО;

Программа Е
НАМОЧИ ТРЯПКУ
СОТРИ С ДОСКИ
СЯДЬ НА МЕСТО

Попробуем представить себе, каким образом РД-1 будет использовать нашу программу. Будем считать, что робот сидит за партой в классе, а на соседней парте установлен терминал «Видеотон-340». Диалог начиная робот. Как только вы нажмите выключатель, на экране терминала появляется его первое сообщение:
ЗДРАВСТВУЙТЕ! Я РОБОТ РД-1!
Я ГОТОВ К РАБОТЕ!
После этого робот выдает на экран звездочку (*), которая означает, что он готов к приему первого предписания. Набираем

ОТКРОЙ ОКНО;
После точки с запятой нажимаем на клавишу «ETX» (это сокращение английских слов «end of text» — конец текста). Robot читает строку на экране терминала и начиная использание: встает с места, идет к окну и т. д. Когда предписание будет выполено, робот остановится, а на экране вновь появится звездочка. И так до конца программы.

Если система предписаний невелика, часто бывают удобно занумеровать предписания и использовать для управления вместе полного текста эти номера. Такие защищенные предписания мы отыпные будем называть командами. А система предписаний превращается в систему команд. В качестве примера приведем систему команд самоходного аппарата Кибик:

Команда Текст предписания

1 ПРОЕХАТЬ 100 МЕТРОВ
2 ПОВЕРНУТЬ ВПРАВО
3 ПОВЕРНУТЬ ВЛЕВО
0 ЗАКОНЧИТЬ РАБОТУ

В отличие от предписаний языка Робик, такие команды можно записывать на одной строке. Запись программы получается компактной, но понять ее трудно: 1113113112111211211211211210.

Задание 1.2. На листе klemtой бумаги размер 10 на 10 см нарисуйте путь, пройденной Кибиком при использовании этой программы, если наилого координат расположено в левом нижнем углу, оси параллельных сторонам листа, масштаб 1 : 10000 (в 1 см — 100 м), а в начальной момент Кибик находится в точке с координатами (800, 500) (в метрах) и направлен вверх, m. e. вдоль положимельного направления оси ordinam.

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

Задание 1.3. Определите, какую программу выполнял Кибик, если его путь оказался максим, как показано на рисунке 6*). Начальные условия же, рисунок уменьшен ввое.

Рис. 6.

*) Рисунок 6 нарисован графопостроителем системы Шпара (об этой системе мы рассекем в одном из следующих номеров). Ученикам 3—4 классов А. Erшову, С. Пустошилову и А. Филатовой из Новосибирской школи юных программостов был дан ответ к заданию 1.3; по этому ответу они составили программу для графического системы Шпара, по которой и был нарисован рисунок 6, т. е. «смоделирована» работа Кибика.

55

Гибкие системы предписаний, синтаксические диаграммы и переменные поля

Урок 2

Для универсальных ЭВМ и роботов, имеющих большие системы предписаний, огромное значение имеет с по-объект их задания. До сих пор мы задавали СПР «жестким» способом: прямым перечислением всех допустимых предписаний. Понято, что это — далеко не лучший путь: большие множества жестких способом задать неудобно или невозможно. Нельзя описать этим способом, например, даже сложение произвольных целых чисел. Ведь для каждой пары складываемых чисел нужно предусмотреть в СПР отдельное предписание.

Однако из курса математики известно, что перечисление — не единственный способ задания множества. Гораздо чашце использует «гибкое» описание: записьается формула или правила, позволяющее получить все элементы множества или проверить, принадлежит ли неокторный объект этому множеству. Второй урок посвящен одному из «гибких» способов описания СПР — синтаксической диаграммам.

Синтаксическая диаграмма — это правило построения предписания, заданное в графическом виде. Диаграмма показывает, из каких частей можно строить предписание и в каком порядке должны быть расположены эти части. Синтаксическая диаграмма состоит из отдельных полей, соединенных стрелками. Каждое такое поле (обычно это — слово, число или знак) — часть предписания, а стрелки показывают, в каком порядке можно соединять эти части. Каждая диagramma имеет начальную точку, обозначаемую H, и конечную, обозначаемую K.

Для того чтобы получить правила предписания при помощи синтаксической диagrраммы, нужно проверти

какой-любо путь из начальной точки в конечную, двигаясь строго по направлению стрелок, и выписьвать подряд все встретившиеся на этом пути поля. Например, синтаксические диagrраммы для вздexода Кибик, описанного в конце первого урока, могут выглядеть так:

СХЕМА 2

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

Другой способ получения различных предписаний по одной диagramma — использование переменных полей.

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

Например, в СПР одного из роботов может встретився такая диagramma:

СХЕМА 3

57

Задание 2.4. Переменное поле описывается следующей диаграммой:

СХЕМА 6

Здесь символ — это буква, цифра или любой знак, имеющийся на клавиатуре терминала, за исключением анострофа (’).

Пример текста:
‘ЭТО ПРАВИЛЬНЫЙ ТЕКСТ’
Приведите четыре примера правильных текстов и определите, допускается ли диаграммой пустой текст'

Задание 2.5. Переменное поле вещественное число в языке Робик описывается диаграммой:

СХЕМА 7

(В языках программирования принято отделять целую часть от дробной при помощи точки, а не запятой, как в школьной математике.) Какие из приведенных ниже вещественных чисел получаются по этой диаграмме:
5.3—52.0 10.00000+50—54. +2,11/25.
Приведите четыре примера правильной записи вещественных чисел на Робике.

Задание 2.6. Нарисуйте синхроническую диаграмму для описания общной математической формы записи вещественных чисел. Учитите, что в математике целое число — это частный случай вещественного, а в Робике это не так: числа без дробной части не должны списывать диаграммой.

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

Задание 2.8. Система предписанной робота Кибик-2 описывается диаграммой:

СХЕМА 8

Кибик-2 находится в точке A (800, 500) и развернут вдоль положимельного направления оси ординат. Он должен посетить точки: B (800, 800), C (300, 200), D (925, 931) и вернуть в точку A.

После приближения в очередную точку Кибик-2 должен отнестись на терминале сообщение об этом, например:
‘Я ПРИБЫЛ В ТОЧКУ А’
Составить программу.

Г. Звеницгородский