Вы уже убедились в том, что выделение вспомогательных алгоритмов – мощное средство, облегчающее решение сложных задач. Но использовать его можно не только так, как мы делали это до сих пор, выделяя вспомогательные алгоритмы из практически уже готовых алгоритмов. Гораздо более эффективным является другой метод, который называется методом пошаговой детализации или последовательного построения алгоритмов. Об этом методе и пойдет речь.

Давайте составим для Кенгуренка алгоритм рисования на листе бумаги слова РОБОТ – (высота каждой буквы – 4 см, ширина – 1 см, расстояние между буквами – 1 см).

Попробуем сначала записать весь алгоритм с ходу:

шаг

шаг

шаг

шаг

поворот

поворот

поворот

шаг

поворот

поворот

поворот

шаг

шаг

поворот

поворот

поворот

шаг

поворот

прыжок

прыжок

...

Уф!.. А ведь мы всего лишь описали, как рисовать букву Р. Если продолжать в том же духе, то получится очень длинный и нерациональный алгоритм. К тому же он наверняка будет содержать ошибки, которые трудно обнаружить, глядя на эту запись.

Традиционный метод составления алгоритмов в данном случае, как видите, малоэффективен. Попробуем иначе подойти к решению задачи. Ясно, что Кенгуренок должен последовательно нарисовать буквы Р, О, Б, О, Т. Таким образом, наша задача разбивается на пять этапов:

Считая, что вспомогательные алгоритмы рисования букв уже составлены, запишем сразу основной алгоритм:

сделай Р

сделай О

сделай Б

сделай О

сделай Т

Теперь можно приступить к составлению вспомогательных алгоритмов. При этом нужно позаботиться о двух вещах. Во-первых, чтобы Кенгуренок правильно нарисовал отдельные буквы, а во-вторых, чтобы, выполнив основной алгоритм, он сложил из них слово РОБОТ. Иначе говоря, надо заботиться не только о рисовании самих букв, но и об их «стыковке». Это напоминает строительство дома: надо заботиться не только о качестве кирпичей, но и о том, чтобы между ними не оставалось щелей. Таким образом, основной алгоритм предъявляет дополнительные требования к «стыковке» вспомогательных алгоритмов.

В нашем случае эти требования могут быть, например, такими. Будем считать, что Кенгуренок начинает рисование каждой буквы с ее левой нижней точки, глядя вправо. Каждый из вспомогательных алгоритмов должен выводить Кенгуренка в исходную позицию для рисования следующей буквы.

Записав основной алгоритм и определив требования к вспомогательным алгоритмам, мы «спустились» на более низкий уровень в решении задачи, упростили себе дальнейшую работу. Однако алгоритмы рисования отдельных букв тоже не так уж просты (вспомните нашу попытку написать алгоритм рисования буквы Р). Значит, составление каждого из них также целесообразно разбить на несколько этапов, «спустившись» еще ниже. И так далее, до тех пор, пока задачи очередного уровня не окажутся совсем простыми. Итак, продолжим «спуск».

Легко обнаружить общий элемент у букв Р, О и Б. Назовем его Угол. Вы без труда напишете вспомогательный алгоритм рисования «угла».

Воспользовавшись этим алгоритмом, а также алгоритмом Направо (см. задачу № 10), можно записать каждый из пяти вспомогательных алгоритмов. Вот, например, вспомогательный алгоритм Р:

процедура Р

сделай Угол

сделай Направо

шаг

шаг

сделай Направо

шаг

поворот

прыжок

прыжок

поворот

прыжок

прыжок

конец процедуры

Остальные вспомогательные алгоритмы напишите самостоятельно.

Метод, при котором сложная задача разбивается на несколько более простых, получившиеся задачи сводятся к еще более простым и так далее, называется методом пошаговой детализации. Этот метод универсален. Он всегда применяется в тех случаях, когда требуется спроектировать сложный объект, будь то большой алгоритм, прокатный стан, интегральная микросхема или пятилетний план. Да и вообще решение каждой более или менее сложной задачи проводится методом пошаговой детализации.

Хостинг от uCoz