| |
| |
| |
Похоже на манипуляции с детским конструктором: из элементарных деталей сначала собираются простые блоки, из них более сложные, и в конце концов из больших блоков получается (или не получается) задуманная юным конструктором машинка. |
Однако, далеко не всегда этот метод результативен. Нередко при переходе на очередной уровень выясняется, что написанные на предыдущих этапах процедуры совершенно бесполезны при составлении очередного алгоритма. Сокрушаясь по поводу зря потраченного времени, приходится возвращаться к нижнему уровню и начинать сначала.
Чтобы понять, какие процедуры действительно необходимы для решения задачи, а потом описывать только их, достаточно начать с общего плана. Этот план одновременно является и главным алгоритмом, а его пункты именами будущих процедур. Таким образом выясняются не только имена процедур, но и порядок, в котором их надо вызывать.
На следующем этапе можно переходить к уточнению отдельных пунктов общего плана, т.е. к написанию вспомогательных алгоритмов. Здесь можно применить тот же прием: сразу приступать к сотавлению процедуры, заменяя все предписания, которых нет в СКИ, вызовами новых вспомогательных алгоритмов.
Понятно, что на каждом этапе придется последовательно уточнять пункты
плана возникшего на предыдущем уровне. И так до тех пор, пока на самом нижнем
уровне не получатся процедуры, состоящие только из команд, входящих в СКИ.
Это и есть метод последовательного уточнения.
Представьте юного конструктора, котрый, перед тем как начать малопредсказуемую деятельность по соединению деталей, решается набросать рисунок будущего чуда техники, затем чертежи его основных блоков, потом частей этих блоков и так до тех пор, пока не будет совершенно ясно, как эти мелкие части получаются из элементарных деталей конструктора. |
Итак, метод последовательного уточнения состоит в следующем:
Если суть метода понятна, можно попробовать решить ЗАДАЧУ:
Для ее РЕШЕНИЯ мы применим метод последовательного уточнения,
независимо от того, кажется ли задача Вам трудной или нет. (Чтобы
сосредоточиться на принципиальных идеях, мы опускаем некоторые технические
детали, как например размер поля.) |
Попробуем записать эту идею (план) |
|
Заметьте, мы даже не пытались найти ответы на такие важные вопросы: | |
|
Принцип рассматриваемой технологии в следующем: все подробности и детали, без рассмотрения которых на данном этапе можно обойтись, игнорируются. |
|
Если очередная подзадача оказывается достаточно простой, мы можем, не прибегая к дальнейшей декомпозиции, решить ее сразу. Для этого надо в соответствующем алгоритме использовать только команды из СКИ (не прибегая к вызовам еще не написанных вспомогательных алгоритмов). |
|
Наверное, так можно поступить
по отношению к процедуре ель: |
|
(Напомним, что, как было сказано в начале,
мы не станем отвлекаться на проблемы, связанные с вычислениями). Дальнейшее уточнение этого алгоритма уже не требутся, т.к. все используемые команды "понятны" исполнителю. |
посмотреть
в целом на получившееся решение
|
самостоятельно повторить основные этапы решения
|
Если у Вас достаточно | ||
опыта и интуиции, чтобы сразу безошибочно угадать, какие вспомогательные алгоритмы могут пригодиться, | ||
умения правильно их написать , | ||
способностей верно организовать их вызовы в главном алгоритме, | ||
терпения и навыков, наконец, чтобы отладить получившуюся программу, т.е. найти и исправить все неизбежные ошибки, | ||
то Вам можно. |
Все-таки есть подозрение, что даже в этом случае с помощью метода
последовательного уточнения получатся более короткие, с ясной структурой,
легко проверяемые алгоритмы (главный и вспомогательные).
Да, их (вспомогательных), наверное, будет побольше.
Но, во-первых, меньше вероятность,
что при их написании будут допущены ошибки,
а, во-вторых, если все-же ошибки будут,
их быстрее можно будет найти и исправить,
благодаря четкой структуре получившейся
программы.
| |
| |
| |