Игры с Чипом | страница 15
— А и не надо заранее знать! Начинай применять к ним ту же самую программу, и все получится. Они по очереди будут делать шаг вбок, пока не дойдет черед до последнего, а потом предпоследний встанет позади последнего, предпоследний за ним и так далее, пока первый не встанет сзади всех. Программа будет применяться сто раз, и сто раз будет происходить возврат к предыдущей перестройке.
— Как сложно, правда, Чип? Три строчки написано, а сколько беготни.
— А ты попробуй к следующему разу сам сочинить рекурсивную программу. Договорились?
ОТ РЕДАКЦИИ.
Ребята, может быть, и вы попробуете сочинить рекурсивную программу для сказки или считалки? А Чип проверит, что у вас получится. Ждем ваших писем.
Конкурс поросят
К следующему разу Сережа ничего путного не смог придумать. В голову лезла какая-то чепуха про двенадцать поросят.
«12 поросят на палубе сидят.
Они песенки поют, им уроки задают.
Один из них устал и с палубы удрал,
И вот результат — 11 поросят.
11 поросят на палубе сидят...».
И так далее...
В конце концов из этого тоже можно сделать программу. Сережа взял листочек бумаги и написал:
>Программа. «ПЕСЕНКА ПРО N ПОРОСЯТ».
Но тут вспомнил, как Чип объяснял ему: «Если внутри программы что-то меняется, то это уже не программа, а подпрограмма».
«У нас же число поросят будет меняться», — подумал Сережа, зачеркнул первую строчку и написал вот что:
>Подпрограмма.
>«ПЕСЕНКА ПРО N ПОРОСЯТ»
>Если N=0, то конец.
>N ПОРОСЯТ НА ПАЛУБЕ СИДЯТ.
>ОНИ ПЕСЕНКИ ПОЮТ, ИМ УРОКИ ЗАДАЮТ
>ОДИН ИЗ НИХ УСТАЛ И С ПАЛУБЫ УДРАЛ.
>И ВОТ РЕЗУЛЬТАТ: N-1 ПОРОСЯТ
>«ПЕСЕНКА ПРО N-1 ПОРОСЯТ»
>Конец подпрограммы.
— Ну что, не так уж плохо, — сказал Чип, прочтя про поросят. — Не так плохо для начала: ты догадался, что нужно написать не программу, а подпрограмму и остановиться, когда все поросята удерут с палубы.
— Ну, а что у тебя? — поинтересовался Сережа.
— А у меня конкурс для твоих поросят.
— Конкурс? Какой конкурс?
— Ну, скажем, по пению. Они песенки поют? Вот мы и проверим, кто лучше поет.
>Подпрограмма «Лауреат... (среди поросят)».
>Если поросенок один, то объявить его лауреатом.
>Если их больше, то отвести в сторону первого поросенка и найти лауреата среди остальных поросят.
>Сравнить пение этого лауреата и первого поросенка.
>Объявить победителя лауреатом.
>Конец.
— Ага, — Сережа задумался, — это похоже на перестройку колонны, которую мы делали в прошлый раз. Сейчас я вспомню. Значит, сначала мы поросят будем поочередно отводить в сторону, потом начнем с конца: объявим последнего лауреатом, сравним его с предпоследним, и так до самого первого. Вспомнил, вспомнил! Знаешь, Чип, а это несправедливо: последнему дали побыть лауреатом, даже не проверяя, как он поет. А бедненький первый, даже если он по пению на втором месте, ни разу лауреатом не был.