Пять уроков Великого Магистра, или повесть о том, как Петя Бочкин изучал программирование

Рябченко Виктор

Урок пятый

 

 

КТО ТАКИЕ КРАКЕЛЮРЫ?

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

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

— Кракелюры?!! — зарычал Казимир. — Кто такие кракелюры?!! Это — кракелюры!!!

Когда он успокоился, Петя узнал от него следующее. Население планеты Занге-Зонге-Зунге-Зунд было, в общем, миролюбивым. На 99 % — гуманисты. Половина оставшегося процента — философы. А полпоследнего процента — кракелюры. То есть жители герцогства Кракелюр. Сплошь — бандиты и агрессоры. И дубье-дубьем. Интеллекта — ноль. Духовная жизнь на точке замерзания. Ученые планеты установили, что перевоспитать кракелюров можно только одним способом — забросать герцогство солеными огурцами. Оказывается, соленые огурцы обладают, одним загадочным свойством: стоит даже самому буйному кракелюру не то чтобы съесть, а только взглянуть на соленый огурец, как сразу теряется вся его агрессия. Вместо того, чтобы пакостить прогрессивному человечеству, у них возникает желание выращивать хризантемы и играть на мандолине. Вот почему кракелюры не любят соленых огурцов. Они объявили войну соленым огурцам. Единственное место для соленых огурцов — это трансформаторные будки. Все нормальные люди рисуют на них череп с костями, а кракелюры — с соленым огурцом. На этом месте Петя перебил Великого Магистра.

— А как можно его нарисовать? — недоверчиво спросил он.

— Да очень просто! Рисуешь огурец, а внутри пишешь: «соленый». Или «натрий хлор». Если образования хватит.

— Так вот, сегодня клипер «Котангенс» под командованием Великого Магистра и Пети Бочкина должен был отправиться на операцию. Нужно было подойти к берегам герцогства и подвергнуть его столицу бомбардировке солеными огурцами. Из всех орудий. Но кракелюры, хитрые бестии, что-то пронюхали. Они заминировали всю прибрежную акваторию. Сегодня, когда клипер шел сюда, в бухту, чтобы забрать на борт Петю («адмирала Бочкина», тут же поправил Казимир), пришлось пробираться по сплошным минным полям… Мины кракелюров представляют из себя дубовые кадушки, начиненные квашеной капустой. Кстати, это еще раз подтверждает собственное убожество кракелюров. Прочная логика! Они, мол, нас — огурцами, а мы их — капустой! Не выйдет, господа! Капусту мы любим, хотя квашеную, по правде сказать, не очень. Но никакого вреда она нам не приносит, неприятно только. Рванет такая мина под днищем, обляпает весь корабль с носа до кормы. Б-р-р… Противно!

— А-а, так это — капуста на вас? — догадался Петя.

— Где?

— А вон — на плече.

Казимир содрогнулся от омерзения.

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

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

— А что я должен делать? — поинтересовался Петя.

Казимир зачем-то полез к Пете за шиворот и достал оттуда эскимо на палочке.

— Ангина прошла? — спросил он.

— Прошла.

— Тогда это тебе.

Потом он снова полез к Пете за шиворот и извлек оттуда вазу с букетом благоухающих роз.

— Это — твоей маме, — сказал Казимир и поставил вазу на телевизор. Затем он вытащил у Пети из-за шиворота огромную книгу под названием «Краткий философский словарь».

— Ну, это — моей жене, — сказал Казимир и пояснил: — Она у меня профессор.

Он в четвертый раз полез к Пете за шиворот, приговаривая: «Где же она? Где?»

— Что вы там ищете, Казимир, — возмутился Петя. — У меня там ничего нет!

— Ну да — ничего! А это что? — И Казимир вытянул из-под Петиной рубашки офицерский планшет с вложенной в него картой. Он развернул карту и расстелил ее на столе.

— Смотри сюда, — сказал Казимир.

 

ПЕТЯ СОСТАВЛЯЕТ ПРОГРАММУ ПРОХОДА КЛИПЕРА ПО МИННОМУ ПОЛЮ

Карта была такая:

— Вот — бухта, где стоит наш клипер, — пояснил Казимир. — Выход из нее заминирован кракелюрами. Здесь, к востоку, мины стоят гуще, видишь? Ты должен вывести корабль в открытое море.

— Сам?

— Зачем же? У руля будет стоять Кристина. То есть бывшая Кристина, а в настоящий момент Исполнитель-рулевой. Ты должен составить для нее программу выхода в открытое море.

— А потом?

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

— Какие команды можно использовать в программе?

— Стандартных команд три: «курс — норд» (то есть на север) «право руля» и «полный вперед».

— А проверки?

— Только одна: «прямо по курсу мина».

— Все ясно, — сказал Петя. — Я выдам программу одной левой!

— Сначала спецификацию, — предупредил Казимир.

— Чтобы выйти в открытое море, нужно идти на север, — начал Петя. — Значит, первые две команды в программе должны быть: «курс — норд» и «полный вперед». Так?

— Продолжай, — сказал Казимир.

— Предположим, что впереди по курсу появится мина. Если Исполнитель ее увидит, то должен выполнить команду «право руля». Так?

— Продолжай, — сказал Казимир. — Но учти, что после этой команды мы повернем с норда на ост. С севера на восток. А открытое море у нас — на норде.

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

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

А Петя напечатал такую программу:

 ПОВТОРЯТЬ 1000000 РАЗ      ЕСЛИ      ПО КУРСУ МИНА      ТО         ПРАВО РУЛЯ         ПОЛНЫЙ ВПЕРЕД      ИНАЧЕ         КУРС НОРД         ПОЛНЫЙ ВПЕРЕД      КОНЕЦ УСЛОВИЯ  КОНЕЦ ЦИКЛА КОНЕЦ

— Готово, — сказал Петя.

Казимир дернул головой и перекинул монокль из правого глаза в левый.

— Так, — сказал он. — Ты использовал конструкцию разветвления и цикла…

— Да.

— А почему ты написал: «повторять миллион раз»? Почему не полмиллиона? Или не десять миллионов?

— Для ровного счета, — ответил Петя. — Откуда я знаю, сколько мин нам встретится, пока мы не выйдем в открытое море? Но уж не больше миллиона…

— А если миллиард?

— Тогда мы взорвемся, — хладнокровно ответил Петя. — Миллион мин объедем, а на миллион первой — взорвемся.

— А мы с твоей программой еще раньше взорвемся, — заметил Казимир. — Или сядем на мель.

— Это почему?

— Гляди, — и Казимир начертил на карте курс корабля:

— При каждой встрече с миной, — начал объяснять Казимир, — Исполнитель будет выполнять команду «право руля». Поскольку в восточной части бухты минное поле очень густое, то «Котангенс» будет стремительно отклоняться к востоку. А так как береговая дуга бухты в этом месте круто уходит на север, то мы сядем на мель раньше, чем пересечем минное поле. Но это — в лучшем случае. А в худшем — мы столкнемся с миной сразу после команды «право руля». Ведь у Исполнителя отсутствует проверка «справа по борту мин нет», и поворачивать корабль Кристина будет вслепую. А вдруг как раз в том месте, куда она повернет, — стоит мина? Разве можно вслепую разъезжать по минным полям? Нет, адмирал, ваша программа никуда не годится.

— А что же делать? — спросил Петя.

— Как что? — удивился Казимир. — Нужно делать то, что говорит нам карта. А она говорит: в западной части бухты мин гораздо меньше, чем в восточной. Значит, идти по западной части безопаснее. А тебя почему-то несет в восточную.

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

— Почему?

— А разве вы не понимаете? У меня не хватает для этого команд.

— Хватает, — сказал Казимир. — Нужно, Петя, нужно, чтобы «Котангенс» выходил в море по западной части бухты.

— Казимир, вы меня прямо удивляете. Не может «Котангенс» идти по западной части. Для этого Исполнитель должен понимать команду «Лево руля». Но она же не входит в набор стандартных команд. Корабль может идти или на север, или на восток. Неужели это не понятно?

— Корабль может идти на запад, — упрямо сказал Казимир. — При этом Рулевой не обязан понимать команду «лево руля». Достаточно двух команд «право руля» и «полный вперед».

— Как это? — спросил Петя.

— Сдаешься? — спросил Казимир.

— Нет, — сказал Петя, — подумаю.

 

ОПИСАНИЕ НЕСТАНДАРТНЫХ КОМАНД

— Казимир, — сказал Петя. — А что если после команды «право руля» и «полный вперед» перед кораблем опять появится мина?

— Прекрасный вопрос! — воскликнул Великий Магистр. — В самом деле, что — тогда?

— Тогда стандартная проверка обнаружит эту мину, и, значит, рулевой снова выполнит команду «право руля»…

— И…

— …и корабль пойдет в обратную сторону!

— Следовательно, рулевой выполнит команду «развернуться», верно?

— Верно.

— А ведь эта команда не входит в набор стандартных команд, так?

— Так. Просто рулевой два раза выполнит стандартную команду «право руля».

— Выходит, для того, чтобы повернуть корабль влево, рулевой должен…

— …Три раза выполнить команду «право руля»! — радостно ответил Петя.

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

Он щелкнул пальцами, и машинка сама напечатала текст:

  ПРАВО РУЛЯ   ПРАВО РУЛЯ   ПРАВО РУЛЯ КОНЕЦ

— Что здесь написано? — спросил Казимир.

— Команда «лево руля», — ответил Петя.

— Хорошо. Тогда составь программу выхода в открытое море вдоль западного побережья бухты.

Петя напечатал текст:

ПОЛНЫЙ ВПЕРЕД ЕСЛИ ПО КУРСУ МИНА ТО   ПРАВО РУЛЯ   ПРАВО РУЛЯ   ПРАВО РУЛЯ ИНАЧЕ   КУРС — НОРД КОНЕЦ УСЛОВИЯ КОНЕЦ

Казимир прочитал программу и сказал:

— Мы с тобой знаем, что программы могут состоять из трех программных конструкций. Скажи — каких?

— Из последовательных выполнений команд, из разветвлений и из циклов.

— Правильно. Так вот, кроме конструкций, в тексты программ могут входить и ОПИСАНИЯ нестандартных команд. Вот как, например, описывается команда «лево руля».

Машинка затрещала, и из нее вылетел текст:

ЛЕВО РУЛЯ ГДЕ КОМАНДА  ЛЕВО РУЛЯ ОЗНАЧАЕТ   ПРАВО РУЛЯ   ПРАВО РУЛЯ   ПРАВО РУЛЯ КОНЕЦ ОПИСАНИЯ

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

 ПОЛНЫЙ ВПЕРЕД  ЕСЛИ   ПО КУРСУ МИНА  ТО   ЛЕВО РУЛЯ  ГДЕ  КОМАНДА  ЛЕВО РУЛЯ  ОЗНАЧАЕТ     ПРАВО РУЛЯ     ПРАВО РУЛЯ     ПРАВО РУЛЯ  КОНЕЦ ОПИСАНИЯ  ИНАЧЕ   КУРС — НОРД  КОНЕЦ УСЛОВИЯ КОНЕЦ

— Ар-лята! Учатся летать! — воодушевленно пропел Казимир. — А теперь — по коням!

Шлюпка, словно птица, понесла их навстречу паруснику, и вот Петя с Казимиром взлетают по трапу на борт «Котангенса», вот — они на капитанском мостике, вот программа введена в Кристину, и вот — клипер летит по морской глади, ловко уклоняясь от бочек с квашеной капустой, расставленных проклятыми кракелюрами!

И был бой. И был залп. Из всех орудий. Солеными огурцами! И что вы думаете? Кракелюры перековались в один миг! И под звон мандолин, с песней «Лаванда! Горная лаванда!» они все, как один, отправились на субботник по благоустройству территории. Высаживать хризантемы. А может, васильки или какие-нибудь лютики. Впрочем, к программированию данное обстоятельство никакого отношения не имеет, а потому на этом месте мы и простимся с нашими героями — Петей и Казимиром.