Организация циклических вычислений. Основной теоретический материал. Операторы для организации циклов, страница 7

·  число повторений цикла заранее неизвестно. Для организации повторения действий в теле цикла  используется и анализируется соответствующее условие повторения, записанное после ключевого слова в  операторе цикла while  или в конце цикла  do . . .  while;

·  как правило, результатпредыдущего выполнения цикла (i-ое приближение к значению корня уравнения,  i-ый член ряда или бесконечной суммы) используется при вычислении следующего i +1 –го  приближения или члена ряда, т.е. при выполнении следующей итерации;

·  выполнение действий в цикле (выход) прекращается при достижении заданной точности e   для значения корня или значения бесконечной суммы (произведения).

    При суммировании рядов рекомендуется придерживаться следующих правил.Пусть с точностьюe = 10-7необходимо вычислить значение  бесконечной  суммы

S  = 1 – 1/ 2 + 1/ (2*3)  - 1/ (2*3*4)  + . . . + (-1)n/ (2*3*…*n) + …  = a0  + a1 + … + an  + …

Ряд является знакопеременным и общий член ряда  anстремится к 0, так что ряд сходится (вспоминайте соответствующие теоремы математического анализа). Условие повторения действий в цикле в нашем случае имеет вид: |an| > e, а условие выхода из цикла – |an| <= e.

1. Выполните математизацию задачи

·  запишите формулу для вычисления общего члена ряда, если она не указана в условии задачи;

·  проверьте сходимость ряда. Если отсутствие сходимости ряда обнаружится при первых прогонах программы,  то вы делали «мартышкин труд»;

·  запишите формулу для вычисления an+1-го члена ряда и найдите  отношение an+1 / an.

2.  Исходными данными  при суммировании рядов, как правило, являются:

·  значение точности e;

·  значение первого члена ряда (в нашем случае – 1);

·  начальное значение суммы (обычно оно равно значению первого члена ряда или 0). В нашем случае a0 = 1и  S = 1;

·  Так как значение члена ряда обычно зависит от его номера (1-ый, 2-ой и т.д.), то необходимо проинициализировать целочисленную переменную n, значение которой используется при вычислении каждого члена ряда.В нашем примере положим начальное значение n = 1. После завершение цикла значение n, как правило, определяет количество слагаемых в вычисленной сумме ряда.

3.  Проанализируйте сложность отношения между двумя соседними членами ряда –   an и an+1.  В нашем  случае r = an+1 / an = {(-1)n+1/ (2*3*…*(n + 1))}  /  {(-1)n/ (2*3*…*n)} =  = - 1 / (n + 1).  Таким образом, для вычисления очередного члена ряда используем формулу  an+1 = -r * an,  а  следующее значение суммы равно  S = S + an+1.   

4.  Перед проверкой выполнения условия повторения действий в цикле необходимо изменить значение n, чтобы обеспечить корректное вычисление следующего члена ряда (обычно это оператор  n++).

5.  Для организации итерационного цикла используется оператор whileили  dowhile.

6.  Так как в операторе цикла при проверке условия повторения используется только абсолютное значение n-го члена ряда, то в программе можно использовать только одну переменную, значение которой является членом ряда.

//Вычисление суммы рядаS  = 1 – 1/ 2 + 1/ (2*3)  - 1/ (2*3*4)  + ... + (-1)n/ (2*3*…*n) + … 

#include  <iostream.h>

#include  <math.h>

#include  <conio.h>

int    main ()

{     //   описание с инициализацией используемых переменных  

int   n = 1;

double  a = 1,  s = a,   eps = 1e-7,  r;

while (fabs (a) > eps)

{

//   убиваем «двух зайцев»: получаем следующее значение n  и отношение r,

r = -1 / ++n;     //   причем  сначала инкрементируется значение переменной  n

a*= r;              //   значение следующего члена ряда

s += a;            //   новое значение суммы

}

cout << “Сумма ряда S = ”<< s << ‘\t’;

cout << “ в сумме  ” << n << “ слагаемых” << endl;

return 0;

}

Как и в реальной жизни, при программировании почти всегда «есть варианты».  Учитывая формулу общего члена ряда, достаточно было ввести переменную   r = 1, а в составе цикла вычислять:   {  r *= (++n);  a = -1 / r;   s +=a;   }

Если отношение   an + 1  / an – сложное (громоздкое), то приходится считать по общей формуле члена ряда.  Но и в этом случае есть варианты, например: