— Но ведь прокладывать курс по западной части я не могу, — сказал Петя.
— Почему?
— А разве вы не понимаете? У меня не хватает для этого команд.
— Хватает, — сказал Казимир. — Нужно, Петя, нужно, чтобы «Котангенс» выходил в море по западной части бухты.
— Казимир, вы меня прямо удивляете. Не может «Котангенс» идти по западной части. Для этого Исполнитель должен понимать команду «Лево руля». Но она же не входит в набор стандартных команд. Корабль может идти или на север, или на восток. Неужели это не понятно?
— Корабль может идти на запад, — упрямо сказал Казимир. — При этом Рулевой не обязан понимать команду «лево руля». Достаточно двух команд «право руля» и «полный вперед».
— Как это? — спросил Петя.
— Сдаешься? — спросил Казимир.
— Нет, — сказал Петя, — подумаю.
ОПИСАНИЕ НЕСТАНДАРТНЫХ КОМАНД
— Казимир, — сказал Петя. — А что если после команды «право руля» и «полный вперед» перед кораблем опять появится мина?
— Прекрасный вопрос! — воскликнул Великий Магистр. — В самом деле, что — тогда?
— Тогда стандартная проверка обнаружит эту мину, и, значит, рулевой снова выполнит команду «право руля»…
— И…
— …и корабль пойдет в обратную сторону!
— Следовательно, рулевой выполнит команду «развернуться», верно?
— Верно.
— А ведь эта команда не входит в набор стандартных команд, так?
— Так. Просто рулевой два раза выполнит стандартную команду «право руля».
— Выходит, для того, чтобы повернуть корабль влево, рулевой должен…
— …Три раза выполнить команду «право руля»! — радостно ответил Петя.
— Вот мы с тобой и подошли к одному из самых интересных разделов программирования — описанию нестандартных команд через стандартные, — объявил Казимир.
Он щелкнул пальцами, и машинка сама напечатала текст:
ПРАВО РУЛЯ
ПРАВО РУЛЯ
ПРАВО РУЛЯ
КОНЕЦ
— Что здесь написано? — спросил Казимир.
— Команда «лево руля», — ответил Петя.
— Хорошо. Тогда составь программу выхода в открытое море вдоль западного побережья бухты.
Петя напечатал текст:
ПОЛНЫЙ ВПЕРЕД
ЕСЛИ
ПО КУРСУ МИНА
ТО
ПРАВО РУЛЯ
ПРАВО РУЛЯ
ПРАВО РУЛЯ
ИНАЧЕ
КУРС — НОРД
КОНЕЦ УСЛОВИЯ
КОНЕЦ
Казимир прочитал программу и сказал:
— Мы с тобой знаем, что программы могут состоять из трех программных конструкций. Скажи — каких?
— Из последовательных выполнений команд, из разветвлений и из циклов.
— Правильно. Так вот, кроме конструкций, в тексты программ могут входить и ОПИСАНИЯ нестандартных команд. Вот как, например, описывается команда «лево руля».
Машинка затрещала, и из нее вылетел текст:
ЛЕВО РУЛЯ
ГДЕ
КОМАНДА
ЛЕВО РУЛЯ
ОЗНАЧАЕТ
ПРАВО РУЛЯ
ПРАВО РУЛЯ
ПРАВО РУЛЯ
КОНЕЦ ОПИСАНИЯ
— Описание состоит из названия нестандартной команды, — оно, как видишь, занимает первую строку и из служебных слов «где… означает…» и «конец описания». По-моему, ничего сложного в описаниях нет. Главное, запомнить их форму. Теперь ты можешь написать новую программу выхода в открытое море и включить в нее описание команды «лево руля». Петя подумал и напечатал:
ПОЛНЫЙ ВПЕРЕД
ЕСЛИ
ПО КУРСУ МИНА
ТО
ЛЕВО РУЛЯ
ГДЕ
КОМАНДА
ЛЕВО РУЛЯ
ОЗНАЧАЕТ
ПРАВО РУЛЯ
ПРАВО РУЛЯ
ПРАВО РУЛЯ
КОНЕЦ ОПИСАНИЯ
ИНАЧЕ
КУРС — НОРД
КОНЕЦ УСЛОВИЯ
КОНЕЦ
— Ар-лята! Учатся летать! — воодушевленно пропел Казимир. — А теперь — по коням!
Шлюпка, словно птица, понесла их навстречу паруснику, и вот Петя с Казимиром взлетают по трапу на борт «Котангенса», вот — они на капитанском мостике, вот программа введена в Кристину, и вот — клипер летит по морской глади, ловко уклоняясь от бочек с квашеной капустой, расставленных проклятыми кракелюрами!
И был бой. И был залп. Из всех орудий. Солеными огурцами! И что вы думаете? Кракелюры перековались в один миг! И под звон мандолин, с песней «Лаванда! Горная лаванда!» они все, как один, отправились на субботник по благоустройству территории. Высаживать хризантемы. А может, васильки или какие-нибудь лютики. Впрочем, к программированию данное обстоятельство никакого отношения не имеет, а потому на этом месте мы и простимся с нашими героями — Петей и Казимиром.
Читать дальше