7.9. Что такое базовые алгоритмические структуры?
Алгоритмы можно представлять как некоторые структуры, состоящие из отдельных базовых (т.е. основных) элементов. Естественно, что при таком подходе к алгоритмам изучение основных принципов их конструирования должно начинаться с изучения этих базовых элементов. Для их описания будем использовать язык схем алгоритмов и школьный алгоритмический язык.
Логическая структура любого алгоритма может быть представлена комбинацией трех базовых структур: следование, ветвление, цикл. |
Характерной особенностью базовых структур является наличие в них одного входа и одного выхода.
1. Базовая структура "следование". Образуется последовательностью действий, следующих одно за другим:
Школьный алгоритмический язык | Язык блок-схем |
действие 1 действие 2......... действие n |
2. Базовая структура "ветвление". Обеспечивает в зависимости от результата проверки условия (да или нет) выбор одного из альтернативных путей работы алгоритма. Каждый из путей ведет к общему выходу, так что работа алгоритма будет продолжаться независимо от того, какой путь будет выбран. Структура ветвление существует в четырех основных вариантах:
- если—то;
- если—то—иначе;
- выбор;
- выбор—иначе.
Школьный алгоритмический язык | Язык блок-схем |
1. если—то | |
если условие то действия все | |
2. если—то—иначе | |
если условие то действия 1 иначе действия 2 все | |
3. выбор | |
выбор при условие 1: действия 1 при условие 2: действия 2............ при условие N: действия N все | |
4. выбор—иначе | |
выбор при условие 1: действия 1 при условие 2: действия 2............ при условие N: действия N иначедействия N+1 все |
Примеры структуры ветвление
Школьный алгоритмический язык | Язык блок-схем |
если x > 0 то y:= sin(x) все | |
если a > b то a:= 2*a; b:= 1 иначе b:= 2*b все | |
выбор при n = 1: y:= sin(x) при n = 2: y:= cos(x) при n = 3: y:= 0 все | |
выбор при a > 5: i:= i+1 при a = 0: j:= j+1 иначе i:= 10; j:=0 все |
3. Базовая структура "цикл". Обеспечивает многократное выполнение некоторой совокупности действий, которая называется телом цикла. Основные разновидности циклов представлены в таблице:
Школьный алгоритмический язык | Язык блок-схем |
Цикл типа пока. Предписывает выполнять тело цикла до тех пор, пока выполняется условие, записанное после слова пока. | |
нц пока условие тело цикла (последовательность действий) кц | |
Цикл типа для. Предписывает выполнять тело цикла для всех значений некоторой переменной (параметра цикла) в заданном диапазоне. | |
нц для i от i1до i2 тело цикла (последовательность действий) кц |
Примеры структуры цикл
Школьный алгоритмический язык | Язык блок-схем |
нц пока i <= 5 S:= S+A[i] i:= i+1 кц | |
нц для i от 1 до 5 X[i]:= i*i*i Y[i]:= X[i]/2 кц |
7.10. Какие циклы называют итерационными?
Особенностью итерационного цикла является то, что число повторений операторов тела цикла заранее неизвестно. Для его организации используется цикл типа пока. Выход из итерационного цикла осуществляется в случае выполнения заданного условия. |
На каждом шаге вычислений происходит последовательное приближение к искомому результату и проверка условия достижения последнего.
Пример. Составить алгоритм вычисления бесконечной суммы
с заданной точностью (для данной знакочередующейся бесконечной суммы требуемая точность будет достигнута, когда очередное слагаемое станет по абсолютной величине меньше ).
Вычисление сумм — типичная циклическая задача. Особенностью же нашей конкретной задачи является то, что число слагаемых (а, следовательно, и число повторений тела цикла) заранее неизвестно. Поэтому выполнение цикла должно завершиться в момент достижения требуемой точности.
При составлении алгоритма нужно учесть, что знаки слагаемых чередуются и степень числа х в числителях слагаемых возрастает.
Решая эту задачу "в лоб" путем вычисления на каждом i -ом шаге частичной суммы
S:=S + ((-1)**(i-1)) * (x**i) / i,
мы получим очень неэффективный алгоритм, требующий выполнения большого числа операций. Гораздо лучше организовать вычисления следующим образом: если обозначить числитель какого-либо слагаемого буквой р, то у следующего слагаемого числитель будет равен —р*х (знак минус обеспечивает чередование знаков слагаемых), а само слагаемое m будет равно p/i, где i — номер слагаемого.
Сравните эти два подхода по числу операций.
Алгоритм на школьном АЯ | Блок-схема алгоритма |
алг Сумма (арг вещ x, Eps, рез вещ S) дано | 0 < x < 1 надо | S = x - x**2/2 + x**3/3 -... нач цел i,вещ m, p ввод x, Eps S:= 0; i:= 1 | начальные значения m:= 1; p:= -1 нц пока abs(m) > Eps p:= -p*x | p - числитель | очередного слагаемого m:= p/i | m - очередное слагаемое S:= S + m | S - частичная сумма i:= i + 1 | i - номер | очередного слагаемого кц вывод S кон |
Алгоритм, в состав которого входит итерационный цикл, называется итеpационным алгоpитмом. Итерационные алгоритмы используются при реализации итерационных численных методов.
В итерационных алгоритмах необходимо обеспечить обязательное достижение условия выхода из цикла (сходимость итерационного процесса). В противном случае произойдет "зацикливание" алгоритма, т.е. не будет выполняться основное свойство алгоритма — результативность.
7.11. Что такое вложенные циклы?
Возможны случаи, когда внутри тела цикла необходимо повторять некоторую последовательность операторов, т. е. организовать внутренний цикл. Такая структура получила название цикла в цикле или вложенных циклов. Глубина вложения циклов (то есть количество вложенных друг в друга циклов) может быть различной.
При использовании такой структуры для экономии машинного времени необходимо выносить из внутреннего цикла во внешний все операторы, которые не зависят от параметра внутреннего цикла.