Разработка алгоритмов методом пошаговой детализации. вспомогательный алгоритм
Эффективным методом построения алгоритмов является метод пошаговой детализации (последовательного построения). При этом сложная задача разбивается на ряд более простых. Для каждой подзадачи составляется свой, относительно решения основной задачи, вспомогательный алгоритм. Требования к ним продиктованы необходимостью, как решения подзадач, так и последующей их «стыковки» в основном алгоритме. Эти подзадачи могут, в свою очередь, потребовать разбиения на еще более простые задачи, и т.д. В результате некоторые вспомогательные алгоритмы могут стать основными по отношению к вспомогательным алгоритмам более низкого уровня. Основной алгоритм содержит команды обращения к вспомогательным алгоритмам. Процесс пошаговой детализации заканчивается, когда задачи очередного уровня окажутся совсем простыми. Метод пошаговой детализации универсален. Он применим для решения задач из разных областей жизни.
Вспомогательные алгоритмы создаются, когда возникает необходимость разбиения задачи на ряд более простых задач или когда есть необходимость многократного использования одного и того же набора действий в одном или разных алгоритмах. Вспомогательные алгоритмы, как уже отмечалось, должны быть состыкованы между собой в процессе «сборки» основного алгоритма. Для этого используют заголовки вспомогательных алгоритмов. С их помощью вызывают этот алгоритм (обращаются к его работе) из других вспомогательных или основного алгоритмов.
При составлении и использовании вспомогательных алгоритмов важно знать, что является для них исходными данными (аргументами) и результатами. Иногда команды вызова вспомогательного алгоритма содержат указание на имена тех переменных, которые вносят в него исходные значения, а также переменных, в которые перед выходом из него попадут значения результата для дальнейшего использования вне вспомогательного алгоритма. Иногда результатом работы вспомогательного алгоритма может стать значение некоторой сигнальной переменной («флажка»), сообщающее об истинности какого-то условия или о наличии какого-либо факта. Записывая программу для компьютера на языке программирования, вспомогательные алгоритмы можно организовать, например, как подпрограммы. Правила обращения к ним и возврата из них в основную программу определяются конкретным языком программирования. Подпрограммы общего назначения могут объединяться в библиотеки подпрограмм, а иногда образовывать набор стандартных функций.
Метод последовательной детализации путем разбиения задачи на подзадачи лежит в основе технологии структурного программирования и широко применяется при использовании структурных языков программирования, таких, как Паскаль или структурные версии Бейсика.
Согласно концепции структурного программирования, вспомогательный алгоритм должен иметь следующие установки:
· иметь заголовок (имя), с помощью которого его можно вызвать (обратиться к нему, чтобы начать его выполнение) из вспомогательных или основного алгоритмов (это нужно для «состыковки» алгоритмов);
· возвращать управление тому алгоритму, из которого он был вызван, т.е. после выполнения вспомогательного алгоритма должно продолжиться выполнение, вызвавшего его алгоритма с той точки, в которой он был прерван;
· иметь возможность вызвать другие алгоритмы;
· быть относительно небольшим;
· иметь один вход (его выполнение всегда начинается в одной точке, независимо от того, откуда и при каких условиях он был вызван) и один выход. Это гарантирует его замкнутость и упрощает работу с состыкованными алгоритмами;
· обладать единственной функцией, что служит ключом к хорошо спроектированному итоговому алгоритму.
Таким образом, при проектировании основного алгоритма нужно сначала определить необходимый набор функций, а затем разработать вспомогательные алгоритмы. Метод последовательной детализации применяется при любом конструировании сложных объектов. Это естественная логическая последовательность мышления постановщика задачи: постепенное углубление в детали. Достаточно сложный алгоритм другим способом практически построить невозможно. Диалоговые программные системы также требуют для своего описания более широкой интерпретации понятия алгоритма: они не получают входные данные сразу и не всегда можно говорить об априорной ограниченности объёма данных некоторой константой. Дадим уточняющее понятие алгоритма, которое не является определением в математическом смысле слова, но более формально описывает понятие алгоритма, раскрывающего его сущность. Алгоритм – конечная система правил, сформулированная на языке исполнителя, которая определяет последовательность перехода от допустимых исходных данных к конечному результату и которая обладает свойствами дискретности, детерминированности, результативности, конечности и массовости. Для каждого исполнителя набор допустимых действий всегда ограничен – не может существовать исполнителя, для которого любое действие является допустимым. Ограничение на выбор допустимых действий означает, что для любого исполнителя имеются задачи, которые нельзя решить с его помощью. При изучении алгоритмов важно разделять два понятия: запись алгоритма и выполнение алгоритма. Алгоритм является предписанием, а наличие предписания предполагает, что результат будет получен неким исполнителем, действующим по этому предписанию. Исполнитель (компьютер или программист, вручную отлаживающий свою программу) получает предписание и исходные данные. После этого он начинает действовать как автомат, т.е. выполнять в реальном времени описанные в алгоритме шаги. В результате выполнения каждого шага могут образовываться промежуточные результаты, которые исполнитель должен где-то фиксировать так, чтобы они могли быть использованы в качестве исходных данных для следующего шага. Исполнитель совершит конечное число шагов (даже если отдельные описания шагов использовались неоднократно) и после этого остановится, зафиксировав окончательный результат подобно промежуточным результатам. Если есть текст некоторого предписания, то нужно убедиться в том, что это предписание является алгоритмом. Для этого необходимо проверить, выполняются ли перечисленные выше свойства.
Язык программирования - средство записи алгоритмов для компьютеров.Достаточно универсальным исполнителем является компьютер. С его помощью можно выполнять разнообразные по видам алгоритмы: делать математические вычисления, обрабатывать текстовые данные, изменять графику и др. В каком-то смысле компьютер может делать многое, что и человек, а некоторые вещи намного быстрее. Разработав алгоритм, человек должен как-то «объяснить» его компьютеру. Для этих целей служат языки программирования, а результатом записи алгоритма на них является программа. В настоящее время язык программирования – это скорее некий посредник между человеком и компьютером. Программа, написанная на языке программирования, в последствии переводится на машинный язык транслятором. Это связано с тем, что создание алгоритма предполагает подробное описание каждого шага решения задачи, и в конечном итоге шаг алгоритма может быть достаточно прост для выполнения его компьютером. А значит, задачи, для которых можно выработать алгоритм их решения, могут быть автоматизированы, т.е. переложены «на плечи» машин.Однако следует всегда помнить, что не все задачи имеют алгоритмическое решение. При этом для тех задач, которые все-таки имеют алгоритмическое решение, могут быть разработаны различные алгоритмы. Но наиболее эффективным, скорее всего, будет только один.
.