Игры с Чипом | страница 15



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

— Как сложно, правда, Чип? Три строчки написано, а сколько беготни.

— А ты попробуй к следующему разу сам сочинить рекурсивную программу. Договорились?

ОТ РЕДАКЦИИ.

Ребята, может быть, и вы попробуете сочинить рекурсивную программу для сказки или считалки? А Чип проверит, что у вас получится. Ждем ваших писем.

Конкурс поросят 

К следующему разу Сережа ничего путного не смог придумать. В голову лезла какая-то чепуха про двенадцать поросят.

«12 поросят на палубе сидят.

Они песенки поют, им уроки задают.

Один из них устал и с палубы удрал,

И вот результат — 11 поросят.

11 поросят на палубе сидят...».

И так далее...

В конце концов  из этого тоже можно сделать программу. Сережа взял листочек бумаги и написал:

>Программа. «ПЕСЕНКА ПРО N ПОРОСЯТ».

Но тут вспомнил, как Чип объяснял ему: «Если внутри программы что-то меняется, то это уже не программа, а подпрограмма».

«У нас же число поросят будет меняться», — подумал Сережа, зачеркнул первую строчку и написал вот что:


>Подпрограмма.

>«ПЕСЕНКА ПРО N ПОРОСЯТ»

>Если N=0, то конец.

>N ПОРОСЯТ НА ПАЛУБЕ СИДЯТ.

>ОНИ ПЕСЕНКИ ПОЮТ, ИМ УРОКИ ЗАДАЮТ

>ОДИН ИЗ НИХ УСТАЛ И С ПАЛУБЫ УДРАЛ.

>И ВОТ РЕЗУЛЬТАТ: N-1 ПОРОСЯТ

>«ПЕСЕНКА ПРО N-1 ПОРОСЯТ»

>Конец подпрограммы.


— Ну что, не так уж плохо, — сказал Чип, прочтя про поросят. — Не так плохо для начала: ты догадался, что нужно написать не программу, а подпрограмму и остановиться, когда все поросята удерут с палубы.

— Ну, а что у тебя? — поинтересовался Сережа.

— А у меня конкурс для твоих поросят.

— Конкурс? Какой конкурс?

— Ну, скажем, по пению. Они песенки поют? Вот мы и проверим, кто лучше поет.


>Подпрограмма «Лауреат... (среди поросят)».

>Если поросенок один, то объявить его лауреатом.

>Если их больше, то отвести в сторону первого поросенка и найти лауреата среди остальных поросят.

>Сравнить пение этого лауреата и первого поросенка.

>Объявить победителя лауреатом.

>Конец.


— Ага, — Сережа задумался, — это похоже на перестройку колонны, которую мы делали в прошлый раз. Сейчас я вспомню. Значит, сначала мы поросят будем поочередно отводить в сторону, потом начнем с конца: объявим последнего лауреатом, сравним его с предпоследним, и так до самого первого. Вспомнил, вспомнил! Знаешь, Чип, а это несправедливо: последнему дали побыть лауреатом, даже не проверяя, как он поет. А бедненький первый, даже если он по пению на втором месте, ни разу лауреатом не был.