· число повторений цикла заранее неизвестно. Для организации повторения действий в теле цикла используется и анализируется соответствующее условие повторения, записанное после ключевого слова в операторе цикла 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или do… while.
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 – сложное (громоздкое), то приходится считать по общей формуле члена ряда. Но и в этом случае есть варианты, например:
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.