Среди множества действий, выполняемых нами ежедневно, немало таких, которые делаются одинаково, хотя и направлены на достижение совершенно разных целей. Например, мы действуем практически одинаково, покупая хлеб, конфеты, книгу, билет в кино или на поезд.
Алгоритм любых наших покупок может выглядеть следующим образом:
7. Достать кошелек.
2. Взять из кошелька деньги.
3. Дать деньги продавцу.
4. Назвать требуемый товар.
5. Получить товар.
6. Положить товар в сумку (в пакет, в карман и т.д.).
7. Взять сдачу.
8. Положить сдачу в кошелек.
Если все действия в течение дня описать в виде алгоритма, то в нем, скорее всего, ни один раз встретятся эти восемь действий, только название товара будет меняться. Пять покупок, сделанных в этот день, добавят в алгоритм дня 40 строчек. А если покупок 10, то строчек будет 80. Возможно даже, что именно эти строчки составят значительную долю алгоритма дня, хотя их информационная ценность очень мала — фактически 10 раз будет повторять-(ся описание одной и той же последовательности действий. В этой ситуации удобно выделить алгоритм покупок из алгоритма всего дня и записать его отдельно под заголовком, например, «Покупка X». Тогда в алгоритме дня каждая покупка будет представлена только одной строкой вместо восьми; лишь значение Сбудет меняться (хлеб, книга и т.д.).
|
|
Записав один раз этот алгоритм, его можно вставлять в любой другой алгоритм, описывающий наши действия, если среди этих действий будет покупка чего-либо. Для этого достаточно упомянуть заголовок алгоритма и указать конкретное значение X.
Алгоритмы, целиком и многократно используемые в составе других алгоритмов, называются вспомогательными алгоритмами.
Вспомогательные алгоритмы очень удобны при решении математических задач. Например, решение квадратных уравнений или вычисление функции sinx с помощью ЭВМ представляет собой длинную цепочку действий. Если все пункты этих алгоритмов каждый раз записывать в основном алгоритме решения задачи, то он становится слишком длинным. Удобнее записать, например, вычисление sinjc в виде вспомогательного алгоритма, а в основном алгоритме в нужных местах просто сделать ссылки на него.
|Для упрощения таких ссылок вспомогательный алгоритм всегда снабжают заголовком, по которому его можно вызвать. После
23
вызова выполнение основного алгоритма приостанавливается, пока не будет выполнен вспомогательный алгоритм. При этом вспомогательному алгоритму из основного алгоритма передается информация, обработка которой и является задачей вспомогательного алгоритма. Такой информацией может быть, например, значение х при вычислении sin x или название товара при совершении покупки. Результаты выполнения вспомогательного алгоритма передаются в основной алгоритм.
|
|
Например, при изготовлении разных изделий может выполняться операция нагрева какой-либо детали или вещества с помощью нагревательного элемента до той или иной температуры. Обозначим эту температуру /, а алгоритм нагрева назовем «Нагрев до t». Он может быть представлен в следующем виде:
«Нагрев до f»
1. Ввести значение t.
2. Включить нагреватель.
3. Пока температура меньше 1, выполнять действия:
4. Подождать 5 с.
5. Измерить температуру.
6. Конец цикла.
7. Выключить нагреватель.
При выполнении этого алгоритма каждые 5 с измеряется температура и, пока она меньше /, нагреватель остается включенным. Как только температура достигнет значения /, условие 3 окажется нарушенным и исполнитель алгоритма перейдет к действию, следующему за строкой 6. Конец цикла, т.е. выключит нагреватель.
Предположим, что имеется основной алгоритм, в котором есть этап нагрева жидкости до 150 °С. В этом случае только что рассмотренный алгоритм Нагрев до t может использоваться как вспомогательный:
/. Налить в резервуар жидкость № 1.
2. Налить в резервуар жидкость № 2.
3. Перемешать жидкости.
4. Нагрев до 150 °С.
5. Открыть заслонку и т. д.
Здесь строка 4 означает вызов вспомогательного алгоритма «Нагрев до t», которому и передается значение температуры / = = 150°С. После выполнения вспомогательного алгоритма, т.е. нагрева жидкости до 150 "С, исполнитель переходит к следующему действию 5. Алгоритм нагрева может еще неоднократно использоваться в этом же основном алгоритме или в любом другом алгоритме, обеспечивая каждый раз нагрев до нужной температуры /.
Вспомогательный алгоритм используют, например, для периодической уборки стружки на токарных станках, работающих в автоматическом режиме. В рассмотренном ранее алгоритме сортировки изделий измерение диаметра изделия тоже производится с
24
помощью вспомогательного алгоритма. В кулинарной книге рецепт (алгоритм) приготовления, например, слоеного теста описывается только один раз, а в рецептах всех изделий из этого теста приводится ссылка на этот вспомогательный алгоритм.
Одни и те же вспомогательные алгоритмы могут использоваться в основных алгоритмах, предназначенных для решения совершенно разных задач. Поэтому в сложных автоматических системах, где количество выполняемых операций велико, обычно создаются библиотеки вспомогательных алгоритмов.
Способы записи алгоритмов 2.3.1. Словесная запись
Существует несколько способов записи алгоритмов. Способ, который мы использовали до сих пор, — словесная запись.
Словесная запись алгоритма — это запись последовательности действий на одном из языков человеческого общения.
Этот способ удобен тем, что последовательность действий четко изложена на понятном нам языке. Он особенно подходит для линейных алгоритмов, и мы постоянно пользуемся им в повседневной жизни, рассказывая кому-нибудь, как сделать или отремонтировать что-то, как пройти или проехать куда-то и т.д.