Программирование алгоритмов итерационной циклической структуры
Итерационные алгоритмы нашли широкое применение в инженерно-технических расчётах. В этих расчётах производятся многократные последовательные вычисления с целью постепенного приближения к искомому результату, причем для вычислений на каждом шаге используются результаты вычислений на предыдущем шаге. Завершение вычислений производится при достижении заданной точности вычислений. Поскольку количество итераций (повторений вычислений) заранее неизвестно, то при организации вычислений необходимо использовать циклы While или Repeat.
Итерационные алгоритмы применяются, например, в задачах вычисления суммы ряда или величины его членов, при численном решении нелинейных уравнений и т.п.
Одной из наиболее часто используемых областей использования итерационных алгоритмов является вычисление значений тригонометрических и трансцендентных функций, таких как синус, косинус, натуральный логарифм, экспонента и др. При этом, задаваясь требуемой точностью вычислений, можно заменить точное значение функции, например sin x, её приближённым значением, полученным в результате сохранения конечного числа членов разложения этой функции в ряд Тейлора:
Точность конечного результата зависит от количества сохранённых членов ряда. Если задана погрешность e (и, например, равна 10-4). Номер последнего слагаемого n определяется условием
Упражнение. Вычислить на ЭВМ значение суммы членов бесконечного ряда точностью до члена ряда, меньшего e = 10-4 для x, равного 0,1. Определить число членов ряда, вошедших в сумму.
Ключевым этапом решения задачи является вычисление каждого члена ряда . Его значение можно вычислять напрямую, однако, удобнее выразить n-й член через (n–1)-й, в данном случае получаем:
. Такие алгоритмы и формулы, в которых на каждом шаге используются значения, вычисленные на предыдущем шаге, называются рекуррентными.
Блок-схема алгоритма решения представлена на рис. 7.1. В блоке 2 организуется ввод исходных данных. В блоке 3 производится подготовка цикла, для этого задаётся значение первого члена ряда, начальное значение суммы, равное этому члену, и номер члена ряда, равный 1 (просуммирован один член). Блоки 4 и 5 выполняют расчет текущего номера члена ряда и значения этого члена с использованием рекуррентного соотношения. Блок 6 реализует функцию накопления суммы. Блок 7 выполняет проверку условия окончания цикла. В блоке 8 организуется вывод результатов расчётов.
Программа, реализованная в соответствии со схемой алгоритма, имеет вид:
Program Rows1;
Uses Crt;
Var
x,eps,a,s:real;
n:integer;
begin
ClrScr;
Write('Введите x ');
Readln(x);
Write('Введите eps ');
Readln(eps);
a:=x;
s:=0;
n:=1;
While Abs(a)>=eps do
begin
s:=s+a;
n:=n+1;
a:=-a*x*x/((2*n-2)*(2*n-1))
end;
Writeln('Сумма ряда = ',s:8:4);
Writeln('Число членов ряда = ', n:4)
End.
Рис.7.1. Блок-схема алгоритма
Задание
Вычислить на ЭВМ значение суммы членов бесконечного ряда с заданной точностью e. На печать вывести значение суммы и число членов ряда, вошедших в сумму.