Выбрать главу

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

— А проверки?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

— Да.

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

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

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

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

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

— Это почему?

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

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

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

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

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

— Почему?

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

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

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

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

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

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

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

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

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

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

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

— И…

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

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