Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛР8-С++-10-апреля-2012.doc
Скачиваний:
9
Добавлен:
15.09.2019
Размер:
3.09 Mб
Скачать

А) вариант 1; б) вариант 2

Пример 8.8

Использование рекуррентных соотношений при вычислении последовательностей.

Обычно слагаемые сумм и сомножители произведений фактически тоже образуют вычисляемые последовательности. Часто имеет смысл использовать соотношения, существующие между соседними элементами последовательности, чтобы каждое новое значение вычислять рекуррентно, то есть исходя из значения, вычисленного на предыдущем шаге, например, an = f ( an1 ).

Используем этот прием для вычисления значения функции S (x) в произвольной точке x по формуле разложения в ряд для n слагаемых, если формула задана:

Переменная x произвольна, и не задана в условии, значит, ее следует ввести.

Цикл имеет некоторые особенности:

1. При k = 0 начальное значение суммы S равно 0, а очередное слагаемое а не определено.

2. Во внутреннем цикле очередное слагаемое вычисляется по формуле

Для возведения числа в степень в С++ есть функция pow, а для вычисления факториала функции нет. Факториал, во-первых, растет очень быстро, и для n = 10 и более имеет очень большие значения. Во-вторых, для его вычисления нужен циклический алгоритм. Если для вычисления слагаемого использовать рекуррентное соотношение, то мы избавимся от этих двух недостатков.

Вычисление степени, это произведение xn = x * x * x * … *x. Вычисление факториала, это произведение чисел натурального ряда, n! = 1 * 2 * 3 * … *n. Если обозначить именем a значение очередного слагаемого, тогда последующее значение может быть вычислено по отношению к предыдущему по формуле:

Действительно,

при k = 1, ,

при k = 2,

при k = 3,

и так далее. Значит, в теле внутреннего цикла для вычисления очередного слагаемого может быть использована именно эта формула.

3. Ряд является знакопеременным, то есть знак слагаемого отрицательный для нечетных слагаемых, и положительный для четных. Однако нет необходимости в формуле вычислений возводить (–1) в степень. Обычно для решения подобных задач вводится переменная, хранящая знак, например, переменная z принимает значения + 1 или – 1. Смена знака в цикле достигается присваиванием z = –z при переходе к очередной итерации (переменную z в этом случае называют "мерцающий" счетчик).

Программа на языке С++ может иметь вид:

#include <stdio.h>

#include <conio.h>

int main ()

{

float x;

float k; // Управление внутренним циклом, вещественная

// переменная, потому что участвует в вычислении.

float a; // Очередное слагаемое.

float s; // s – сумма.

int z; // Знак слагаемого.

cout << "Введите x = \n";

cin >> x;

cout << "Введите n = \n";

cin >> n;

{

k = 1; // Начинаем с номера 1.

s = x; // Начальная сумма равна 0-му члену

a = -x*x/2; // Для рекуррентного соотношения.

z = -1; // Знак слагаемого «минус» для k = 1.

// Управление циклом.

while (k <= n+1)

{

S = S + z * a; // Сложение с учетом знака.

k += 1; // Переход к следующему слагаемому.

z = – z;

a = a * x *x/ (k+1)*(k+2)); // Очередное слагаемое рекуррентно

};

cout << "При " << n << " слагаемых сумма равна s = ";

cin >> s;

} // End of main

Небольшой итог. При вычислении сумм в подготовку цикла входит обнуление суммы. В теле цикла сумма вычисляется многократным прибавлением к значению суммы очередного слагаемого. Итоговое значение одно, оно получено при завершении цикла.

При вычислении произведений в подготовку цикла входит присваивание произведению значения 1. В теле цикла произведение вычисляется многократным умножением значения произведения на очередной сомножитель. Итоговое значение также одно, получено при завершении цикла