К ЮНОМУ ЧИТАТЕЛЮ
Дорогой друг! Ты открыл книжку, которая не только развлечет тебя, и увлечет своим сюжетом, но и познакомит с удивительным, загадочным и… давно известным миром информатики. Да, да, не удивляйся. Все мы живем в бескрайнем океане информации. Наши ощущения — это восприятие и переработка информации. Наши мысли, мечты, жизненные планы — обработка информации. Общаясь со своими друзьями ты обмениваешься с ними информацией. Она нескончаемым потоком обрушивается на тебя с экрана телевизора, из приемника, магнитофона, со страниц книг, газет, журналов. Даже во сне твое сознание перерабатывает информацию, хотя, быть может, ты и не помнишь, что тебе приснилось.
Чтобы подчинить себе информационный хаос, навести в нем порядок и сделать информацию послушной и доступной, 50 лет назад ученые создали удивительную машину. Все, что было изобретено до нее, усиливало физическую силу человека — экскаватор, трактор, автомобиль, самолет. Им позволено передавать и принимать информацию на большие расстояния. Однако получать новую информацию на основе переработки известной может только компьютер. Человек получил в свои руки устройство, позволяющее многократно усилить возможности его мышления. Такого еще никогда не было.
Хочешь научиться управлять этой машиной? И не просто управлять, но и сделать ее послушной помощницей в решении самых разных задач и в школе, и дома, и после окончания школы? Если это так, то не откладывай книгу. Смелее берись за дело, но при этом помни: если тебе что-то особенно понравилось, прочитай это место еще раз, а если что-то показалось непонятным, перечитывай это место до тех пор, пока истина не откроется тебе в награду за труд и терпение. Беседы героев этой книги, их рассуждения помогут тебе сделать первые шаги на пути к Великой Истине. Если ты пока не увлечен компьютерами или даже чувствуешь робость перед ними, то веселая книга, лежащая перед тобой, поможет тебе преодолеть это чувство и вызвать интерес к общению с ЭВМ. Итак, в добрый путь!
В. Стукалов, кандидат педагогических наукУрок первый
В 96-Й КВАРТИРЕ ПРОИСХОДИТ ЧТО-ТО СТРАННОЕ…
Утром 26-го марта, в первый день весенних каникул, в девяносто шестой квартире раздвинулась стена. У той стены стояла тахта. На тахте лежал мальчик, ученик шестого класса Петя Бочкин. Петины родители уже ушли на работу, и в квартире он был один.
Петя уже включил телевизор и ждал, когда засветится экран. И вдруг — ф-р-р! Стена взяла и раздвинулась! Одна ее половина уехала влево, а другая — вправо. Как двери в метро — представляете? Линия раздела прошла как раз по листку со словами «Распорядок дня». «Распор…» ушло в одну сторону, а «…ядок дня» — в другую! И в распахнувшемся пространстве Петя увидел — что бы вы думали? Внутренности девяносто седьмой квартиры, где жил его друг Игорь? Хо-хо! Как бы не так! Бескрайняя океанская гладь открылась взору, полуденное небо разметнулось вверху, трехмачтовый корабль покачивался невдалеке на волнах, а по направлению к тахте, на которой замер ошеломленный Петя, неслась по волнам шлюпка…
Петя оглянулся. Комната его никуда не исчезла. Все стояло на своих местах, а на телевизионном экране уже мерцала заставка программы «Время», звучали ее позывные. Исчезла только стена, за которой, по идее, должна была находиться девяносто седьмая квартира. Петя по-прежнему торчал на тахте. Две ее ножки с одной стороны упирались в паркетный пол комнаты, а две другие ножки воткнулись в крупный, зернистый океанский песок. Прозрачные волны подбегали к ним и, откатываясь, оставляли за собой две ложбинки в песке. Виден был также срез двух боковых панельных стен девяносто шестой квартиры. За ними начинался ослепительно белый, совершенно пустынный морской берег, уходящий плавным изломом с обеих сторон — вперед к горизонту. Квартира Бочкиных с геометрической точностью находилась в середине этой береговой дуги.
ЗАГАДОЧНЫЕ ГОСТИ
Шлюпка между тем приближалась.
На носу ее сидела девица в зеленом платье. Рядом с ней, расставив ноги, стоял дядька с седыми висками, во фраке, со шпагой на боку и с моноклем в глазу. На голове у него — бескозырка. Черная лента сверкала золотой надписью: «Котангенс».
На веслах сидело шесть гребцов. Их спины блестели от пота. Гребли они дружно, весело и бодрыми голосами пели:
Под музыку Вивальди! Вивальди! Вивальди! Под музыку Вивальди! Под шорох за окном! Печалиться давайте! Давайте! Давайте! Печалиться давайте! Об этом и о том!«Где-то я все это видел», — мелькнуло в голове у Пети. Мелькнуло и пропало, потому что человек с седыми висками приказал гребцам:
— Суши весла. Приехали.
Петя слез с тахты и отступил в глубину комнаты.
Шлюпка ткнулась носом в берег в полуметре от того места, где стояла тахта. Дядька во фраке, придерживая шпагу, соскочил на берег и помог сойти зеленой девице. С корабля на рейде выстрелила пушка. Вместо ядра из жерла вылетела ворона и уселась на рее.
— Тук-тук-тук, — сказал человек во фраке. — Кто-кто в теремочке живет?
— Здесь живет Петя Бочкин, — тут же отозвалась девица.
— Петя Бочкин! — радостно воскликнул незнакомец. — Неужели это не сон?
Незнакомец вдруг замер.
— Что с вами, Магистр? — встревоженно спросила девица.
— Пробуждается поэзия во мне, — с тихим восторгом ответил человек во фраке. — Какая встреча! Поэма просится к перу, перо — к бумаге… — Тут он встрепенулся и продекламировал:
Я дошел почти до точки, Я не спал почти всю ночь. Думал я о теремочке, Где живет наш Петя Боч…Незнакомец подумал немного и добавил:
— …кин.
— Гениально! — льстиво сказала зеленая девица. — Сколько чувства, сколько экспрессии! О, Магистр! А какая бездна содержания при общей скупости выразительных средств! В общем, словам тесно, а мыслям, Магистр, просторно! Ах, Магистр, я прямо без ума от ваших лирических шедевров. Прямо без ума.
— Ладно, Кристина, помолчи, — велел тот, кого зеленая девица называла Магистром.
Кристина тут же умолкла.
— Доброе утро, товарищ Бочкин, — приветливо сказал Магистр.
— Доброе утро, — ответил Петя. — А вы откуда? Вы не с первого этажа? Там у нас артисты живут из муз-комедии.
— Нет, — ответил незнакомец. — Мы не с первого этажа. Мы, видишь ли, вон с этого клипера. Ну-с… Будем знакомиться. Казимир, — шея Казимира при этом вытянулась. С верхотуры голова Казимира вежливо поклонилась Пете.
Затем шея втянулась назад. Что интересно, бескозырка на голове Казимира даже не шелохнулась!
— Здравствуй, отрок, — сказала зеленая.
«Где же я все это видел?» — снова подумал Петя.
— Кто вы? — спросил он. — Как вы сюда попали?
НЕЗНАКОМЦЫ РАССКАЗЫВАЮТ О СЕБЕ
То, что услышал Петя, было невероятно. Кроме того пространства, где живет он, Петя Бочкин, оказывается, существует еще одно: А-Бэ-Цэ-Дэ-Е-Эф-Же-Аш — Пространство. Там имеется точно такая же вселенная, как и тут. Со своими галактиками и планетными системами. Имеется там и Планета Чудес под местным названием Занге-Зонге-Зунге-Зунд…
ДАЛЬШЕ НЕ НАДО
— Дальше не надо, — сказал Петя. — Я все понял. Вы не существуете. Это я вас сам придумал. И ваше пространство, и Планету Чудес… А лично вы, Казимир, мне когда-то приснились. То есть мне приснилось слово «длинношеее». И оно было живое и с бескозыркой. И вы, Кристина, мне тоже приснились. В общем-то не вы, а наша пионервожатая… Ну-ка, скажите «пионер»!
— Пионэр, — сказала Кристина.
— Вот и она точно так же говорит. А теперь скажите «фасоль».
— Хвасоль.
— И еще скажите: «Древний Рим».
— Дрэвный Ррм, — буркнула Кристина.
— Точь-в-точь, как наша вожатая. А скажите, Кристина, вы хотите стать министром просвещения?
— Очень хочу, — не задумываясь, ответила та.
— И наша вожатая тоже хочет. Чтобы всеми командовать, всех учить. Так вот, мне приснилось, что она превратилась в робота. И стала зеленой… В общем, вы — это мой сон. И, значит, вас нет. Вы не существуете.
ЧТО ЭТО ЗНАЧИТ — СУЩЕСТВОВАТЬ?
— Почему вы думаете, что мы не существуем? — насмешливо спросил Казимир. Он подбросил свой монокль чуть ли не к самой люстре и, выгнув шею, стремительно поймал его глазом. Шейные позвонки Казимира в этот момент хряснули с такой силой, что ворона, сидевшая на рее, взлетела и каркнула:
— Казимир-р-р! Какого чер-р-р-рта!
— Так почему же все-таки мы не существуем? — повторил свой вопрос Казимир.
— Потому что вы — плод моего воображения, — сказал Петя.
— Ну и логика! — воскликнул Казимир. — А само-то твое воображение? С ним как? Существует оно или нет?
— Существует, — ответил Петя, подумав.
— А плоды воображения, стало быть, не существуют?
— Стало быть, нет.
— Ну и логика! — повторил Казимир. — По-твоему выходит, что если существует яблоня, то у нее не должно существовать яблок. Так, что ли?
— Н-нет, — неуверенно сказал Петя. — Не так.
— Да, — гордо сказал Казимир, — да! Мы с Кристиной действительно плод твоего воображения. Но что тебя тут смущает, не могу понять? Мы — материализация твоей фантазии — ну и что? Ах, друг мой, а тебе не приходило в голову, что и ты сам можешь быть плодом чьего-то воображения? Что в этом ужасного? А тот, автор, который тебя придумал, в свою очередь, также может оказаться материализованным результатом чьей-то фантазии… Оглянись вокруг, и ты увидишь: все, что тебя окружает, сначала было придумано в чьем-то мозгу, а уж потом стало тем, что есть. И вот это кресло, и стол, и телевизор, и одежда, которая на нас с тобой, да все вокруг!
— Ладно, — сказал Петя. — Вы меня убедили. Что дальше?
ГОСТИ ПРОДОЛЖАЮТ РАССКАЗЫВАТЬ О СЕБЕ
А дальше было вот что.
Оказывается, на Планете Чудес имеется такая организация — Чудеса-с-Доставкой-на-Дом. Создана она для того, чтобы облегчить жизнь Самым Несчастным Школьникам. На сегодняшний день в списке Самых Несчастных Школьников под номером один стоит он, Петя Бочкин.
Почему?
Потому что:
а) сегодня начались весенние каникулы;
б) вчера вечером Петя заболел ангиной;
в) по данным бюро прогнозов Планеты Чудес, эта болезнь продлится до самого последнего дня каникул, и значит, всю эту неделю Пете будет запрещено выходить на улицу;
г) в первый день четвертой четверти Петя полностью выздоровеет, и его погонят в школу.
Чью еще судьбу можно назвать более кошмарной?
Короче говоря, Планета Чудес, содрогнувшись от сострадания к Пете Бочкину, срочно снарядила к нему экспедицию в составе Казимира и его секретарши — Кристины.
А для чего? — спросил Петя.
— Как для чего, голубчик? — удивился Казимир, — Чтобы развлекать тебя! Жалко ведь, если каникулы пропадут.
— Так вы, значит, работаете в этом отделе? Как его…
— Ну да! Чудеса-с-Доставкой-на-Дом.
— А кем?
— Кристина, кем я там работаю? Все время забываю.
— Великим Магистром, — сказала зеленая.
— Во! — сказал Казимир. — Видал? Я — Великий! Но обращаются ко мне просто — Магистр. Без парадности. Ну ее. А ты можешь называть меня по имени.
— А отчество у вас есть?
— Нет. Сирота я. Круглая сирота.
— Круглый, — поправил Петя.
— Почему — круглый? Если сирота, то — круглая. Ведь не говорим же мы — «круглый Луна», верно? — Было непонятно: шутит Казимир или нет.
— Значит, вы мне будете чудеса показывать? — спросил Петя.
— Именно так.
— А какие?
— Педагогические, — быстро сказал Казимир. — Я, дружок, специалист по педагогическим чудесам. Великий, так сказать, Магистр.
— А как это — педагогические чудеса!
— Тебе как объяснять — в широком или узком смысле?-
— Магистр! — вмешалась Кристина. — Так у нас все время уйдет на разговоры вокруг да около. А времени у нас мало. Позвольте, я растолкую ребенку цель нашего визита?
— Давай, — согласился Казимир.
— Отрок! — начала зеленая. — Великий Магистр прибыл сюда, чтобы показать тебе свое могущество. За короткий срок он может научить тебя чему угодно. Чему ты хочешь научиться?
— Плеваться, — сказал Петя, не раздумывая. — И еще — свистеть в четыре пальца. И на гитаре играть. И еще — как сделать поджиг?
— Что — сделать?
— Поджиг.
— Это — такой пистолет, — объяснил Казимир. — Берется латунная трубка, насыпаешь туда спичечных головок, штук пятьдесят, бац — и нет глаза. Давай, Петя, давай, сделаем поджиг! Ох, и устроим взрывчик!
Один глаз Казимира при этих словах зажмурился, а другой хищно сверкнул сквозь монокль.
ПЕТЯ СОГЛАШАЕТСЯ ИЗУЧАТЬ АЛГОРИТМИЧЕСКИЙ ЯЗЫК
— Магистр, позвольте вас на минутку, — сказала Кристина. — Назад! На место! — закричала она вдруг гребцам, которые вылезли из шлюпки на песок.
Гребцы снова уселись по своим местам.
Кристина отвела Казимира в сторону и начала вполголоса что-то втолковывать ему. До Пети доносились только обрывки фраз: «Это же не педагогично… А я вам говорю: не педагогично… Без пяти минут академик, а как дитя, ей-богу… Что ж с того, что сам хочет?.. Может, он землетрясение захочет устроить…» Потом она подошла к Пете и сказала:
— Отрок, мы будем изучать языки. Ничего кроме языков. Хочешь за одну неделю изучить малайский язык?
— Нет, — сказал Петя.
— Тогда язык птиц и зверей?
— Нет.
— Разве ты не любишь биологию?
— Не то, чтобы нет, — уклончиво сказал Петя, — но и не то, чтобы да.
— А что ты любишь?
— Технику.
— Отлично! — воскликнул Казимир, приблизившись. — Тогда мы с тобой изучим машинный язык!
— Ну да, — сказал Петя, — такого языка вовсе и нету…
— Есть! — хором ответили Казимир и Кристина.
— Есть, — повторили они радостно.
Вот с этого все и началось.
КРИСТИНА ПРЕВРАЩАЕТСЯ В РОБОТА ИСПОЛНИТЕЛЯ
— Итак, начнем, — сказал Казимир, потирая руки.
Но тут Кристина завопила изо всех сил:
— Куда?! Куда?! Назад!
Это она кричала гребцам, которые, покинув шлюпку! медленно брели куда-то по берегу.
— В столовую пошли, — сказал Казимир. — Отвяжись ты от них, Кристина.
— Нельзя! — строго ответила она. — До перерыва три минуты шестнадцать секунд. — И гребцам: — Назад, разгильдяи! Кругом марш! Под трибунал захотели?
— Ну ладно, мне это надоело, — промолвил Казимир вполголоса и вынул из ножен свою шпагу. Затем он опустил ее на плечо Кристины и произнес:
— Шаварган бух!
Кристина икнула и умолкла на полуслове. Лицо у нее окаменело, а внутри что-то звякнуло.
— Что вы с ней сделали? — спросил Петя.
— В робота превратил. Видишь ли, Кристина может пребывать в одном из двух агрегатных состояний… Кстати, что такое агрегатное состояние?
— Ну, это когда вода, например, может быть или жидкой, или па́ром, или там льдом…
— Правильно. Вот и Кристина может быть или человеком, или роботом. Да что я говорю — ведь все это плод твоего воображения. Ты ведь все это сам придумал, — тут Казимир повернулся к гребцам: — Вперед, орлы! Приятного аппетита!
«Под музыку Вивальди!» — грянули матросы и, выстроившись в колонну, двинулись по безлюдному берегу куда-то вдаль, к линии горизонта. На обед. А может, на завтрак. Но не исключено, что и на ужин.
— Кстати, — сказал Казимир, — а не перекусить ли в нам?
— А когда вы начнете учить меня машинному языку?
— А я тебя уже учу, — ответил Казимир.
ПЕТЯ СОСТАВЛЯЕТ ПЕРВУЮ ПРОГРАММУ
— Между прочим, — продолжал Великий Магистр, — машинный язык еще называется алгоритмическим языком или программным языком. А человека, который умеет переводить человеческий язык на машинный, называют программистом.
— Итак, вот перед тобой Кристина. Сейчас она — робот-официант. Начнем с того, что ты будешь давать ей команды, и, поскольку ты не знаешь машинного языка, она же и станет переводить их на этот язык. То есть составлять за тебя программы. Ну, что же. Приступим. Командуй.
— А что я должен говорить?
— Скажи ей: а ну-ка, Кристина, организуй чаек для меня и для Магистра.
— А ну-ка, Кристина, организуй чаек для Магистра и для меня, — повторил Петя.
Перед Кристиной-роботом прямо из воздуха возникла пишущая машинка с вложенным листом бумаги[1], на которой Кристина в один миг лихо отстучала:
ОРГАНИЗОВАТЬ ЧАЕПИТИЕ ДЛЯ ДВУХ ПЕРСОН.
Петя вытащил лист бумаги. Машинка тут же растворилась в воздухе.
— Теперь эту программу надо как-то ввести в Исполнителя, — сказал Казимир и пояснил: — При всяком превращении Кристины в робота мы станем называть ее Исполнителем…
— Его, — поправил Петя. — если робот, то его.
— Но ведь ее зовут Кристина, — возразил Казимир, — и значит, надо говорить — «ее». И вообще о филологических вопросах со мной лучше не спорить. Тут я — Великий Магистр. Кого хочешь переспорю.
— Да я вижу… — сказал Петя.
— Итак, — продолжал Казимир, — отныне любую машину мы будем называть «Исполнителем». Подчеркиваю: любую.
Казимир снял с себя бескозырку и нахлобучил ее на голову Кристины.
— Клади программу под бескозырку, — приказал он.
Петя положил программу под бескозырку.
— Эту процедуру мы будем называть «вводом программы», — объяснил Казимир. В действительности программа вводится в машину несколько иначе, но в данный момент это несущественно.
Казимир обошел Кристину вокруг и с чувством удовлетворения пропел:
— Ар-лята! Учатся летать! — он взглянул на Петю и велел:
— А теперь трахни ее по голове кулаком!
— Зачем?
— Затем, что эту процедуру мы будем называть командой «Пуск».
Петя приблизился к Кристине и легонько хлопнул ее по бескозырке.
— Можно было и сильнее… — начал Казимир, но тут Кристина вздрогнула и монотонно заговорила:
— Программа не прошла. Программа не прошла. Программа не прошла.
— Казимир, программа не прошла, — сказал Петя.
— Отлично! — почему-то обрадовался тот. — Программа не прошла! Она и не должна была пройти.
— Почему?
— Да потому, что в колхоз Приехал бравый матрос, Приехал бравый матрос — Вот и ответ на вопрос! —бодро пропел Казимир. Он прошелся по комнате, разглядывая обстановку, остановился возле репродуктора.
ЧТО ДОЛЖЕН ЗНАТЬ ПРОГРАММИСТ ОБ ИСПОЛНИТЕЛЕ
— Это что? — спросил Казимир.
— Радио.
— Включи.
Петя включил репродуктор.
— Отлично, — сказал Казимир. — А теперь сделай так, чтобы эта штука засветилась.
— Чтобы радио — засветилось? — переспросил Петя.
— Да.
— Но оно не может светиться, оно может только говорить.
— Отлично, — сказал Казимир. — А вот это что? Люстра?
— Да.
— Она может светиться?
— Может.
— Включи.
Петя подошел к стене и притронулся к выключателю. Люстра засветилась.
— А теперь добавь голубого цвета.
— К чему добавить голубого цвета?
— Вот к этому, — Казимир показал на горящую люстру.
— Но она горит только одним цветом, — сказал Петя. — Белым. К ней нельзя добавить другой цвет.
— Прекрасно. А вот, я вижу, у вас телевизор стоит, какой марки?
— «Фотон».
— Цветной?
— Цветной.
— Включи.
Петя включил телевизор.
— Дивная картина, — сказал Казимир. — Только зеленых тонов не хватает.
— Сейчас добавлю, — сказал Петя.
— Не надо, — остановил его Казимир. — Ты лучше делай так, чтобы этот телевизор поехал.
— Куда?
— Ну, скажем… в Харьков. Хороший, говорят, город.
— Как же он может поехать без колес?
— Хм… — сказал Казимир. — Нет колес… Логично. И что же из этого следует?
— Что?
— А то. У каждого Исполнителя (а мы договорились называть Исполнителем любую машину) имеется свой набор допустимых команд. То есть таких команд, которые ему понятны. Их еще называют «стандартными командами». Электрическая лампочка, например, понимает только две команды — «включись» и «выключись».
— А как она понимает? Ведь ей никто ничего не говорит…
— Для Исполнителя нет никакой разницы между тем, каким образом ему отдают команды. Ты нажимаешь на выключатель и таким способом приказываешь лампочке: «включись»! В принципе можно сделать устройство, которое реагировало бы на твой голос или на хлопок в ладоши, или на температуру руки. И все это означало бы для Исполнителя команду «включись!» Так вот. Программирование начинается с того, что программист выясняет, каков тот набор стандартных команд, который понятен Исполнителю.
— Понятно, — сказал Петя.
— Тогда вернемся к нашей Кристине.
ПЕРВЫЙ СПОСОБ ПРОГРАММИРОВАНИЯ — ПОСЛЕДОВАТЕЛЬНОЕ ВЫПОЛНЕНИЕ КОМАНД
— В самом деле, — сказал Петя, — вы, Казимир, превратили ее в робота-официанта. А оказывается, что она даже чай не может приготовить.
— Может, — сказал Казимир. — Только команда «приготовить чай» не входит в набор ее стандартных команд.
— А что входит в этот набор?
— Правильный вопрос, — похвалил Казимир. — Отвечаю. В настоящий момент в набор стандартных команд для Кристины входят следующие команды: «взять», «поставить», «принести», «унести», «налить», «зажечь», «вскипятить», «насыпать», «положить», «вылить». Она также понимает названия всех предметов, которые можно увидеть на кухне.
— Вот оно что, — сказал Петя, — значит, из всех этих стандартных команд надо составить новую команду «организовать чаёк». Правильно?
— Именно так. Программисты говорят: нужно определить новую команду через стандартные. Кстати, именно это и составляет суть их работы. Ну что же ты стоишь? Приступай.
— То есть я должен составить такую программу для Кристины, чтобы она ее поняла и приготовила чай?
— Совершенно верно.
Петя начал диктовать, а Кристина — печатать:
НАЛИТЬ ВОДЫ В ЧАЙНИК
ЗАЖЕЧЬ ГАЗОВУЮ ПЛИТУ
ПОСТАВИТЬ ЧАЙНИК НА ПЛИТУ
ВСКИПЯТИТЬ ВОДУ
ЗАВАРИТЬ ЧАЙ
ПОСТАВИТЬ НА СТОЛ ДВЕ ЧАШКИ
ПОСТАВИТЬ НА СТОЛ САХАРНИЦУ
ПОЛОЖИТЬ НА СТОЛ ДВЕ ЛОЖКИ
НАПОЛНИТЬ ЧАШКИ ЧАЕМ
— А разговаривать она может? — спросил Петя.
— Нет, — ответил Казимир, — произносит только служебные слова, голубка моя. Зато она может петь.
Тогда в программе добавилась новая команда: спеть какую-нибудь душевную песню.
Как и в первый раз, Петя сунул листок с программой под бескозырку Кристине и прихлопнул ее сверху.
— Программа понятна, — сказала Кристина. — Приступаю к выполнению.
Скоро на столе перед Петей и Казимиром дымились ве чашки ароматнейшего чая. Едва они отхлебнули по лотку, как Кристина с огромным воодушевлением грянула песню: «…Чудится одно и то ж: кто-то мне в кабацький, пьяный дракы-ы саданул под сэрцэ хвынский нож!»
— Что за репертуар, Кристина? — укоризненно произнес Казимир. — Здесь же дети. Смени пластинку.
— До чего же, до чего же всем нам хочется, братцы! — прежним воодушевлением продолжала Кристина. — На жирахве, на жирахве на живом покататься! До чего же хочется, братцы! На живом жирахве покататься! Эх! Эх! Ой да!
Она умолкла.
— Все что ли? — спросил Казимир, Кристина молчала.
— Концерт окончен, — вздохнул Казимир.
Он подумал и бултыхнул в свою чашку пять ложек сахару.
— А мама говорит: сахар и соль — это белые враги, — сказал Петя.
— Для кого — враги, а лично для меня — это белые друзья, — заявил Казимир.
После того, как с чаем было покончено, Петя без труда составил программу на мытье посуды, и Кристина удалилась на кухню.
— Оказывается, нет ничего проще машинного языка, — сказал Петя. — Отдавай себе команды и все!
— А ты полагаешь, что уже освоил программирование?
— А разве нет?
— Что ты! Мы с тобой еще только в самом начале. Мы изучили только самый простой способ — последовательное выполнение стандартных команд.
— А что, есть и другие способы?
— Есть. Но мы поговорим о них завтра.
«Под музыку Вивальди! — послышалось вдали. — Вивальди! Вивальди!»
Это возвращались гребцы, подкрепившие где-то там, за горизонтом, свои силы.
КРИСТИНА ПРЕВРАЩАЕТСЯ В ЧЕЛОВЕКА
Когда робот вновь появился в комнате, Казимир обнажил волшебную свою шпагу и со словами «Шаварган трах!» — хлопнул по плечу Исполнителя. Исполнитель мгновенно превратился в Зеленую девицу Кристину, похожую на старшую пионервожатую из Петиной школы и та сразу же начала зудеть:
— Магистр! Ну что это такое? Они опять опаздывают! Как это понимать? Они опаздывают на три минуты тридцать восемь секунд. А вы помните лозунг дня? Помните? Нет? Помните? Нет? Помните? Нет? Помните? Нет?
— Тебя что, Кристина, опять заело?
— Да, заело, — гордо сказала Кристина. — Да, заело. Да, заело. Да, заело. Извините, Магистр, не могу остановиться.
— Зациклилась, — объяснил Казимир Пете. — Мы тобой еще будем это проходить.
Вслед за этим он снова хлопнул шпагой по плечу Кристины и произнес:
— Шаварган-трах-тарарах!
— Лозунг дня дисциплина! — воскликнула Кристина. — А они, Магистр, опаздывают. Я вынуждена написать на них донос.
— Валяй, — сказал Казимир.
В руках у Кристины немедленно появился исписанный лист бумаги.
Великому Магистру. Донос. Сообщаю, что подчиненные вам матросы систематически опаздывают на службу после обеденного перерыва. Прошу считать вышеуказанное нижеизложенным и принять строгие меры по наведению порядка.
Подпись: Борец-за-Правду.— Ладно, — сказал Казимир, — что-нибудь придумаем. — Ну, Петя, нам пора. До завтра, мальчик. Ровно в девять утра раздвинется стена, и мы снова встретимся с тобой. В шлюпку Кристина! Гребцам — на весла! Полный вперед!
Урок второй
КУЛИНАРНО-АРТИЛЛЕРИЙСКАЯ УСТАНОВКА: ВЕЛИКОЕ ИЗОБРЕТЕНИЕ ВЕЛИКОГО МАГИСТРА
На другой день ровно в восемь утра стена в 96-й квартире дрогнула и раздвинулась. И морским ветром дунуло!
И клипер под всеми парусами замер на рейде!
И шлюпка, и весла: Вшеп-шлеп! — и гребцы: под музыку Вивальди! И Кристина, и Казимир — вот он, во фраке, со шпагой, с седыми висками, строгий и с моноклем в глазу.
— Привет, Петя! — сказал Казимир.
— Привет, Казимир, — ответил Петя и увидел, что на корме шлюпки установлена пушка, похожая на ту, которая стояла вчера. — А это что у вас? Пушка?
— Пушка, — подтвердил Казимир, соскакивая из шлюпки на берег и помогая сойти Кристине.
— А для чего?
— Чтобы стрелять.
— А когда?
— Если в первом акте на сцене висит ружье, — назидательно сказал Казимир, — то в последнем оно должно выстрелить. А у меня, голубчик, все делается сразу. Огонь! — вдруг рявкнул он.
Орудие в шлюпке грянуло со страшной силой, и на этот раз из жерла вместо вороны вылетела жареная курица. Вытянув шею, Казимир, проворно перехватил ее зубами в воздухе и, не разжимая челюстей, спросил:
— Хохех хохху?
— Что?
— Магистр спрашивает: хочешь ножку? — перевела Кристина.
— Нет, спасибо, — сказал Петя. — Я только что позавтракал.
Магистр в мгновение ока обглодал курицу, извлек из воздуха лист газеты, завернул туда кости, скомкал сверток и мял его в могучих своих руках до тех пор, пока тот превратился в пылинку.
— Нравится? — спросил он и показал на пушку.
— У, сила, — сказал Петя.
— Кулинарно-артиллерийская установка. Сокращенно — КАУ. Сам изобрел. Имею патент. Не сочти за бахвальство, голубчик… но — пройдут года, настанут дни такие, когда великий, мудрый наш народ вот эти руки, руки молодые — руками золотыми назовет! — и Казимир показал Пете свои руки. — Ведь золотые же? Правда — золотые? — спросил он.
— Золотые, — подтвердил Петя.
Великий Магистр внезапно расчувствовался, глаз под моноклем у него повлажнел… Казимир дернул головой, монокль взлетел вверх, после чего Казимир промакнул глаз белоснежным платком, потом выгнул шею, подхватил монокль с лета и, шевельнув веком, водрузил его на место.
— Таким образом, проблема обеденного перерыва решена, — объявил Казимир. — Теперь Кристине не придется писать доносы на матросов. Приступаем к трапезе!
— А программировать? — спросил Петя обиженно. — Казимир, я вас все утро ждал, а вы сразу — обедать!
— Одно другому не помешает, — сказал Казимир. — Совместим приятное с полезным.
КРИСТИНА ОПЯТЬ ПРЕВРАЩАЕТСЯ В РОБОТА
— Протестую, — заявила Кристина. — По распорядку дня обед начнется через один час тридцать две минуты.
— Распорядок дня существует только для одной цели — чтобы его нарушать, — сказал Казимир.
— Что вы такое говорите, Магистр? — возмутилась Кристина. — Да еще при ребенке? Вы отдаете себе отчет, какой нравственный урок он сейчас получает?
— Нет, она мне надоела, — проговорил Казимир. — Вот зануда…
В мгновение ока он выхватил шпагу и со словами «шаварган-бух!» перевел зеленую в другое состояние. Лицо у нее окаменело, на голове появился поварский колпак с артиллерийской эмблемой — двумя скрещенными мортирами.
— Она стала Исполнителем? — спросил Петя.
— Да. Сейчас это — кок-артиллерист. Будет кормить команду.
— А ей не больно, когда вы ее превращаете?
— Нет, — сказал Казимир уверенно. — Только щекотно.
ЕЩЕ ОДНА КОНСТРУКЦИЯ ПРОГРАММИРОВАНИЯ: РАЗВЕТВЛЕНИЕ
— Ну-с, приступим, — сказал Казимир. — Вчера мы с тобой изучили самый простой способ программирования. Кстати, как он называется?
— Последовательное выполнение простых команд, — сказал Петя. — Я помню. Это когда команды следуют одна за другой.
— Правильно. А сегодня мы узнаем еще один способ. Он называется «разветвление». Но перед этим я задам тем один вопрос. Ты помнишь, как вчера Кристина-Исполнитель поила нас чаем?
— Конечно.
— А ты помнишь, там была команда «вскипятить воду»?
— Помню.
— А теперь ответь: чем эта команда отличается от остальных?
— Тем, что сама Кристина воду не нагревала. Она поставила чайник на газ — и все.
— Ну, а сама-то она что-нибудь делала в это время?
— Нет… то есть да. Она стояла и смотрела на чайник.
— Для чего?
— Чтобы снять его с плиты, когда вода закипит.
— Другими словами, она проверяла, как нагревается вода. Правильно?
— И какой же вывод мы должны из этого сделать? Что еще умеет Исполнитель, кроме выполнения команд?
— Он умеет выполнять проверки! — догадался Петя.
— Вот именно — проверки, — сказал Казимир. — И сразу запомним: команда и проверка — не одно и то же. Выполнение команды изменяет ситуацию, в которой находится Исполнитель. А выполнение проверки — что?
— Не изменяет.
— Потрясающая сообразительность! — похвалил Казимир. — А теперь скажи: для чего нужны проверки Исполнителю?
— Ясное дело: чтобы знать, когда приступать к выполнению новой команды…
— …и приступать ли к ней вообще? — подхватил Казимир.
— К нему, — сказал Петя.
— Что — к нему?
— Если «выполнение», то — к нему.
— А если «команда», то — к ней.
— А если «выполнение команды», то — к нему. К выполнению.
— А кто ты такой, чтобы указывать?
— Я — Петя, — сказал Петя.
— А я — Великий Магистр, — сказал Великий Магистр. — Я — лингвист-универсал, понял? По шестому разряду работаю. Красный диплом имею. У меня жена профессор.
— А все-таки я прав, — сказал Петя. — А вы, Казимир, должны научиться признавать свои ошибки. И вообще — пора перестраиваться.
— Знаешь что, пацан? — спросил Казимир. — Вот возьму сейчас и уеду…
— Не уедете.
— Это почему?
— А я вам командировку не подпишу.
— Маленький шантажист… — пробормотал Казимир. — Ну, делать нечего. Остаюсь. На чем мы остановились?
— Для чего нужны проверки.
— Так вот, представь себе, что чайник не закипел бы. Ну, скажем, потух газ. Что в таком случае сделала бы Кристина?
— Она бы его снова зажгла.
— Ничего подобного! Исполнитель выполняет только то, что написано в программе, а в твоей программе команды зажечь газ во второй раз не было. И значит, вода в чайнике никогда бы не закипела. И, следовательно, Кристина не смогла бы перейти к выполнению следующей команды. Программисты говорят, что в таких случаях с Исполнителем происходит авария. Он останавливается и прекращает работу.
Так вот, использование проверок позволяет программисту так составить программу, что Исполнитель знает, I как ему поступать в том или ином случае. Тебе это понятно?
— Нет, — сказал Петя. — Не очень. Я не понимаю, как можно в программе использовать проверки.
— Сейчас поймешь, — сказал Казимир, — Приступим к обеду.
Повернувшись к гребцам, он скомандовал:
— Орудие на берег!
Те живо выволокли пушку на берег.
— Объявляю меню, — сказал Казимир. — На первое — жареная курица. На второе — жареная курица. На третье — жареная курица.
— А на сладкое? — спросил кто-то.
— А на сладкое, братцы, тоже — жареная курица, — торжественно объявил Казимир.
— Ура! Ура! Ура! Ура! — восторженно прокричали матросы. По одному «ура» — на каждое блюдо. (Не знаю почему, но моряки любят жареных куриц).
— Обед готов. Кок-артиллерист — Кристина. Петя, составляй программу.
— А какой у нее набор стандартных команд? — спросил Петя.
— Исполнитель может выполнять три команды: «подойти к орудию», «зарядить орудие», «выстрелить». И добавляю: орудие у нас многозарядное.
В последней фразе Казимира слышалось какое-то тайное значение, но Петя не обратил на него внимание и начал диктовать:
— Значит, так, Кристина. Ты должна подойти к орудию, зарядить его и выстрелить, — он подумал и добавил: — и смотри у меня. Чтобы курица была как курица, а не черт знает что.
Через миг была отпечатана такая программа:
ПОДОЙТИ К ОРУДИЮ
ЗАРЯДИТЬ ОРУДИЕ
ВЫСТРЕЛИТЬ
КОНЕЦ
— Вводи программу, — приказал Казимир.
Петя сунул листок под поварский колпак Кристины и прихлопнул его сверху.
Кристина-Исполнитель понеслась к орудию, остановилась возле него и вдруг монотонно заговорила:
— Авария. Авария. Авария. Авария.
— В чем дело? — растерянно спросил Петя.
— Я же предупреждал, — сказал Казимир. — Кулинарно-артиллерийская установка у меня — многозарядная.
— Ну и что?
— Это я у тебя должен спросить: ну и что? Догадайся, о какой аварии говорит Исполнитель?
— Наверное, орудие уже заряжено?
— Совершенно верно. Сам же видел, как оно только что стреляло.
— Значит, Кристина сделала проверку и увидела, что в орудии остались заряды?
— Правильно.
— А какие проверки она умеет делать?
— Наконец-то! — воскликнул Казимир. — Наконец-то ты об этом спросил! Кристина-Исполнитель может проверять заряжено орудие или нет. Я отвечаю на твой вопрос!
— Вот оно что, — сказал Петя, — Значит, когда Кристина стала выполнять программу, то перед командой «зарядить орудие» она сделала проверку и обнаружила, что оно уже заряжено, и…
— И что?
— И значит, выполнять эту команду она не смогла. Поэтому перейти к следующей команде она тоже не смогла.
— Логично, — сказал Казимир. — Следовательно, в этом и есть причина аварии.
— Выходит, я неправильно составил программу?
— Выходит, так. Ты не использовал умения Кристины-Исполнителя делать проверку. Кристина, ко мне!
Кристина послушно приблизилась к Казимиру.
— Слушайте, Казимир, — сказал Петя, — а почему она вам подчиняется без всякой программы?
. — Пусть только попробует не подчиниться. Я ведь, братец ты мой, — Великий Магистр. У меня жена — профессор… Впрочем, я об этом уже говорил. — Ну что, попробуешь еще раз составить программу?
— А как? — спросил Петя. — Я ведь не знаю, как составлять программы с проверками.
— Ты ей скажи по-человечески, чего ты хочешь, а на машинный язык твой приказ она переведет сама. Кстати, изложение программы «по-человечески» у программистов называется «спецификация».
— Ну, если по-человечески, то значит, так…
— Подожди, — перебил Казимир. — Представь себе, что в данный момент ты сам не знаешь, заряжено орудие или нет. Представил?
— Представил.
— Тогда командуй. И Петя начал:
— Кристина, ты должна подойти к орудию. Потом ты должна проверить, заряжено оно или нет. Допустим, что оно не заряжено. Тогда тебе нужно его зарядить и после этого выстрелить. А если оно уже заряжено, то во второй раз заряжать не нужно. Тогда ты должна просто выстрелить.
Петя сказал это, а Кристина тут же отстучала на машинке такой текст:
РАЗВЕТВЛЕНИЕ. УСЛОВНЫЙ ОПЕРАТОР
— Тебе здесь все понятно? — спросил Казимир.
— По правде говоря, не все.
— Тогда давай разберемся. В первой строчке программы — твоя первая команда. С ней, надеюсь, все ясно?
— Да. «Подойти к орудию». Стандартная команда.
— Дальше идет слово «если». В нем-то как раз и содержится команда для проверки. Если условие подтвердится, то Исполнитель должен выполнить команды, идущие после слова «то». В противном случае он выполняет команды, следующие после слова «иначе». Все команды, находящиеся между словами «если» и «конец условия», называются в программировании конструкцией разветвления. Может, догадаешься, почему она так называется?
— Наверное, все зависит от проверки — по какому пути пойдет выполнение команд, да?
— Совершенно верно. Действия Исполнителя имеют два варианта. А по какому варианту они пойдут, — это зависит от «если». И последнее. Слова «если… то… иначе…» в алгоритмических языках называются «условным оператором». Условный оператор — это единая конструкция, состоящая из трех этих слов. Очень часто программисты обозначают условный оператор по-английски: «if» «then»… «else».
— А мне еще одно не понятно. Для чего в программе рядом стоят слова «конец условия» и «конец»? Разве не хватило бы одного «конца»?
— Этого требуют правила грамматики алгоритмического языка. «Конец условия» говорит Исполнителю том, что в программе на этом месте заканчивается действие одного условного оператора и можно переходить к выполнению новых команд, если они есть. Ну, а слово «конец» в конце программы как бы говорит Исполнителю: «Молодчина! Ты хорошо поработал, дружище. Программа выполнена. Можешь отключиться и отдохнуть». Слово «конец в программах может быть написано и по-английски «end».
Тут Казимир подтолкнул пальцем пишущую машинку, которая почему-то не исчезла, как обычно, а качнувшись как лодка на волнах, подплыла по воздуху к Пете и остановилась перед ним.
— Ну-ка, напиши программу для Исполнителя «Пешеход».
— Самому написать?
— Самому.
— А что должен сделать «Пешеход»?
— Перейти улицу на перекрестке, где горит светофор.
— А что, он, это… умеет делать?
— Задай вопрос правильно.
— Какой у Исполнителя набор стандартных команд?
— «Стоять» и «Перейти улицу».
— А проверки?
— «Пешеход» различает зеленый цвет светофора.
— И все?
— И все.
Петя подумал и одним пальцем отстучал:
— Усвоил, — похвалил Казимир. — Испытываю чувство глубокого удовлетворения.
— А когда матросов кормить будем? — поинтересовался Петя.
— Программа готова. Вводи.
СКОЛЬКО РАЗ НУЖНО ПЕРЕПИСАТЬ ПРОГРАММУ, ЧТОБЫ НАКОРМИТЬ ВСЕХ ГРЕБЦОВ?
В тот момент, когда Петя прицелился, чтобы засунуть листок с программой под колпак Кристины, Казимир остановил его.
— Погоди. Сколько жареных куриц вылетит из пушки после выполнения этой программы?
— Столько же, сколько будет выстрелов.
— А сколько будет выстрелов?
— А пушка у вас автоматическая… или какая?
— Или какая.
— То есть выстрелы у нее одиночные?
— Одиночные.
— Значит, Кристина выстрелит один раз.
— Следовательно?
— Следовательно, из пушки вылетит только одна курица.
— А сколько у нас матросов?
Петя пересчитал.
— Шестеро.
— И каждому нужно курицу на первое, курицу на второе, курицу на третье и курицу на сладкое, — сказал Казимир грустным голосом. — Итого…
— Двадцать четыре курицы, — подсчитал Петя. — Поэтому Кристина должна сделать двадцать четыре выстрела.
— И что ты хочешь? После каждого выстрела писать новую программу?
— Да.
— Но это же так долго! Погляди, какие у них голодные глаза, — в голосе у Казимира прозвучала неподдельная печаль.
— А что делать?
— Есть способ, — Казимир дернул головой, подбросил монокль кверху, заговорщицки подмигнул Пете и поймал стекляшку глазом. — Можно так написать программу, что Исполнитель будет повторять ее столько раз, сколько ты захочешь!
— Да ну!
— Точно. Этот способ называется… Впрочем, об этом завтра.
— А как же матросы?
— Перекусят на корабле.
Казимир повернулся к матросам.
— Гребцам — за весла! В шлюпку, Кристина! До завтра, Петя.
— До завтра, Казимир!
Первое авторское отступление
Дорогой читатель! Когда я, автор этой книги, придумывал ее героев — Петю, Казимира и Кристину, то очень хотел, чтобы они, эти герои, в беседах между собой изложили тебе основные сведения, которые составляют азбуку программирования. Они бы делали за меня мою работу, а я сидел бы себе да поплевывал в потолок.
Ан нет. Закончился уже второй урок, и я вижу, что кое о чем мои герои умалчивают. Поэтому приходится взять штурвал в свои руки и сделать некоторые добавления от себя.
МОЙ ДРУГ ГАФУР
Когда-то давно был у меня знакомый. Звали его Гафур. Он приехал из одной восточной страны на учебу в Московский университет. Старательный был парень Гафур. Быстро запомнил множество русских слов. Но вот беда — не давались ему глагольные формы. Трудно было Гафуру употребить глагол в нужном времени. Спросишь его бывало: «Хочешь прочитать эту книгу?» «Нет, — отвечал он. — Я ее уже прочитать». Но больше всего он мучился, когда приходилось называть глагол в единственном числе прошедшего времени. Знаете, почему? Потому что глаголы прошедшего времени единственного числа требуют еще и родового окончания: корабль сел на мель. Птица села на ветку. Платье село от стирки. (Вообще говоря, здесь есть какая-то увлекательная тайна. В глаголах «сел», «села», «село» мы ясно слышим род того предмета, который совершает действие. Но вот — тот же глагол в настоящем времени: «садится». Скажите, кто садится — мужчина или женщина? Никаких сведений об этом в слове не содержится. А вот будущее время «сядет»? И здесь то же самое… Чувствуете загадку? Почему русские глаголы «устроены» так, что в прошедшем времени они чутко регистрируют род предмета, а их форма в настоящем и будущем времени абсолютно равнодушна к этому же самому роду? Впрочем, это — тема для особого разговора…).
Так вот, в родном языке Гафура категория рода отсутствует. И для моего товарища было безразлично, как сказать: «Корабль сел на мель» или «Корабль села на мель». Но Гафур упорно тренировался, осваивая родовые окончания русских глаголов. Каждый день я давал ему листок с десятком глаголов в неопределенной форме, а вечером Гафур протягивал мне другой листок, на котором те же самые слова стояли в единственном числе прошедшего времени и были изменены по родам. И вот как-то раз он протягивает мне один такой листок. Я читаю: «пел-пела-пело». Правильно. «Ел-ела-ело». Правильно. «Ехал-ехала-ехало», «бегал-бегала-бегало» — тоже правильно. И вдруг глаза наталкиваются на что-то странное: «Идел-идела-идело». Интересно, что это за глагол такой? Может быть, образование от — «одеть»? Но нет, «одеть» мы уже проходили. «Гафур, — спрашиваю, — это что за абракадабра у тебя?» «Почему — абракадабра? — отвечает он. — Ты давал мне слово «идти». Вот я и написал: «идел-идела-идело».
Мне становится смешно. «Нет, — говорю, — надо: «шел-шла-шло». А он удивляется: «А почему?» А вслед за ним удивляюсь и я: в самом деле, почему от глагола «идти» образуется глагол «шел», а не «идел»?
Правда, почему?
Сейчас объясню, для чего я вспомнил эту историки Любой язык можно сравнить с детским конструктором — игрой, в которой из ограниченного набора деталей можно сконструировать множество игрушек. Важно знать правила, по которым происходит «сборка». Мой друг Гафур интуитивно уловил правило, по которому из глаголов несовершенного вида можно «собрать» глаголы прошедшего времени мужского, женского и среднего рода. Слово «идти», правда, трансформируется иначе, но сам-то принцип конструирования Гафур ухватил верно!
Бесчисленные приставки, суффиксы, окончания, предлоги, союзы, знаки препинания, порядок слов в предложении — все это детальки языка, с помощью которых мы можем, во-первых, выразить любую свою мысль, и, во-вторых, сделать ее понятной всякому, кто владеет данным языком.
Другими словами, человеческий язык, в отличие от языка, на котором общаются между собой животные, организован по правилам грамматики.
Что же касается машинных языков, то они строятся так же — по грамматическим правилам.
Две грамматические конструкции — последовательное выполнение команд и разветвление — нам уже известны.
Итак…
Урок третий
ЕЩЕ ОДНА КОНСТРУКЦИЯ ПРОГРАММИРОВАНИЯ — «ЦИКЛ»
На другой день ровно в десять часов стена раздвинулась, шлюпка с клипера ткнулась носом в песок, и на берег сошел Казимир вместе со всей своей компанией.
Он поздоровался с Петей и тут же, повернувшись к гребцам и поднеся ладони раструбом ко рту, зычно протрубил мелодию, довольно известную у военных людей, в которой повторяются только три слова: «Бери ложку, бери бак! Бери ложку, бери бак! Бери ложку, бери бак!»
— Приготовиться к принятию вкусной и здоровой пищи! — скомандовал Великий Магистр.
— Всегда готовы! — дружно ответили гребцы.
— Вы что, опять собираетесь есть? — спросил Петя.
— Опять, — сказал Великий Магистр. И матросам: — Орудие на берег, ребята.
— Казимир, а вам не кажется, что вы слишком часто думаете о еде?
— Кажется. Только почему «слишком часто»? Я думаю об этом всегда.
— А вам не надоедает?
— Милый ты мой! Да как же могут надоесть размышления о предмете, который доставляет столько радости?
— А есть что-нибудь такое, о чем вы не любите думать?
— Есть, — сказал Казимир. — Но вернемся к программированию. На чем мы вчера остановились?
— Вы сказали, что существует такой способ составления программы, когда Исполнитель может сделать двадцать четыре выстрела из пушки, а текст программы для него будет только один.
— Да. Такой способ называется «цикл».
ПРОГРАММА ДЛЯ ИСПОЛНИТЕЛЯ «ПАРИКМАХЕР»
— Представьте себе Исполнителя под названием, ну, скажем, «Парикмахер». Он выполняет только одну стандартную команду «подстричь клиента» и только одну стандартную проверку: «есть ли в парикмахерской очередь?» Тогда многократное выполнение команды будет достигнуто вот таким образом…
Казимир, демонстрируя свое могущество, щелкнул пальцами, откуда-то выпорхнул лист бумаги и влетел прямо в Петину руку. Вот что было написано там:
— Помнишь, что такое спецификация? — спросил Казимир.
— Да. Это текст программы, который написан «по-человечески».
— Правильно. А сейчас попробуй перевести на «человеческий» язык программу, которая у тебя в руках.
Петя взглянул на текст и легко перевел его:
— До тех пор, пока в парикмахерской очередь, парикмахер должен подстригать клиентов.
— А теперь скажи, каким словом в программе обозначена команда на проверку?
— Я думаю, словом «пока».
— Правильно думаешь. Так вот, вся эта конструкция называется «циклом». Состоит она из слов «пока» и «повторять». Обозначение «пока… повторять…» называется «оператором цикла». А все команды, которые находятся между словами «пока» и «конец цикла», называются «телом цикла».
— Так мало слов и так много работы! — восхищенно сказал Петя.
— Ее может быть еще больше, — сказал Казимир. — Вообрази, что очередь — без конца. Что тогда будет делать Исполнитель?
— Значит, он тоже будет работать без конца?
— Совершенно верно. Будет бесконечно повторять один и тот же приказ. Программисты в таких случаях говорят: «Исполнитель зациклился».
— А если у Исполнителя кончился рабочий день? Если ему вообще нужно устроить перерыв в работе?
Для таких случаев у программистов есть еще один вариант конструкции цикла. Вот такой…
И тут в Петину руку влетел еще один листок бумаги. На нем было написано:
— Переведи, — велел Казимир.
— Пожалуйста. Парикмахер должен подстричь двадцать человек.
— Верно. И это — тоже «конструкция цикла». А оператор цикла здесь обозначен словами «повторять… раз».
— А где в этой программе проверка?
— Сам догадайся.
— В словах «столько-то раз», так?
— Так.
— Значит, в данной программе Исполнитель не проверяет, есть ли в парикмахерской очередь?
— Не проверяет.
— А почему вы мне об этом не сказали?
— А зачем я должен тебе все разжевывать? По тексту программы ты и сам догадался, что в данном случае Исполнитель осуществляет другую проверку, чем в первый раз. Кстати, какую? Скажи об этом понятнее.
— В данном случае… — сказал Петя, размышляя, — в данном случае… Исполнитель может СЧИТАТЬ клиентов. То есть он все время проверяет, сколько человек ему осталось подстричь перед тем, как прекратить работу.
— Как видишь, — сказал Казимир, — имеется два варианта конструкции цикла. В одном из них используется оператор «пока (не выполнено какое-то условие) — повторять (какое-то действие)». А в другом варианте можно использовать оператор «повторять… (сколько-то) раз». Выбор конструкции зависит от того, каким будет исходный алгоритм.
— А что такое — исходный алгоритм? — спросил Петя.
— Об этом мы поговорим когда-нибудь после. А сейчас ты должен запомнить еще одно. Операторы цикла, как и условные операторы, можно записывать в программах не только по-русски, но и по-английски. Оператор «пока… повторять…» можно записать английскими словами «While…» «do…». А русское слово «раз» программисты часто заменяют словом «step» (шаг).[2]
НОВАЯ ПРОГРАММА ДЛЯ КУЛИНАРНО-АРТИЛЛЕРИЙСКОЙ УСТАНОВКИ
— Казимир, а мы будем кормить матросов или нет? — спросил Петя.
— Будем. Только ты для этого должен придумать один-единственный текст программы для Кристины.
_ И при этом использовать конструкцию цикла?
— Именно.
— Пожалуйста, — сказал Петя. И он напечатал:
— Можно и так, — сказал Казимир. — Будем считать, что Кристина-Исполнитель, кроме первой стандартной проверки, способна выполнять еще одну — считать выстрелы.
Кулинар-артиллерист Кристина, печатая шаг, подошла к Великому Магистру и отдала честь.
— Ну, Кристина, корми орлов, — сказал Казимир. — Петя, вводи программу.
Петя ввел программу, и через миг над побережьем загрохотала канонада. Жареные курицы одна за другой взлетали в бирюзовую высь, падали оттуда в заранее подставленные тарелки и немедленно исчезали в матросских желудках. Хрустели косточки.
ГИМН МАГИСТРУ
Когда с последней, двадцать четвертой, курицей было покончено, Казимир загрустил:
— Вот заботишься о них, заботишься, а все впустую… Ни сказок обо мне не расскажут, ни песен не споют…
— Казимир, давайте я про вас что-нибудь сочиню, — предложил Петя.
— Сам?
— Пусть мне Кристина поможет. Только превратите ее из кулинара в поэта.
— А что, это — идея, — проговорил Казимир. — Ты ей даешь, как говорится, социальный заказ, а она пишет для меня гимн. Воздвигает памятник, так сказать, нерукотворный. Кристина, ко мне! — Казимир ожил на глазах.
Кристина подошла и отдала честь. Сейчас на колпаке у нее вместо двух скрещенных мортир красовались два поднявшихся на дыбы крылатых коня. Два Пегаса. Это означало, что Кристина превратилась в стихотворца.
— Слушай приказ, — сказал Петя. — Нужно сочинить гимн Казимиру. Даю спецификацию. В первом куплете нужно сказать, что матросы испытывают к Великому Магистру глубокую любовь…
— Ну, любовь — это слишком, — сказал Казимир. — Лучше — нежность.
— Нежность так нежность, — сказал Петя. — И эта нежность глубока, как океан.
— Нет-нет, — снова возразил Казимир. — Океан — это нескромно. Так и зазнаться недолго. Лучше — как река. Какие у нас есть великие реки?
— Волга.
— Волга — это штамп.
— Ну, Ока.
— Так Волга или Ока? — спросила Кристина.
— На твое усмотрение, — сказал Петя. — И используй здесь конструкцию цикла. Повтори эту мысль не раз.
— Да-да, — добавил Казимир. — Ты уж постарайся, Кристина. Усиль впечатление.
— Дальше, — продолжал Петя. — Каждый раз, когда мы едим жареных куриц, мы вспоминаем о вас, Магистр, Ваше имя всегда будет жить в наших сердцах. Оно одно! И здесь — конструкция цикла.
— Как хорошо! — растроганно сказал Казимир. И наконец, если Великий Магистр и дальше будет так же заботиться о наших бытовых условиях, то и мы ответим ему тем же. И это тоже надо повторить несколько раз.
— Какие стихи! — произнес Казимир. — Какие стихи! Давай, Кристина, давай, не теряй времени. Сочиняй!
— А я и не теряю, — невозмутимо сказала Кристина. — Гимн уже готов. Осталось только разучить.
Она удалилась к матросам и раздала им листки с отпечатанным текстом.
БУНТ ЭКИПАЖА
Петя и Казимир присели на морском песке, матросы обступили их полукругом.
«Три-четыре», — сказала Кристина, и хор запел:
К вам нежность глубока, как Волга иль Ока, но пользуясь ока — ока-ока — зией, хоть любим вас давно, мы скажем все равно: «В меню — одно — одно-одно — образие!»— Какая наглость, — промолвил Казимир.
А матросы продолжали:
А ну, пусть спросит Маг своих матросов: как живется в бы — бы-бы-бы-бы — быту им? Мы скажем «Поскорей долой твоих курей! Иначе забу — бу-бу-бу — бунтуем!»— Да… — произнес Казимир.
— Да! — подхватили матросы. — Да, скифы мы! Да, азиаты мы! С раскосыми и жадными очами!
— Но скажите, — возмущенно воскликнул Казимир. — Что может быть лучше жареной курицы? Что?!
— Жареный петух? — невозмутимо предположила Кристина-поэтесса.
— Сгущенка! — сказал один матрос.
— Тушенка! — сказал другой.
— Нет, сгущенка! — сказал третий.
— Нет, тушенка, — сказал четвертый.
А потом уж и не разобрать было, кто и что говорил. В воздухе, как волейбольные мячи, носились только два слова: «Сгущенка!!!», «Тушенка!!!»
— Вот вы у меня какие… — задумчиво промолвил Казимир.
Тут Петя заметил, что стена начала медленно сдвигаться, и он быстро юркнул в свою комнату, не успев попрощаться с Великим Магистром.
Урок четвертый
ДАВАЙТЕ ГОВОРИТЬ О ЧЕМ-НИБУДЬ ДУХОВНОМ
Петя увидел, что одни матросы уже купаются в океане, другие — загорают. Кристина, превращенная в человека, со спасательным кругом в одной руке и с мегафоном в другой, ходит по берегу и строго поглядывает на купающихся, а Казимир, мурлыкая песню, сдвинув бескозырку на затылок, во фраке, при шпаге и с моноклем возится неподалеку со своей пушкой — КАУ.
Петя прислушался. Казимир напевал что-то знакомое — то ли по-молдавски, то ли по-русски:
«Кулинария! Дульче мелодия… Кулинария! Тру-ля-лял-ля… Кулинария! Кулинария! Ты — гармония Ты — любовь моя!»— Доброе утро, — сказал Петя.
— Привет, — сказал Казимир. — Вот и все готово к нашему уроку.
— А что это за кнопки такие на пушке появились? — спросил Петя. — Вчера их не было.
— Это — очень интересные кнопки. Нажмешь на левую — орудие выстреливает банку тушенки. На правую надавишь — вылетает банка сгущенки. Всю ночь изобретал. С курицами покончено. Голос масс! Веление времени.
— Казимир, а вы не знаете, почему у нас в магазинах ни тушёнки, ни сгущёнки — ничего? Только по праздникам, и то не всегда?
— Магистр, — строго сказала Кристина. — Нельзя с ребенком все время говорить о еде! О еде и о еде! Это — непедагогично. Вы его растлеваете. Понятно вам это или нет?
— Я учу его программированию, — возразил Казимир. — А если я при этом прибегаю к кулинарным примерам, то что поделаешь? Не скрою, мне близка это тема… Вот у меня жена — подчеркиваю: профессор! — так она всегда с огромным интересом…
— Ах, да разве в этом дело? — перебила Кристина. — За ограждение не заплывать! — рявкнула она в мегафон матросам. — Кому говорю — не заплывать! Магистр! Дело не в том, что ваша жена любит готовить…
— А она не любит, — с достоинством сказал Казимир. — Она профессор. Готовлю всегда я. Вот эти руки готовят, — он показал свои руки. — Руки молодые…
— Да не в том дело, не в том, — настойчиво сказала Кристина.
— Вот вы поете: «гармони́я». А что такое «гармони́я», толком даже и не знаете.
— Знаю, — возразил Казимир. — Это — кулинария.
— Нет! — страстно воскликнула Кристина. — Нет и нет! Гармония — это… Ну, Магистр?
— Меланхоли́я, меланхоли́я! — наперебой подсказывали загоравшие матросы, которые потихоньку подползали поближе, жадно слушая спор своего начальства.
— Меланхолия, что ли? — спросил Казимир простодушно.
— Нет, — сказала Кристина. — Нет!
— А что?
— Это, прежде всего, духовная пища, — торжествуя, объяснила Кристина. — Духовная! А уж потом — физическая. Вот что такое ГАРМОНИ́Я.
— Как интересно, — сказал Казимир.
— Магистр, какая у вас главная методическая ошибка? — продолжала Кристина. — Если вы не можете обойтись без ваших кулинарных опытов, то — ладно. Но перед этим — обязательно! — вы должны говорить с ребенком о чем-нибудь духовном, понимаете? Только в этом случае мы обеспечим гармоническое развитие личности. — Она повернулась к Пете: — Отрок, хочешь гармонично развиваться?
— Нет, — сказал Петя.
— Не можешь — научим, не хочешь — заставим, — сурово произнесла Кристина.
— Ладно, — сказал Казимир, — поговорим с ним о чем-нибудь духовном. Гармония так гармония. Начинай, Кристина.
Кристина пересекла невидимую плоскость, разделявшую морской берег и Петину квартиру, и оказалась перед книжной полкой.
«ЭТО ЧТО? ХАЙКУ?»
— А это что? — спросила Кристина и достала с полки сборник японских стихов. — Хайку? Отрок, это ты читаешь хайку?
— Нет, это родители читают, — сказал Петя.
— А знаешь ли ты, отрок, — заговорила Кристина, — что, когда Басё осваивал дзэн у мастера Буттё, тот однажды спросил у него: «Чем вы занимались эти дни?», а Басё говорит: «После дождя мох особенно зелен». А Буттё говорит: «Что же раньше — Будда или зелень мха?» А Басё говорит: «Слышите, лягушка прыгнула в воду!» Вот, отрок, с этого и началась новая эпоха в хайку.
— Ну, чего затараторила? — недовольно спросил Казимир. — Ничего не понял. Кто осваивал дзэн?
— Басё, — ответила Кристина.
— А Буттё спросил у него: «Чем вы…»
— У кого спросил?
— У Басё.
— Так.
— «Чем вы, говорит, занимались эти дни?»
— Это Буттё спросил?
— Буттё, Буттё.
— А Басё?
— А Басё говорит: «После дождя мох особенно зелен».
— Не понял, — сказал Казимир. — Кто зелен?
— Мох, — сказала Кристина, — мох.
— А, — сказал Казимир, — так-так?
— А Буттё говорит: «Что же раньше? Будда или…»
— Будда — это бог такой, — пояснил Казимир.
— Знаю, — сказал Петя.
— …Что же, говорит, раньше, Будда или зелень мха?
— Так.
— А этот отвечает: «Слышите, лягушка прыгнула в воду?»
— Какое же резюме? — спросил Казимир. — При чем тут лягушка?
— Это значит, — отпускать свой ум, — объяснила Кристина.
— Как это?
— То есть, доверять ему… Дьявольщина, не помню без конспекта! Видите ли, Магистр, сосредоточенность на вопросе учителя предполагает остановку, разрыв связи с текущими событиями. А ученик не хочет разрывать эту связь. И потому отвечает не на вопрос, а на то, над чем действительно сосредоточена его мысль…
Петя вдруг зевнул.
— Полундра! — крикнула ему на ухо Кристина. — Прекрати этот цинизм! Разгильдяй!
— Продолжай, пупсик, — сказал ей Казимир. — Он больше не будет.
— Так вот, я говорю: ответ Басё заставил Буттё проникнуться его настроением в большей степени, если бы Буттё услышал логически обоснованный ответ. Никакой мистики, Магистр! Не полное отсутствие связи, а иной тип связи!
— Все с духовным? — спросил Казимир.
— Так точно.
— Что ж, хвалю. Так и жгешь глаголом. Ну, а теперь айда к нашему орудию.
— И правда, айдате, — сказала Кристина.
— Извини, Кристина, — сказал Магистр, вынимая шпагу, — я тебя, пожалуй, того…
— Ничего, ничего, — ответила она, — мне даже приятно, когда я — машина.
Она не договорила.
— «Шаварган-бух!» — произнес Казимир.
Кристина оцепенела. На голове у нее появился поварский колпак с двумя скрещенными мортирами.
— Что это за…
ПЕРЕМЕННАЯ — ВОТ ГЛАВНОЕ ДЕЙСТВУЮЩЕЕ ЛИЦО ЛЮБОЙ ПРОГРАММЫ
— … полоски были нарисованы? — спросил Казимир у Пети, когда они вышли на морской берег.
— Где?
— У тебя в комнате на дверном косяке?
— Это мама каждые полгода отмечает, на сколько я вырос.
— А ты разве растешь?
— Вы меня удивляете, Казимир, — сказал Петя. — А что, по-вашему, не расту?
— Мой вопрос — из тех, которые называются риторическими. Ответ на них заранее известен. Но должен же я с чего-то начать новую тему?
— А о чем она?
— О переменных, — сказал Казимир, и продолжал: — Вот я произнес это слово. А как ты его понимаешь?
— Как я его понимаю? Как и все. Вот, например, на небе — или есть тучи, или их нету. Тогда говорят: переменная облачность.
— Более строгое определение переменной дает математика, хотя в наших разговорах о программировании я стараюсь математики избегать. Так вот, математики говорят о переменной в двух смыслах. Во-первых, под ней подразумевается какой-либо ЭЛЕМЕНТ, принадлежащий какому-либо множеству. Например, ученик Петя Бочкин является элементом множества учеников шестого класса.
— Ничего себе — множество! Нас всего-то двадцать пять человек.
— Даже если ты был бы один, ты все равно считался бы множеством. Множеством, состоящим из одного элемента. Ну вот. А во-вторых, переменной можно назвать и какую-нибудь величину. Ну, скажем, рост ученика Пети Бочкина, и с этой величиной в любой момент времени связан элемент некоторого множества сантиметров… Какой у тебя рост?
— Сто тридцать шесть сантиметров.
— А когда-то был сто двадцать шесть. А когда-нибудь будет сто восемьдесят шесть… Одним словом, понятие «переменная» мы будем употреблять вот в этих двух смыслах. А сейчас приведи мне пример переменной, которая была бы элементом какого-нибудь множества.
— Весенние каникулы, — тут же ответил Петя.
— Хм… Поясни.
— Это — элемент множества, состоящего из трех элементов: летние каникулы, зимние каникулы и весенние каникулы.
— Ну, что же, верно. А теперь — пример второго типа переменных.
— Весенние каникулы, — сказал Петя, не моргнув.
— Поясни, — потребовал Казимир.
— А разве непонятно? Недавно я думал: послезавтра НАЧИНАЮТСЯ весенние каникулы. А сейчас думаю: послезавтра КОНЧАЮТСЯ весенние каникулы. Каникулы одни и те же, но когда они начинаются это одно, а кончаются — совсем другое.
— Убедительно, — сказал Казимир. — Я вижу, ты понял, что такое переменная. Так вот, переменная — это главное действующее лицо в любой программе.
КОНСТРУКЦИЯ ПРИСВАИВАНИЯ. ОПЕРАТОР ПРИСВАИВАНИЯ
— Всякая программа — это не что иное, как производство каких-то операций над какой-то одной или несколькими переменными, — продолжал Казимир. — Представь себе, запускают космический корабль. За короткое время его скорость возрастает от нуля до семи километров в секунду. Ракета-носитель испытывает много внешних воздействий: ветер, перепады давления, разница температуры в нижних и верхних слоях атмосферы, но при этом скорость ракеты должна поддерживаться в строго определенных пределах. Для этого Исполнитель, то есть бортовой компьютер, постоянно анализирует ситуацию и подает соответствующие команды двигателям. Но чтобы выполнять эту задачу, Исполнитель должен держать в памяти множество данных. А память у него хотя и обширная, но не безграничная. Поэтому ее нужно экономить. И вот для этого программисты придумали очень простую конструкцию. Она называется «присваиванием». Например, в настоящий момент скорость ракеты — два километра в секунду. А через секунду она становится два километра десять метров в секунду. Тут компьютер вызывает из ячейки памяти, где хранится информация о скорости, прежние данные и говорит сам себе: «переменной «скорость» присваивается значение — два километра десять метров в секунду» — и тут же загоняет эту новую информацию в ту же самую ячейку памяти.
— А прежнюю скорость компьютер забывает?
— Начисто. Зачем ему забивать свои мозги сведениями, которые больше не понадобятся?
— Да, но ведь в следующую секунду скорость ракеты снова повысится?
— И тогда компьютер вызовет из памяти старое значение скорости и снова скажет: «переменной «скорость» присваивается такое-то значение». Например, два километра двадцать метров в секунду. И, что интересно, компьютер будет действовать по программе, которую ввел в него программист. А программа, если сильно упрощать дело, будет выглядеть так:
Или так:
— Ну что? — спросил Казимир. — Знакомые конструкции?
— Да, — сказал Петя. — Первая — это разветвление. А вторая — цикл.
— Прекрасно, — сказал Казимир. — Тогда последнее. Команду «присвоить значение» в текстах программы словами не записывают. Вместо слов употребляют вот такой знак.
И Казимир нарисовал шпагой на песке:
— Это все равно, как если соединить вместе два знака — «разделить» и «равняется», — сказал Петя. — Правда, Казимир?
— Да, — ответил Великий Магистр. — Те, кто его придумали, долго себе голову не ломали. Творили, так сказать, из подручного материала. Запомни: этот знак называется «оператор присваивания».
Казимир приблизился к орудию.
— А теперь вернемся к нашему обеду. Можешь ли ты сразу дать спецификацию для Исполнителя?
— Значит, так. Три матроса любят сгущенку, а три — тушенку. Поэтому Кристина должна выстрелить три раза сгущенкой и три раза — тушенкой. Всего шесть раз.
— Как бы ты назвал переменную, которая будет фигурировать в программе?
— Я бы назвал ее «заряд».
— Можно и так, — сказал Казимир. — Пиши программу.
И Петя написал:
ПОДОЙТИ К ОРУДИЮ ЗАРЯД:= СГУЩЕНКА ПОВТОРЯТЬ 3 РАЗА ЕСЛИ ОРУДИЕ НЕ ЗАРЯЖЕНО ЗАРЯДИТЬ ОРУДИЕ ВЫСТРЕЛИТЬ КОНЕЦ ЦИКЛА КОНЕЦ УСЛОВИЯ ЗАРЯД:= ТУШЕНКА ПОВТОРЯТЬ 3 РАЗА ЕСЛИ ОРУДИЕ НЕ ЗАРЯЖЕНО ЗАРЯДИТЬ ОРУДИЕ ВЫСТРЕЛИТЬ ИНАЧЕ ВЫСТРЕЛИТЬ КОНЕЦ ЦИКЛА КОНЕЦ УСЛОВИЯ КОНЕЦМЕТКА. ОПЕРАТОР ПЕРЕХОДА
— Правильно? — спросил Петя.
— Правильно.[3]
— Можно вводить?
— Погоди. Не кажется ли тебе, что программа несколько длинновата?
— Ну и что? Зато правильно.
— После операторов присваивания идут совершенно одинаковые блоки, состоящие из конструкций разветвления и цикла…
— Я и сам вижу.
— Я знаю способ, который позволяет сделать программу в два раза короче. Нужно пометить специальной меткой весь блок команд, который следует после первого оператора присваивания, а после второго оператора присваивания — применить оператор перехода. — Подождите, Казимир! Я ничего не понимаю. Как — пометить? Что это за «оператор перехода»? р Меткой обычно служит какая-нибудь буква латинского алфавита, чаще всего «L». Ее ставят перед той командой, к которой нужно вернуться в ходе выполнения граммы. А приказом к возвращению к помеченной команде служит оператор перехода. Обозначается он так: «перейти к…». Или по-английски: «go to». Если в тексте граммы имеется выражение: «перейти к…» (или «go to…»), то Исполнитель прервет последовательный порядок выполнения команд, отыщет в своей памяти команду, помеченную «L», и выполнит именно эту команду.
— Я все понял, — сказал Петя. — Пишу новую программу с меткой и оператором перехода. Получается:
ПОДОЙТИ К ОРУДИЮ ЗАРЯД: = СГУЩЕНКА L ПОВТОРЯТЬ 3 РАЗА ЕСЛИ ОРУДИЕ НЕ ЗАРЯЖЕНО ТО ЗАРЯДИТЬ ОРУДИЕ ВЫСТРЕЛИТЬ ИНАЧЕ ВЫСТРЕЛИТЬ КОНЕЦ УСЛОВИЯ КОНЕЦ ЦИКЛА КОНЕЦ МЕТКИ ЗАРЯД: = ТУШЕНКА ПЕРЕЙТИ К L КОНЕЦ МЕТКИ КОНЕЦ— Отлично![4] — сказал Казимир. — Перейдем к Кристине.
Через секунду Кристина открыла беглый огонь из кулинарно-артиллерийской установки, и шестеро наших тружеников весла и уключин обрели, наконец, то, о чем они так неистово мечтали.
— Не будем им мешать, — сказал Казимир, — пусть едят.
— Казимир, — спросил Петя, — покатайте меня на вашем клипере, а?
— Что значит покатайте? — строго спросил Казимир. — На боевых кораблях не катают. На них воюют. Кстати, я тебе не говорил, что завтра у нас морской бой с кракелюрами?
В это время стена дрогнула и начала медленно сдвигаться.
Последнее, что услышал Петя из своей комнаты, были слова Казимира:
— Ты назначен адмиралом!
Второе авторское отступление
Итак, мы познакомились с основными конструкциями алгоритмических языков.
Их, если вы помните, пять: последовательное выполнение команд, конструкция разветвления, конструкция цикла, конструкция перехода и конструкция присвоения значения.
Но вот вопрос: а почему эти конструкции именно такие, а не какие-то иные?
Чтобы ответить на этот вопрос, нужно ответить еще на один: почему машинные языки называются алгоритмическими языками?
А для этого мы должны разобраться еще с одним вопросом:
ЧТО ТАКОЕ АЛГОРИТМ?
В математике существует несколько определений алгоритма. Я не стану их здесь приводить. Смысл этих определений, максимально упрощая дело, сводится к тому, что под словом «алгоритм» подразумевается порядок действий, которые необходимо выполнить, чтобы решить ту или иную задачу.
В нашей повседневной жизни мы то и дело используем самые различные алгоритмы.
Сегодня утром, перед тем, как выйти на улицу, я поглядел в окно. Шел дождь, и я надел плащ. Таким образом, почти не раздумывая, автоматически я решил задачу, которую можно сформулировать так: что делать, когда за окном идет дождь? А вот и алгоритм его решения: ЕСЛИ за окном идет дождь, ТО перед выходом на улицу нужно надеть плащ. Ба, да ведь это же старая наша знакомая — конструкция РАЗВЕТВЛЕНИЯ!
Для того, чтобы попасть на работу, мне нужно повернуть за угол моего дома, пройти квартал, сесть на автобус, проехать четыре остановки, выйти из автобуса, перейти улицу, повернуть направо и пройти еще один квартал. Чувствуете, как я описываю алгоритм для решения еще одной задачи? «Как от моего дома попасть к месту моей работы?» — так сформулировал бы я ее. Для ее решения нужно ПОСЛЕДОВАТЕЛЬНО выполнять все указанные действия — и задача решена.
Тоже знакомая конструкция, не правда ли?
А знаете, чем я занимался весь сегодняшний день? Копал картошку. Не один, конечно, а вместе со всем своим родным коллективом. Привезли нас на поле, раздали ведра и — вперед! Из земли — в ведро, из ведра — в мешок, мешок — в грузовик. Была у нас женщина-бригадир из местных, красивая, с перстнем на пальце. Она картошку не копала, а только командовала.
— А домой нас скоро отпустят? — спросил у нее кто-то.
— А вот, миленькие, десять машин в город отправите тогда и сами поедете, — словоохотливо ответила женщина.
Так составилась задача под названием «Когда домой?» Вот алгоритм ее решения: из земли — в ведро, из ведра — в мешок, мешок — в машину. Повторять, ПОКА не нагрузим десять машин.
Узнаете? Правильно, это конструкция ЦИКЛА.
Надо сказать, что алгоритмы решения не только житейских, но и любых других задач сводятся к последовательности выполнения некоторых действий (программисты часто называют их «шагами»). А любая последовательность шагов может быть описана на языке вот этих самых только что перечисленных конструкций. Можно сказать, что любая программа, введенная в машину, представляет из себя не что иное, как алгоритм, записанный на языке таких конструкций. Поэтому-то машинные языки называются алгоритмическими.
А все ли задачи имеют алгоритмы для решения? Далеко не все.
Те, кто читал роман В. Гюго «Собор Парижской богоматери», помнят историю урода Квазимодо, который полюбил красавицу Эсмеральду. Понятно, что Квазимодо очень хотелось бы, чтобы и Эсмеральда полюбила его. Однако, увы, эта задача решения не имела. Какие бы действия ни предпринимал Квазимодо, в какой бы последовательности он ни выстраивал их, сердце красавицы (вообще говоря, весьма глупой барышни, лично я отказываюсь понимать, что в ней такого нашел Квазимодо) навсегда осталось закрытым для него.
Существуют такие задачи и в науке. В 1900 году в Париже состоялся Всемирный математический конгресс. Со своим докладом на нем выступил знаменитый математик Давид Гильберт. Для того, чтобы «проникнуть в предстоящие успехи нашей науки и тайны ее развития в начинающемся столетии», Гильберт выбрал двадцать три математические проблемы. С тех пор эти проблемы называются задачами Гильберта. До сегодняшнего дня они привлекают внимание всех математиков мира. Вот, например, как формулируется десятая проблема Гильберта. Дано: произвольное алгебраическое уравнение с целыми коэффициентами. Требуется: выяснить, существует ли у данного уравнения решение в целых числах? Оказывается, нет. Нет такого алгоритма, который позволил бы решить эту задачу. Это доказал советский математик Ю. В. Матиясевич.
А существуют ли задачи, которые имеют решения, но алгоритм которого невозможно записать? Странный вопрос, подумаете вы. Ведь если есть решение, то должен быть и алгоритм этого решения, то есть указание, каким способом решать данную задачу.
Но вот я спрашиваю: кто знает, как написать гениальный роман? Или хотя бы гениальное стихотворение? Ага, никто не знает! Тем не менее, гениальные произведения создавались и будут создаваться. Но алгоритм, или, что то же самое, рецепт, инструкцию для их написания создать невозможно. Итак, составление алгоритма — это первое, с чего начинается процесс программирования.
Второй шаг — запись алгоритма в виде программы. В одном из алгоритмических языков (их множество: фортран, алгол, пи-эл, бэйсик, паскаль…).
Третий шаг — ввод программы в машину. Этот способ сколько отличается от того, каким пользовались Великий Магистр и Петя. Во-первых, существует так называемый «памятный режим». При этом способе программа пробивается в виде дырочек на специальных бланках-перфокартах, которые затем вставляются в машину. Однако в последние годы все большее распространение получает второй способ ввода программы — «диалоговый режим». Здесь программа набирается на клавиатуре дисплея, а на экране тут же возникают точки, по которым можно проверить правильность ввода.
Кто может писать без ошибок? Никто. В том числе и программисты.
Введенную программу нужно отладить, то есть найти и устранить все ошибки.
Поэтому — четвертый шаг — отладка программы.
Вот, пожалуй, и все. Дальше начинается работа непосредственно самой машины.
Урок пятый
КТО ТАКИЕ КРАКЕЛЮРЫ?
— Казимир, кто такие кракелюры? — спросил Петя, когда на другой день ровно в девять часов стена вновь раздвинулась, и в комнату упругой, спортивной походкой вошел Великий Магистр. Высокий, строгий, с седыми висками, с орлиным взором, во фраке. Монокль в его глазу сиял, как бриллиант, и с каждым шагом по его левой ноге била волшебная шпага.
Впрочем, что-то появилось в облике Казимира. С левого плеча у него свисало нечто белое, непонятное, вроде аксельбанта. Это нечто источало запах. Запах был не то чтобы слишком отвратительным, нет, но и ничего ласкающего обоняние в нем также не ощущалось.
— Кракелюры?!! — зарычал Казимир. — Кто такие кракелюры?!! Это — кракелюры!!!
Когда он успокоился, Петя узнал от него следующее. Население планеты Занге-Зонге-Зунге-Зунд было, в общем, миролюбивым. На 99 % — гуманисты. Половина оставшегося процента — философы. А полпоследнего процента — кракелюры. То есть жители герцогства Кракелюр. Сплошь — бандиты и агрессоры. И дубье-дубьем. Интеллекта — ноль. Духовная жизнь на точке замерзания. Ученые планеты установили, что перевоспитать кракелюров можно только одним способом — забросать герцогство солеными огурцами. Оказывается, соленые огурцы обладают, одним загадочным свойством: стоит даже самому буйному кракелюру не то чтобы съесть, а только взглянуть на соленый огурец, как сразу теряется вся его агрессия. Вместо того, чтобы пакостить прогрессивному человечеству, у них возникает желание выращивать хризантемы и играть на мандолине. Вот почему кракелюры не любят соленых огурцов. Они объявили войну соленым огурцам. Единственное место для соленых огурцов — это трансформаторные будки. Все нормальные люди рисуют на них череп с костями, а кракелюры — с соленым огурцом. На этом месте Петя перебил Великого Магистра.
— А как можно его нарисовать? — недоверчиво спросил он.
— Да очень просто! Рисуешь огурец, а внутри пишешь: «соленый». Или «натрий хлор». Если образования хватит.
— Так вот, сегодня клипер «Котангенс» под командованием Великого Магистра и Пети Бочкина должен был отправиться на операцию. Нужно было подойти к берегам герцогства и подвергнуть его столицу бомбардировке солеными огурцами. Из всех орудий. Но кракелюры, хитрые бестии, что-то пронюхали. Они заминировали всю прибрежную акваторию. Сегодня, когда клипер шел сюда, в бухту, чтобы забрать на борт Петю («адмирала Бочкина», тут же поправил Казимир), пришлось пробираться по сплошным минным полям… Мины кракелюров представляют из себя дубовые кадушки, начиненные квашеной капустой. Кстати, это еще раз подтверждает собственное убожество кракелюров. Прочная логика! Они, мол, нас — огурцами, а мы их — капустой! Не выйдет, господа! Капусту мы любим, хотя квашеную, по правде сказать, не очень. Но никакого вреда она нам не приносит, неприятно только. Рванет такая мина под днищем, обляпает весь корабль с носа до кормы. Б-р-р… Противно!
— А-а, так это — капуста на вас? — догадался Петя.
— Где?
— А вон — на плече.
Казимир содрогнулся от омерзения.
Двумя пальцами, как гадюку, он снял с плеча капустное волокно и выбросил его из комнаты далеко на морской берег.
— Адмирал, — сказал он, вытирая пальцы белоснежным платком, — мы должны покарать кракелюров. Команду сжигает ярость.
— А что я должен делать? — поинтересовался Петя.
Казимир зачем-то полез к Пете за шиворот и достал оттуда эскимо на палочке.
— Ангина прошла? — спросил он.
— Прошла.
— Тогда это тебе.
Потом он снова полез к Пете за шиворот и извлек оттуда вазу с букетом благоухающих роз.
— Это — твоей маме, — сказал Казимир и поставил вазу на телевизор. Затем он вытащил у Пети из-за шиворота огромную книгу под названием «Краткий философский словарь».
— Ну, это — моей жене, — сказал Казимир и пояснил: — Она у меня профессор.
Он в четвертый раз полез к Пете за шиворот, приговаривая: «Где же она? Где?»
— Что вы там ищете, Казимир, — возмутился Петя. — У меня там ничего нет!
— Ну да — ничего! А это что? — И Казимир вытянул из-под Петиной рубашки офицерский планшет с вложенной в него картой. Он развернул карту и расстелил ее на столе.
— Смотри сюда, — сказал Казимир.
ПЕТЯ СОСТАВЛЯЕТ ПРОГРАММУ ПРОХОДА КЛИПЕРА ПО МИННОМУ ПОЛЮ
Карта была такая:
— Вот — бухта, где стоит наш клипер, — пояснил Казимир. — Выход из нее заминирован кракелюрами. Здесь, к востоку, мины стоят гуще, видишь? Ты должен вывести корабль в открытое море.
— Сам?
— Зачем же? У руля будет стоять Кристина. То есть бывшая Кристина, а в настоящий момент Исполнитель-рулевой. Ты должен составить для нее программу выхода в открытое море.
— А потом?
— Потом — видно будет. Сначала проход через минные поля. Подчеркиваю: нужно провести корабль через минные поля так, чтобы ни разу не столкнуться с миной.
— Какие команды можно использовать в программе?
— Стандартных команд три: «курс — норд» (то есть на север) «право руля» и «полный вперед».
— А проверки?
— Только одна: «прямо по курсу мина».
— Все ясно, — сказал Петя. — Я выдам программу одной левой!
— Сначала спецификацию, — предупредил Казимир.
— Чтобы выйти в открытое море, нужно идти на север, — начал Петя. — Значит, первые две команды в программе должны быть: «курс — норд» и «полный вперед». Так?
— Продолжай, — сказал Казимир.
— Предположим, что впереди по курсу появится мина. Если Исполнитель ее увидит, то должен выполнить команду «право руля». Так?
— Продолжай, — сказал Казимир. — Но учти, что после этой команды мы повернем с норда на ост. С севера на восток. А открытое море у нас — на норде.
— Ясное дело, — сказал Петя. — Мы повернем на восток, чтобы не столкнуться с миной. После поворота, когда мы проедем мину, Кристина выполнит новую команду: «курс — норд». И мы снова повернем к открытому морю. Проедем мину — и повернем.
— Пиши программу, — сказал Казимир и, открыв Краткий философский словарь, погрузился в изучение слова «плюрализм».
А Петя напечатал такую программу:
ПОВТОРЯТЬ 1000000 РАЗ ЕСЛИ ПО КУРСУ МИНА ТО ПРАВО РУЛЯ ПОЛНЫЙ ВПЕРЕД ИНАЧЕ КУРС НОРД ПОЛНЫЙ ВПЕРЕД КОНЕЦ УСЛОВИЯ КОНЕЦ ЦИКЛА КОНЕЦ— Готово, — сказал Петя.
Казимир дернул головой и перекинул монокль из правого глаза в левый.
— Так, — сказал он. — Ты использовал конструкцию разветвления и цикла…
— Да.
— А почему ты написал: «повторять миллион раз»? Почему не полмиллиона? Или не десять миллионов?
— Для ровного счета, — ответил Петя. — Откуда я знаю, сколько мин нам встретится, пока мы не выйдем в открытое море? Но уж не больше миллиона…
— А если миллиард?
— Тогда мы взорвемся, — хладнокровно ответил Петя. — Миллион мин объедем, а на миллион первой — взорвемся.
— А мы с твоей программой еще раньше взорвемся, — заметил Казимир. — Или сядем на мель.
— Это почему?
— Гляди, — и Казимир начертил на карте курс корабля:
— При каждой встрече с миной, — начал объяснять Казимир, — Исполнитель будет выполнять команду «право руля». Поскольку в восточной части бухты минное поле очень густое, то «Котангенс» будет стремительно отклоняться к востоку. А так как береговая дуга бухты в этом месте круто уходит на север, то мы сядем на мель раньше, чем пересечем минное поле. Но это — в лучшем случае. А в худшем — мы столкнемся с миной сразу после команды «право руля». Ведь у Исполнителя отсутствует проверка «справа по борту мин нет», и поворачивать корабль Кристина будет вслепую. А вдруг как раз в том месте, куда она повернет, — стоит мина? Разве можно вслепую разъезжать по минным полям? Нет, адмирал, ваша программа никуда не годится.
— А что же делать? — спросил Петя.
— Как что? — удивился Казимир. — Нужно делать то, что говорит нам карта. А она говорит: в западной части бухты мин гораздо меньше, чем в восточной. Значит, идти по западной части безопаснее. А тебя почему-то несет в восточную.
— Но ведь прокладывать курс по западной части я не могу, — сказал Петя.
— Почему?
— А разве вы не понимаете? У меня не хватает для этого команд.
— Хватает, — сказал Казимир. — Нужно, Петя, нужно, чтобы «Котангенс» выходил в море по западной части бухты.
— Казимир, вы меня прямо удивляете. Не может «Котангенс» идти по западной части. Для этого Исполнитель должен понимать команду «Лево руля». Но она же не входит в набор стандартных команд. Корабль может идти или на север, или на восток. Неужели это не понятно?
— Корабль может идти на запад, — упрямо сказал Казимир. — При этом Рулевой не обязан понимать команду «лево руля». Достаточно двух команд «право руля» и «полный вперед».
— Как это? — спросил Петя.
— Сдаешься? — спросил Казимир.
— Нет, — сказал Петя, — подумаю.
ОПИСАНИЕ НЕСТАНДАРТНЫХ КОМАНД
— Казимир, — сказал Петя. — А что если после команды «право руля» и «полный вперед» перед кораблем опять появится мина?
— Прекрасный вопрос! — воскликнул Великий Магистр. — В самом деле, что — тогда?
— Тогда стандартная проверка обнаружит эту мину, и, значит, рулевой снова выполнит команду «право руля»…
— И…
— …и корабль пойдет в обратную сторону!
— Следовательно, рулевой выполнит команду «развернуться», верно?
— Верно.
— А ведь эта команда не входит в набор стандартных команд, так?
— Так. Просто рулевой два раза выполнит стандартную команду «право руля».
— Выходит, для того, чтобы повернуть корабль влево, рулевой должен…
— …Три раза выполнить команду «право руля»! — радостно ответил Петя.
— Вот мы с тобой и подошли к одному из самых интересных разделов программирования — описанию нестандартных команд через стандартные, — объявил Казимир.
Он щелкнул пальцами, и машинка сама напечатала текст:
ПРАВО РУЛЯ ПРАВО РУЛЯ ПРАВО РУЛЯ КОНЕЦ— Что здесь написано? — спросил Казимир.
— Команда «лево руля», — ответил Петя.
— Хорошо. Тогда составь программу выхода в открытое море вдоль западного побережья бухты.
Петя напечатал текст:
ПОЛНЫЙ ВПЕРЕД ЕСЛИ ПО КУРСУ МИНА ТО ПРАВО РУЛЯ ПРАВО РУЛЯ ПРАВО РУЛЯ ИНАЧЕ КУРС — НОРД КОНЕЦ УСЛОВИЯ КОНЕЦКазимир прочитал программу и сказал:
— Мы с тобой знаем, что программы могут состоять из трех программных конструкций. Скажи — каких?
— Из последовательных выполнений команд, из разветвлений и из циклов.
— Правильно. Так вот, кроме конструкций, в тексты программ могут входить и ОПИСАНИЯ нестандартных команд. Вот как, например, описывается команда «лево руля».
Машинка затрещала, и из нее вылетел текст:
ЛЕВО РУЛЯ ГДЕ КОМАНДА ЛЕВО РУЛЯ ОЗНАЧАЕТ ПРАВО РУЛЯ ПРАВО РУЛЯ ПРАВО РУЛЯ КОНЕЦ ОПИСАНИЯ— Описание состоит из названия нестандартной команды, — оно, как видишь, занимает первую строку и из служебных слов «где… означает…» и «конец описания». По-моему, ничего сложного в описаниях нет. Главное, запомнить их форму. Теперь ты можешь написать новую программу выхода в открытое море и включить в нее описание команды «лево руля». Петя подумал и напечатал:
ПОЛНЫЙ ВПЕРЕД ЕСЛИ ПО КУРСУ МИНА ТО ЛЕВО РУЛЯ ГДЕ КОМАНДА ЛЕВО РУЛЯ ОЗНАЧАЕТ ПРАВО РУЛЯ ПРАВО РУЛЯ ПРАВО РУЛЯ КОНЕЦ ОПИСАНИЯ ИНАЧЕ КУРС — НОРД КОНЕЦ УСЛОВИЯ КОНЕЦ— Ар-лята! Учатся летать! — воодушевленно пропел Казимир. — А теперь — по коням!
Шлюпка, словно птица, понесла их навстречу паруснику, и вот Петя с Казимиром взлетают по трапу на борт «Котангенса», вот — они на капитанском мостике, вот программа введена в Кристину, и вот — клипер летит по морской глади, ловко уклоняясь от бочек с квашеной капустой, расставленных проклятыми кракелюрами!
И был бой. И был залп. Из всех орудий. Солеными огурцами! И что вы думаете? Кракелюры перековались в один миг! И под звон мандолин, с песней «Лаванда! Горная лаванда!» они все, как один, отправились на субботник по благоустройству территории. Высаживать хризантемы. А может, васильки или какие-нибудь лютики. Впрочем, к программированию данное обстоятельство никакого отношения не имеет, а потому на этом месте мы и простимся с нашими героями — Петей и Казимиром.
Заключение
Вот и закончился наш рассказ о языке программирования.
Для чего люди изобрели этот язык?
Для общения с умными машинами — компьютерами.
Давайте поговорим немного о том, где применяют компьютеры.
ПРОГРАММИРОВАНИЕ В МЕДИЦИНЕ
Рак… Как только не называют эту болезнь! «Бунт взбесившихся клеток»… «Чума XX века»… «Убийца с тысячью лиц».
В течение всей жизни в организме человека происходит деление клеток. Клетки делятся по программе заложенных в наследственных тайниках — генах. Так формируются и многочисленные органы.
Но вот с одной из клеток что-то происходит. Она начинает делиться с невероятной быстротой, стремительно превращаясь в злокачественную опухоль. Образование ведет себя агрессивно. Оно вторгается на территорию соседних с ним органов и тканей, и, разрастаясь, разрушает их. Раковые клетки — это клетки-предатели. Порожденные собственным организмом, они изменяют ему и становятся его убийцами. Потоком крови эти клетки разносятся по всему организму и там, где остановятся, дают начало новым страшным образованиям — метастазам.
Болезнь обнаружена. Больного доставляют в стационар. Здесь начинается борьба за его жизнь и здоровье. Медики применяют самые различные методы для лечения злокачественных опухолей. В онкологии широко используется хирургия, химиотерапия, гормонотерапия, иммунотерапия. Важное место занимает метод лечения опухолей, который называется лучевой терапией.
Мы находимся в Омском онкологическом центре. Беседуем в одной из комнат с человеком в белом халате. Он не врач. Он — физик. И все же вместе с врачами он лечит людей. Зовут его Владимир Викторович Толкачев.
— Как начиналась лучевая терапия? — задаю первый вопрос.
— Давным-давно, в 1906 году состоялся съезд российских хирургов. Речь на нем шла о многих вещах, в том числе и о способах лечения рака. Встречались такие случаи, когда скальпелем уже ничего нельзя было сделать. Вот тогда-то и встал вопрос о применении только что открытых, таинственных, всепроникающих лучей, которые испускают радий и близкие ему вещества.
— Что это за лучи?
— Если поднести к потоку таких лучей магнит, то можно обнаружить, что поток расщепится на три ветви. Один пучок начнет притягиваться к положительно заряженному полюсу магнита (это — поток свободных электронов: такие лучи называются «бета-лучами»), второй пучок отклонится к отрицательному полюсу (это — положительно заряженные протоны или «альфа-лучи»); обнаружится, наконец, и третий пучок, который не будет отклоняться в магнитном поле (доказано, что он представляет из себя поток электромагнитных волн, этаких порций энергии, которые называются квантами. Эти лучи электрически нейтральны. Они получили название «гамма-лучей»).
— Какие из этих лучей применяются в онкологии?
— Все три вида. И альфа, и бета, и гамма.
— Что же, у них оказались какие-то целебные свойства?
— Напротив. Очень быстро выяснилось, что, пронизывая ткани организма, эти лучи разрушают их. То, что мы называем радиацией, в сущности, и есть проявление действия этих лучей. Мария Склодовская-Кюри, женщина-физик, та самая, которая вместе со своим мужем Пьером Кюри открыла радий, оказалась и жертвой своего открытия. Длительное время работая с радиоактивными веществами, она получила такую дозу облучения, которая привела ее к преждевременной смерти.
— Как именно происходит разрушение тканей организма радиоактивными лучами?
— Это происходит на клеточном уровне. Радиоактивность разрушает хромосомный аппарат клетки, меняет ее химическую среду. Клетка быстро погибает.
— Наверное, эта способность радиоактивности и послужила причиной того, чтобы ее стали использовать в онкологии?
— Да. Ведь задача онколога как раз в том и заключается, чтобы уничтожить больную клетку и…
— …не повредить здоровью?
— Именно так. В этом — главная задача и главная сложность лучевой терапии.
— Расскажите об этом подробнее.
— Лучевая терапия — это по существу сплошные компромиссы. Знаете, какая смертельная доза для человека?
— Нет, не знаю.
— Шестьсот рентген. А при раке мы должны облучить его дозой до семи тысяч рентген. Иначе опухоль не разрушится.
— В десять раз больше смертельной?
— Да.
— Но где же выход?
— Выход в том, чтобы облучать только опухоль.
— Да, но если опухоль со всех сторон закрыта здоровыми тканями, значит, они тоже будут облучены?
— Правильно. Но стратегия облучения состоит в том, чтобы здоровые ткани получили минимальную дозу радиации, в то время как основная ее концентрация пришлась бы на опухоль.
— Что-то плохо себе представляю, как этого можно добиться…
— Смотрите. Вот я беру узкую полоску бумаги. С одной стороны прикрепляю ее к столу кнопкой. Теперь представьте себе, что полоска бумаги — это радиоактивный луч, поверхность стола — здоровые ткани, а в том месте, где кнопка, находится раковая опухоль. Теперь я начинаю вращать бумажку вокруг кнопки. Видите? Луч постоянно сконцентрирован в том месте, где находится кнопка, то есть в районе опухоли, в то время как здоровые ткани попадают в зону его действия лишь временно. И тут уже начинается математика. Задача сводится к расчету интенсивности луча и времени облучения.
— Все так просто?
— Если бы так! Часто подступы к опухоли перекрывают жизненно важные органы. Поэтому приходится искать самый оптимальный маршрут движения луча. Видите ли, источник излучения, как прожектор на колесах, можно двигать в самых различных направлениях. В нужный момент можно прекращать облучение, а затем возобновлять его. Но по каким маршрутам передвигать? Где и на какое время прекращать облучение? Для решения подобных задач требуются сложные и кропотливые расчеты. И здесь без ЭВМ пришлось бы трудно.
— Но, наверное, программисты должны получать какие-то исходные данные для своей работы?
— Главным образом они работают по двум параметрам: точное место локализации опухоли и ее точные границы.
— А если у больного имеются какие-нибудь индивидуальные особенности в расположении внутренних органов, которые нельзя облучать?
— Несомненно, это тоже принимается во внимание. Таким образом, задаются исходные условия для решения задачи. Алгоритм же для ее решения не такой уж сложный. Повторяю: каждый раз существует несколько вариантов ее решения, и машина выбирает оптимальный. Сейчас мы получаем от ЭВМ все необходимые графики, где указаны все режимы работы излучателя во время операции, но в идеале компьютер и излучатель должны составлять единое целое. Компьютер сам должен управлять нашей пушкой в течение всей операции. Что ж, когда-нибудь мы увидим и это.
— Последний вопрос. Вы верите в то, что рак можно победить?
— Нет, не верю.
— ???
— Я знаю, что его можно победить. Семнадцать лет здесь работаю. Знаю, что говорю. Если болезнь не слишком запущена — лечим. И довольно успешно.
КОМПЬЮТЕРЫ СТРОЯТ МОДЕЛИ
Мы рассказали о применении компьютеров в медицине. Однако одной только медициной их применение не исчерпывается. Легче перечислить области человеческой деятельности, где компьютеры не используются. В гадании на кофейной гуще, например. Впрочем, недавно в газетах промелькнуло сообщение о том, что французские гадалки, пустив шапку по кругу, сбросились на ЭВМ…
Электронные мозги водят самолеты и поезда, управляют технологическими процессами на заводах, помогают выпекать хлеб и кроить одежду, они выращивают цыплят на фермах и принимают экзамены у студентов. Как стремительно вошли компьютеры в нашу жизнь!
Поразительнее всего оказалось то, что компьютерам присущи возможности, о которых раньше никто не подозревал. Они научились строить модели!
Вы думаете — какие модели? Самолетов или автомобилей? Вовсе нет. Вычислительные машины научились строить модели процессов и событий. В Вычислительном центре Академии наук СССР однажды смоделировали — что бы вы подумали? — модель Пелопонесской войны, которая проходила давным-давно, в античные времена. А для чего понадобилось это делать? Поймете чуть позже.
Не надо думать, что в недрах ЭВМ крошечные воины, вооруженные щитами и мечами, ходили друг на друга в атаку. Машинная модель войны заключалась в другом. Как известно, в Пелопонесской войне принимали участие государства Афинского союза, которые сражались против Спарты и ее союзников. В машину вводились данные, характеризующие военно-экономический потенциал этих стран, сведения о социальной структуре полисов, а также система причинных связей.
Так, например, чем больше будет площадь разрушения какой-либо страны, тем меньше будет из нее импорт сельскохозяйственной продукции. Тем меньше будет количество денег в государстве и так далее. Множество таких причинных связей было заложено в машину.
И вот год за годом машина стала воспроизводить события, происходившие в войне, и следить, к каким экономическим следствиям приводили эти события.
«Трудности усугублялись еще тем, что разные исследователи античного мира дают разные цифры (которые нужно было вводить в машину — В. Р.) Так, один древний автор считал, что одному рабу полагалось в день 0,6 литра вина, другой — что 1,5 литра.
У одного автора даются одни цены на шерсть, у другого — другие. Но есть некоторые абсолютно бесспорные цифры. Например, средний доход крестьянина или количество денег в казне Афинского государства… Однако представление всего материала в форме балансовых динамических соотношений позволяет в режиме диалога построить не только реконструкцию всех экономических и политических аспектов истории войны Афинского и Пелопонесского союзов, но и уточнить целый ряд важных количественных характеристик хозяйственной, социальной и военной жизни греческих полисов. Так, например, удалось установить реальную цену на шерсть и выяснить, что средний раб получал в день немногим больше пол-литра вина».
Это пример из книги Н. Н. Моисеева «Математика ставит эксперимент».Смотрите, как компьютер сумел заглянуть в глубины истории и разглядеть в ней то, что до сих пор увидеть не удалось. Чем не машина времени?
Для чего написана эта книга?
Эта книга — об алгоритмических языках. Но можно ли по ней научиться программированию? Нет, нельзя. Я и не ставил перед собой такой цели. Но тогда для чего я написал эту книгу?
Для решения множества задач на свете существует множество программных языков: алгол, фортран, паскаль, бэйсик, пи-эл, ассемблер… Я перечислил только наиболее употребительные языки.
Подобно тому, как во множестве человеческих языков имеется нечто общер — например, слова, обозначающие предметы, — существительные, или слова, обозначающие действия — глаголы, — подобно этому множество программных языков имеют общие конструкции — именно о них и шла речь в книге. Она, конечно, не заменяет собой
учебника по программированию, но очень хочется думать, что эта книга может помочь тем, кто изучает программирование.
А КАК ИЗУЧАЮТ ПРОГРАММИРОВАНИЕ?
Давайте заглянем в один из кабинетов информатики межшкольного учебного комбината Октябрьского района города Омска.
На свой первый урок сюда пришли девятиклассники. Через два года они научатся общению с компьютером. С чего же начинается обучение?
С игры!
Да, да. Программирование, наверное, единственная наука, где на уроках не только разрешают, но и требуют от школьников: играйте! А с кем они играют? С компьютером.
Сначала преподаватель объясняет, что компьютеры, за которыми сидят ребята, состоят из двух главных узлов: дисплея (это телевизионный экран) и терминала (это что-то вроде пишущей машинки с клавиатурой).
В некоторые терминалы встроена собственная ЭВМ. Такие компьютеры называются персональными. Прежде всего — знакомство с клавиатурой. Клавиши здесь побольше, чем на пишущей машинке. Буквы русские и латинские. А вот — четыре странные клавиши. Они сидят как бы в одном гнезде. На всех четырех — обозначения стрелок.
На одной — стрелка вверх, на другой — стрелка, направленная влево, на третьей — вправо, на четвертой — вниз. Эти стрелки управляют движением курсора. А что такое курсор? Это — движущееся изображение на экране дисплея. Оно может принимать различные формы. В игре «теннис», например, курсор выполняет роль ракетки. По всему экрану летает теннисный мяч, а ты должен отбить его ракеткой в сторону партнера. Промахнешься — партнер получает очко. А в игре «воздушный бой» ты должен сбить вертолет. Он неожиданно появляется в различных местах экрана и меняет свой маршрут совершенно непредсказуемо. Нужно поймать его в перекрестье прицела и выстрелить. Для этого ты нажимаешь еще одну клавишу. Больше всего мне понравилась игра «Космическая атака» (как было бы хорошо, если бы звездные войны навсегда остались увлекательной компьютерной игрой!). На землю совершается нападение космических кораблей инопланетян. Ты управляешь патрульным звездолетом, который должен отразить эту атаку. Но стоит тебе зазеваться, и ты можешь столкнуться с неопознанным летающим объектом, который едва заметен на экране. Твои результаты тут же аннулируются.
Надо сказать, что все эти «игры» сочинил и написал для них программу бывший ученик Юрий Дорожкин, который когда-то сам осваивал в этих кабинетах азы программирования. Сейчас он учится на 2-м курсе Московского физико-технического института, а его программы помогают другим учащимся постигать основы информатики.
Странное дело — время занятий окончилось, но многие не хотят уходить из класса. Ведь общаться с компьютером так интересно!
Я знаю, что многие будут приходить в УПК не только на занятия — раз в неделю, но начнут проводить здесь все свое свободное время. Сначала игра, а затем — попытки составить собственную, пусть простенькую, а потом и посложнее программу. Так случилось с Борисом Эпштейном, который сейчас составляет программу «Графический редактор». Или — с Костей Волынко, работающим над программой «Чертежник».
Для этих и других ребят, с которыми я познакомился, программирование стало уже и не увлеченностью, а — не побоюсь этих слов — жизненной потребностью. А как же иначе сказать о людях, которые готовы проводить у компьютера дни и ночи?
Вырастает первое поколение людей, которое обладает совершенно иной, совершенно новой грамотностью — компьютерной. Они станут носителями новых ценностей, а может быть, и новой культуры…
Эх, братцы, интересные времена наступают!
Примечания
1
В дальнейшем эта машинка будет появляться всякий раз, когда нужно будет напечатать очередную программу. Затем она будет волшебным образом исчезать. Чтобы не растягивать наше повествование, мы не станем каждый раз описывать такое появление и исчезновение, ограничившись упоминанием об этом только однажды — вот на этой самой странице (Примеч. автора).
(обратно)2
Только в воображении автора. Здесь мы имеем случай вранья. В программировании вообще НЕ бывает циклов ПОВТОРЯТЬ <…> раз, для этого используются переменные.(например FOR I:=1 TO 24 DO BEGIN <…> END; или FOR I:=24 DOWNTO 1 DO BEGIN <…> END; на Паскале, DO I=1 TO 24; <…> END; или DO I=24 TO 1 BY -1; <…> END; на PL1 и т. д. и т. п.) Поскольку автор знакомит читателя с переменными гораздо позже, ему пришлось выдумать циклы ПОВТОРЯТЬ <…> РАЗ.
Что касается слова «step», то оно обозначает шаг переменной и не имеет отношения к количеству повторений цикла, используется только в Алголе, в PL используется слово BY, в Си это реализовано по-своему, в Паскале шаг может быть только 1, если TO или -1, если DOWNTO.
(Примечание оцифровщика-«книгодела»)
Уж очень мне не понравился такой наглый обман маленьких читателей
(обратно)3
На самом деле НЕправильно. При таком алгоритме если орудие уже заряжено сгущёнкой, то оно ни разу не выстрелит, выстрел предусмотрен только, если сгущёнкой не заряжено. В общем, Казимир решил зажилить сгущёнку:) кроме того, если у нас язык допускает конец условия, то конец условия должен находиться раньше конца цикла, так как условие вложено в цикл, а не наоборот.
(Примечание оцифровщика-«книгодела»)
(обратно)4
Автор опять врёт. Этот алгоритм неправильный. Во-первых, конца метки не бывает. Во-вторых, этот алгоритм зациклится бесконечно переходя на метку L. Видимо, автор путает подпрограмму с переходом на метку. В этот раз Казимир решил закидать вcех бесконечным запасом тушёнки после 3 банок сгущёнки. Видимо, тушёнки ему не жалко, в отличие от сгущёнки.
(обратно)
Комментарии к книге «Пять уроков Великого Магистра», Виктор Рябченко
Всего 0 комментариев