Сказки-программы
На следующий день, когда Сережа перед сном вызвал Чипа и они немножко поиграли в салочки- считалочки, Сережа попросил:
— Чип, а ты сказки какие-нибудь знаешь? Я так люблю сказки, даже совсем глупые, для малышей.
Чип задумался.
— Сказку? Нет, это работа для суперкомпьютера, вот тот может хоть сто тысяч сказок в секунду рассказывать.
— Да куда мне столько, мне и одной хватит. Ну, пожалуйста, Чипка, я очень тебя прошу. Попробуй, может, что-нибудь получится. Ты такой умный!
— Что ж, — Чип был явно польщен, — сказку, говоришь? Ладно, попробуем, только это будет не сказка, а сказка-программа. Ручка есть? Записывай.
И вот что продиктовал Чип.
РЕПКА.
Глава № 1. Жили-были:
жилец № 1 = Дедка,
жилец № 2 = Бабка,
жилец № 3 = Внучка,
жилец № 4 = Жучка,
жилец № 5 = Кошка,
жилец № 6 = Мышка;
Глава № 2. ПОСАДИЛ ДЕД РЕПКУ. ВЫРОСЛА РЕПКА БОЛЬШАЯ-ПРЕБОЛЬШАЯ. СТАЛ ДЕД ЕЕ ТЯНУТЬ. ТЯНЕТ-ПОТЯНЕТ, А ВЫТЯНУТЬ НЕ МОЖЕТ.
Глава № 3. Сейчас номер жильца N = 1, а потом он будет меняться.
Глава № 4. Вспомните, чему равняется N, и к этой цифре прибавьте 1.
Глава № 5. ПОЗВАЛ ЖИЛЕЦ N—1 ЖИЛЬЦА N (ПРЕДЫДУЩИЙ ЖИЛЕЦ СЛЕДУЮЩЕГО ЖИЛЬЦА).
Глава № 6. ТЯНУТ-ПОТЯНУТ.
Глава № 7. Если N = 6, то переходите к главе № 10, иначе читайте дальше.
Глава № 8. А ВЫТЯНУТЬ НЕ МОГУТ.
Глава № 9. Возвращайтесь к главе №4 и читайте
следующие за ней главы.
Глава № 10. ВЫТЯНУЛИ РЕПКУ!
Глава № 11. Конец сказки.
— Что же это за сказка? — воскликнул Сережа в недоумении. — Чепуха какая-то! Ой, извини, Чип, я хотел сказать, что сказка очень интересная, но только непонятная.
— Что же тут непонятного? — проворчал Чип. — Все понятно. Делай, что написано маленькими буквами, и читай, что написано большими, и получится сказка. Вот написано N=1, значит, запомни, что сейчас N равно 1. Написано — прибавь 1 к N, значит, посмотри, чему сейчас N равно, и прибавь 1. Было 1 — станет 2, потом, когда второй раз вернешься к главе № 4, будет 2, а станет 3. А вместо слов «жилец № такой-то» читай его имя по списку жильцов. Значит, на этот раз уже не дед бабку, а бабка внучку позовет. Теперь понял?
— Ну-ка, ну-ка, — до Сережи наконец все дошло. — Ох, как здорово! Значит, пока до жильца № 6, то есть до мышки, очередь не дойдет, я все буду возвращаться и возвращаться, и все новые жильцы будут репку тянуть. А на мышке все кончится, так заранее и рассчитано. Послушай, Чип, а ведь так можно хоть сто жильцов взять, и сказка длиннее не станет, только вместо 6 надо будет всюду сто писать.
— Вот сейчас, — провозгласил Чип торжественно, — ты понял самое главное в программировании: цикл. Все идет по кругу, только жильцы прибавляются. Так зачем много раз одно и то же писать? Для этого и придуман цикл. Здесь цикл на мышке кончается, а бывает и бесконечный цикл, только его все компьютеры как огня боятся. Вот, например, сказка про попа и его собаку. Кстати, попробуй-ка напиши ее в виде программы.
— Сейчас попробую, — ответил Сережа. Он сел за стол и через пару минут написал:
ПОП И СОБАКА
Глава № 1. У ПОПА БЫЛА СОБАКА, ОН ЕЕ ЛЮБИЛ.
Глава № 2. ОНА СЪЕЛА КУСОК МЯСА.
Глава № 3. ОН ЕЕ УБИЛ. И В ЗЕМЛЮ ЗАКОПАЛ.
Глава № 4. И НАДПИСЬ НАПИСАЛ:
Глава № 5. Если не надоело, возвращайтесь к главе № 1, иначе отдыхайте.
Глава № 6. Конец.
— Ого, — улыбнулся Чип, — да ты, я вижу, прирожденный программист. Пожалел компьютер и вставил условие «если не надоело» в пятой главе. Сделал лазейку из бесконечного цикла. Значит, если надоело, то можно отдохнуть.
— Знаешь, Чип, только мне эта сказка совсем не нравится. Разве можно собаку мучить? Ну, наказал бы, а то сразу убивать. Давай ее спасем!
— Давай, — охотно согласился Чип. — Пусть тот, кто читает, сам выбирает для собаки наказание. Вот заменим главу № 3 на такую:
«Глава № 3. ОН ЕЕ НАКАЗАЛ».
Теперь, перед тем, как читать сказку, надо выбрать наказание. Ну, скажем:
наказал = отругал и не дал мороженого
,
или
наказал = отшлепал и запер на час в чулане
.
Кстати, такая программа, в которой можно что-то определять по желанию перед тем, как пользоваться, называется подпрограммой. А то, что надо определять, пишется в скобках после названия. Значит, мы сейчас написали сказку-подпрограмму
ПОП И СОБАКА (наказал)
А когда будешь ее читать, можешь вставить, что хочешь, ну хоть
ПОП И СОБАКА (поцеловал)
Видишь, здесь вставлено то, что надо читать вместо слова «наказал».
Ладно, спокойной ночи, мне пора. Завтра еще поиграем, хорошо?