Для заданных значений
и
вычислить сумму ряда
, где
.
с точностью
. Суммирование ряда завершить, если модуль очередного члена ряда не превосходит
. Предусмотреть ограничение количества слагаемых ряда – если их количество превосходит максимально допустимое, выдать сообщение 'Требуемая точность вычислений не достигнута'.
Форма будет иметь следующий вид (рис. 14):

Рис.14
При анализе данной задачи необходимо отметить, что каждый новый член ряда должен быть получен, опираясь на предыдущий или его часть. Рассмотрим соотношение элементов
. В рассматриваемой задаче
для
, соответственно
. Отсюда
. Далее важно определиться с начальным значением
(в нашем случае
) и проследить, чтобы порядок накопления суммы и значения счетчика ряда менялись в нужной последовательности. Чтобы осознать значимость следования операторов, попробуйте поменять в теле цикла местоположение оператора i:= i+1 - “поднимите” его в начало тела цикла, сразу после слова begin. Выполнив фрагмент программы пошагово, вы убедитесь, что общий член ряда будет видоизменен – уже при
вы получите
вместо необходимого
.
Фрагмент кода:
{***********************************************************}
procedureTfrm_Z3.btnOKClick(Sender: TObject);
var sum, x, eps, a, mnog: extended;
i, m_dop: Word;
begin
// Присвоение значенийx, eps, m_dop
i:= 0; {количество членов ряда}
a:= x; { a - первый член ряда }
Sum:= a; { Sum - первая частичная сумма ряда }
while (abs(a) > eps) and (i<=m_dop) do
begin
mnog:= -x*x/(2*i+2)/(2*i+3);
a:= a*mnog;
Sum:= Sum+a;
i:= i+1;
end;
// вывод результатов в поле mem_Result в зависимости от накопленного переменной i значения m_dop
{***********************************************************}
Но для случая рядов, в которых в общем виде члена ряда нет рекуррентных выражений (например, факториала или возведения в степень), использование соотношения
должно быть иным. Рассмотрим в качестве примера ряд
В нем
. Т.о., если
, то при
. Но при вычислении следующего (
) члена ряда
происходит умножение и деление на одно и то же число, в данном случае 3. Поэтому целесообразно включить в рекуррентно накапливаемое очередное значение члена ряда лишь числитель. Соответствующий фрагмент кода может выглядеть так:
…
mnog:= -x*x;
while (abs(a) >eps) and (i<=m_dop) do
begin
a:= a*mnog;
Sum:= Sum+a/(2*i+1);
i:= i+1;
end;
Лабораторная работа №3
Вычисление суммы ряда






