Пример записи алгоритма на школьном АЯ
алг Сумма квадратов (арг цел n, рез цел S)дано | n > 0надо | S = 1*1 + 2*2 + 3*3 + ... + n*nнач цел iввод n; S:=0нц для i от 1 до n S:=S+i*iкц вывод "S = ", Sкон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. Что такое вложенные циклы?
Возможны случаи, когда внутри тела цикла необходимо повторять некоторую последовательность операторов, т. е. организовать внутренний цикл. Такая структура получила название цикла в цикле или вложенных циклов. Глубина вложения циклов (то есть количество вложенных друг в друга циклов) может быть различной.
При использовании такой структуры для экономии машинного времени необходимо выносить из внутреннего цикла во внешний все операторы, которые не зависят от параметра внутреннего цикла.