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писания начинается с новой строки.
-
В конце predписания ставится точка с запятой (;).
-
Каждое predписание начинается с новой строки.
-
В конце predписания ставится точка с запятой (;).
*) Описываемый здесь язык Робик — это сокращенный вариант языка Робик-3, использующего для обучения школьников в Харьковской и Новосибирской школе юных программов.
Внимательного читателя может удивить отсутствие правил употребления заглавных букв. Объясняется это просто: для того, чтобы ЭВМ или робот использовали predписание, его необходимо набрать на клавишах терминала или другого аналогичного устройства, а буквы на клавиатуре — только заглавны е; поэтому совершенно безразлично, какими буквами будут написаны в журнале; здесь мы будем записывать их заглавны и буквами, но при выполнении наших заданий predписания можно писать по правилам русского языка: первый буква — заглавная, далее — строчные.
Тепер, зная общие правила записи predписаний в языке Робик, мы можем составить первую программу для описанного выше робота РД-1, который долженстерть с dockи и проверить класс на перемене.
Bot пример правильно программы:
ОТКРОЙ ОКНО;
НАМОЧИ ТРЯПКУ;
СОТРИ С ДОСКИ;
ЗАКРОЙ ОКНО;
СЯДЬ НА МЕСТО;
Задание 1.1. Среди приведены ниже примеры нуждной памяти правильные и перечисленные все ошибки в остальных программах.
Программа A
- СОТРИ С ДОСКИ;
- НАМОЧИ ТРЯПКУ;
- ОТКРОЙ ОКНО;
- ЗАКРОЙ ОКНО;
- СЯДЬ НА МЕСТ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 должен отнестись на терминале сообщение об этом, например:
‘Я ПРИБЫЛ В ТОЧКУ А’
Составить программу.
Г. Звеницгородский