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

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

Урок четвертый

 

 

ДАВАЙТЕ ГОВОРИТЬ О ЧЕМ-НИБУДЬ ДУХОВНОМ

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

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

«Кулинария! Дульче мелодия… Кулинария! Тру-ля-лял-ля… Кулинария! Кулинария! Ты — гармония Ты — любовь моя!»

— Доброе утро, — сказал Петя.

— Привет, — сказал Казимир. — Вот и все готово к нашему уроку.

— А что это за кнопки такие на пушке появились? — спросил Петя. — Вчера их не было.

— Это — очень интересные кнопки. Нажмешь на левую — орудие выстреливает банку тушенки. На правую надавишь — вылетает банка сгущенки. Всю ночь изобретал. С курицами покончено. Голос масс! Веление времени.

— Казимир, а вы не знаете, почему у нас в магазинах ни тушёнки, ни сгущёнки — ничего? Только по праздникам, и то не всегда?

— Магистр, — строго сказала Кристина. — Нельзя с ребенком все время говорить о еде! О еде и о еде! Это — непедагогично. Вы его растлеваете. Понятно вам это или нет?

— Я учу его программированию, — возразил Казимир. — А если я при этом прибегаю к кулинарным примерам, то что поделаешь? Не скрою, мне близка это тема… Вот у меня жена — подчеркиваю: профессор! — так она всегда с огромным интересом…

— Ах, да разве в этом дело? — перебила Кристина. — За ограждение не заплывать! — рявкнула она в мегафон матросам. — Кому говорю — не заплывать! Магистр! Дело не в том, что ваша жена любит готовить…

— А она не любит, — с достоинством сказал Казимир. — Она профессор. Готовлю всегда я. Вот эти руки готовят, — он показал свои руки. — Руки молодые…

— Да не в том дело, не в том, — настойчиво сказала Кристина.

— Вот вы поете: «гармони́я». А что такое «гармони́я», толком даже и не знаете.

— Знаю, — возразил Казимир. — Это — кулинария.

— Нет! — страстно воскликнула Кристина. — Нет и нет! Гармония — это… Ну, Магистр?

— Меланхоли́я, меланхоли́я! — наперебой подсказывали загоравшие матросы, которые потихоньку подползали поближе, жадно слушая спор своего начальства.

— Меланхолия, что ли? — спросил Казимир простодушно.

— Нет, — сказала Кристина. — Нет!

— А что?

— Это, прежде всего, духовная пища, — торжествуя, объяснила Кристина. — Духовная! А уж потом — физическая. Вот что такое ГАРМОНИ́Я.

— Как интересно, — сказал Казимир.

— Магистр, какая у вас главная методическая ошибка? — продолжала Кристина. — Если вы не можете обойтись без ваших кулинарных опытов, то — ладно. Но перед этим — обязательно! — вы должны говорить с ребенком о чем-нибудь духовном, понимаете? Только в этом случае мы обеспечим гармоническое развитие личности. — Она повернулась к Пете: — Отрок, хочешь гармонично развиваться?

— Нет, — сказал Петя.

— Не можешь — научим, не хочешь — заставим, — сурово произнесла Кристина.

— Ладно, — сказал Казимир, — поговорим с ним о чем-нибудь духовном. Гармония так гармония. Начинай, Кристина.

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

 

«ЭТО ЧТО? ХАЙКУ?»

— А это что? — спросила Кристина и достала с полки сборник японских стихов. — Хайку? Отрок, это ты читаешь хайку?

— Нет, это родители читают, — сказал Петя.

— А знаешь ли ты, отрок, — заговорила Кристина, — что, когда Басё осваивал дзэн у мастера Буттё, тот однажды спросил у него: «Чем вы занимались эти дни?», а Басё говорит: «После дождя мох особенно зелен». А Буттё говорит: «Что же раньше — Будда или зелень мха?» А Басё говорит: «Слышите, лягушка прыгнула в воду!» Вот, отрок, с этого и началась новая эпоха в хайку.

— Ну, чего затараторила? — недовольно спросил Казимир. — Ничего не понял. Кто осваивал дзэн?

— Басё, — ответила Кристина.

— А Буттё спросил у него: «Чем вы…»

— У кого спросил?

— У Басё.

— Так.

— «Чем вы, говорит, занимались эти дни?»

— Это Буттё спросил?

— Буттё, Буттё.

— А Басё?

— А Басё говорит: «После дождя мох особенно зелен».

— Не понял, — сказал Казимир. — Кто зелен?

— Мох, — сказала Кристина, — мох.

— А, — сказал Казимир, — так-так?

— А Буттё говорит: «Что же раньше? Будда или…»

— Будда — это бог такой, — пояснил Казимир.

— Знаю, — сказал Петя.

— …Что же, говорит, раньше, Будда или зелень мха?

— Так.

— А этот отвечает: «Слышите, лягушка прыгнула в воду?»

— Какое же резюме? — спросил Казимир. — При чем тут лягушка?

— Это значит, — отпускать свой ум, — объяснила Кристина.

— Как это?

— То есть, доверять ему… Дьявольщина, не помню без конспекта! Видите ли, Магистр, сосредоточенность на вопросе учителя предполагает остановку, разрыв связи с текущими событиями. А ученик не хочет разрывать эту связь. И потому отвечает не на вопрос, а на то, над чем действительно сосредоточена его мысль…

Петя вдруг зевнул.

— Полундра! — крикнула ему на ухо Кристина. — Прекрати этот цинизм! Разгильдяй!

— Продолжай, пупсик, — сказал ей Казимир. — Он больше не будет.

— Так вот, я говорю: ответ Басё заставил Буттё проникнуться его настроением в большей степени, если бы Буттё услышал логически обоснованный ответ. Никакой мистики, Магистр! Не полное отсутствие связи, а иной тип связи!

— Все с духовным? — спросил Казимир.

— Так точно.

— Что ж, хвалю. Так и жгешь глаголом. Ну, а теперь айда к нашему орудию.

— И правда, айдате, — сказала Кристина.

— Извини, Кристина, — сказал Магистр, вынимая шпагу, — я тебя, пожалуй, того…

— Ничего, ничего, — ответила она, — мне даже приятно, когда я — машина.

Она не договорила.

— «Шаварган-бух!» — произнес Казимир.

Кристина оцепенела. На голове у нее появился поварский колпак с двумя скрещенными мортирами.

— Что это за…

 

ПЕРЕМЕННАЯ — ВОТ ГЛАВНОЕ ДЕЙСТВУЮЩЕЕ ЛИЦО ЛЮБОЙ ПРОГРАММЫ

— … полоски были нарисованы? — спросил Казимир у Пети, когда они вышли на морской берег.

— Где?

— У тебя в комнате на дверном косяке?

— Это мама каждые полгода отмечает, на сколько я вырос.

— А ты разве растешь?

— Вы меня удивляете, Казимир, — сказал Петя. — А что, по-вашему, не расту?

— Мой вопрос — из тех, которые называются риторическими. Ответ на них заранее известен. Но должен же я с чего-то начать новую тему?

— А о чем она?

— О переменных, — сказал Казимир, и продолжал: — Вот я произнес это слово. А как ты его понимаешь?

— Как я его понимаю? Как и все. Вот, например, на небе — или есть тучи, или их нету. Тогда говорят: переменная облачность.

— Более строгое определение переменной дает математика, хотя в наших разговорах о программировании я стараюсь математики избегать. Так вот, математики говорят о переменной в двух смыслах. Во-первых, под ней подразумевается какой-либо ЭЛЕМЕНТ, принадлежащий какому-либо множеству. Например, ученик Петя Бочкин является элементом множества учеников шестого класса.

— Ничего себе — множество! Нас всего-то двадцать пять человек.

— Даже если ты был бы один, ты все равно считался бы множеством. Множеством, состоящим из одного элемента. Ну вот. А во-вторых, переменной можно назвать и какую-нибудь величину. Ну, скажем, рост ученика Пети Бочкина, и с этой величиной в любой момент времени связан элемент некоторого множества сантиметров… Какой у тебя рост?

— Сто тридцать шесть сантиметров.

— А когда-то был сто двадцать шесть. А когда-нибудь будет сто восемьдесят шесть… Одним словом, понятие «переменная» мы будем употреблять вот в этих двух смыслах. А сейчас приведи мне пример переменной, которая была бы элементом какого-нибудь множества.

— Весенние каникулы, — тут же ответил Петя.

— Хм… Поясни.

— Это — элемент множества, состоящего из трех элементов: летние каникулы, зимние каникулы и весенние каникулы.

— Ну, что же, верно. А теперь — пример второго типа переменных.

— Весенние каникулы, — сказал Петя, не моргнув.

— Поясни, — потребовал Казимир.

— А разве непонятно? Недавно я думал: послезавтра НАЧИНАЮТСЯ весенние каникулы. А сейчас думаю: послезавтра КОНЧАЮТСЯ весенние каникулы. Каникулы одни и те же, но когда они начинаются это одно, а кончаются — совсем другое.

— Убедительно, — сказал Казимир. — Я вижу, ты понял, что такое переменная. Так вот, переменная — это главное действующее лицо в любой программе.

 

КОНСТРУКЦИЯ ПРИСВАИВАНИЯ. ОПЕРАТОР ПРИСВАИВАНИЯ

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

— А прежнюю скорость компьютер забывает?

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

— Да, но ведь в следующую секунду скорость ракеты снова повысится?

— И тогда компьютер вызовет из памяти старое значение скорости и снова скажет: «переменной «скорость» присваивается такое-то значение». Например, два километра двадцать метров в секунду. И, что интересно, компьютер будет действовать по программе, которую ввел в него программист. А программа, если сильно упрощать дело, будет выглядеть так:

Или так:

— Ну что? — спросил Казимир. — Знакомые конструкции?

— Да, — сказал Петя. — Первая — это разветвление. А вторая — цикл.

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

И Казимир нарисовал шпагой на песке:

— Это все равно, как если соединить вместе два знака — «разделить» и «равняется», — сказал Петя. — Правда, Казимир?

— Да, — ответил Великий Магистр. — Те, кто его придумали, долго себе голову не ломали. Творили, так сказать, из подручного материала. Запомни: этот знак называется «оператор присваивания».

Казимир приблизился к орудию.

— А теперь вернемся к нашему обеду. Можешь ли ты сразу дать спецификацию для Исполнителя?

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

— Как бы ты назвал переменную, которая будет фигурировать в программе?

— Я бы назвал ее «заряд».

— Можно и так, — сказал Казимир. — Пиши программу.

И Петя написал:

ПОДОЙТИ К ОРУДИЮ ЗАРЯД:= СГУЩЕНКА ПОВТОРЯТЬ 3 РАЗА  ЕСЛИ  ОРУДИЕ НЕ ЗАРЯЖЕНО   ЗАРЯДИТЬ ОРУДИЕ   ВЫСТРЕЛИТЬ  КОНЕЦ ЦИКЛА КОНЕЦ УСЛОВИЯ ЗАРЯД:= ТУШЕНКА ПОВТОРЯТЬ 3 РАЗА  ЕСЛИ  ОРУДИЕ НЕ ЗАРЯЖЕНО   ЗАРЯДИТЬ ОРУДИЕ   ВЫСТРЕЛИТЬ  ИНАЧЕ   ВЫСТРЕЛИТЬ КОНЕЦ ЦИКЛА КОНЕЦ УСЛОВИЯ КОНЕЦ

 

МЕТКА. ОПЕРАТОР ПЕРЕХОДА

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

— Правильно.

— Можно вводить?

— Погоди. Не кажется ли тебе, что программа несколько длинновата?

— Ну и что? Зато правильно.

— После операторов присваивания идут совершенно одинаковые блоки, состоящие из конструкций разветвления и цикла…

— Я и сам вижу.

— Я знаю способ, который позволяет сделать программу в два раза короче. Нужно пометить специальной меткой весь блок команд, который следует после первого оператора присваивания, а после второго оператора присваивания — применить оператор перехода. — Подождите, Казимир! Я ничего не понимаю. Как — пометить? Что это за «оператор перехода»? р Меткой обычно служит какая-нибудь буква латинского алфавита, чаще всего «L». Ее ставят перед той командой, к которой нужно вернуться в ходе выполнения граммы. А приказом к возвращению к помеченной команде служит оператор перехода. Обозначается он так: «перейти к…». Или по-английски: «go to». Если в тексте граммы имеется выражение: «перейти к…» (или «go to…»), то Исполнитель прервет последовательный порядок выполнения команд, отыщет в своей памяти команду, помеченную «L», и выполнит именно эту команду.

— Я все понял, — сказал Петя. — Пишу новую программу с меткой и оператором перехода. Получается:

ПОДОЙТИ К ОРУДИЮ ЗАРЯД: = СГУЩЕНКА L ПОВТОРЯТЬ 3 РАЗА  ЕСЛИ  ОРУДИЕ НЕ ЗАРЯЖЕНО  ТО    ЗАРЯДИТЬ ОРУДИЕ    ВЫСТРЕЛИТЬ  ИНАЧЕ   ВЫСТРЕЛИТЬ  КОНЕЦ УСЛОВИЯ КОНЕЦ ЦИКЛА КОНЕЦ МЕТКИ ЗАРЯД: = ТУШЕНКА ПЕРЕЙТИ К L КОНЕЦ МЕТКИ КОНЕЦ

— Отлично! — сказал Казимир. — Перейдем к Кристине.

Через секунду Кристина открыла беглый огонь из кулинарно-артиллерийской установки, и шестеро наших тружеников весла и уключин обрели, наконец, то, о чем они так неистово мечтали.

— Не будем им мешать, — сказал Казимир, — пусть едят.

— Казимир, — спросил Петя, — покатайте меня на вашем клипере, а?

— Что значит покатайте? — строго спросил Казимир. — На боевых кораблях не катают. На них воюют. Кстати, я тебе не говорил, что завтра у нас морской бой с кракелюрами?

В это время стена дрогнула и начала медленно сдвигаться.

Последнее, что услышал Петя из своей комнаты, были слова Казимира:

— Ты назначен адмиралом!