Циклы с условием окончания
Цель работы: изучение приёмов программирования алгоритмов с циклами, число повторений операторов в которых при постановке задачи неизвестно; выработка умений отладки и тестирования программ с циклами и разветвлениями, проведение простейшего вычислительного эксперимента.
Задание: В машинных программах значение функции exp(x) вычисляется как сумма S ряда (4). Составить программу для вычисления значения ех по формуле (4).
Условие окончания вычислений принять в виде: |uk/sk| < d, uk = xk/k!, где d – заданная относительная погрешность вычисления функции ex; uk и sk – соответственно значения члена ряда и суммы ряда на k-ой итерации цикла. Исследовать зависимость числа слагаемых ряда от значения х при заданной погрешности d.
/* Программа 6 для вычисления таблицы значений функции exp(x) по формуле (4) как суммы s степенного ряда с погрешностью d и числа слагаемых k суммы s. */
#include <stdio.h>
#include <math.h>
main()
{ int i, n;
double d, u, s, x, k;
< Вывод шапки программы, см. программу 1 или 2 >
printf("\n Введите погрешность d, размер таблицы n и n значений x: ");
scanf("%le%d", &d, &n); // ввод значений х в цикле for
printf("\n Таблица функции exp(х), погрешность s = %.3le \n", d);
printf(“\n\n \t x \t\t exp(x) \t\t s \t k"); // первая строка таблицы
for( i = 1; i <= n; i++ )
{ scanf("%le", &x); // ввод х из буфера клавиатуры
u = 1; s = 1; // значения u и s при k = 0
k = 0;
while ( fabs(u/s) >= d ) // вычисление суммы s
{ u = u*x / ++k; // рекуррентные формулы для u и s
s = s + u;
} // вывод строки таблицы:
printf("\n %7.3lf %10.3le %10.3le %5.0lf ", x, exp(x), s, k );
} // конец цикла for
}
Вопросы и упражнения:
1. Выполните программу для трёх значений d (1е-2, 1е-4, 1е-6) и трёх значений х (0.1, 1, 10). По результатам на экране сделайте выводы о сходимости ряда для функции ехр(х) по зависимости числа слагаемых k от х и от погрешности d: k(x), k(d).
2. Как вывести значения ехр(х) и s, чтобы увидеть их несовпадение?.
3. Модифицируйте программу, добавив цикл по заданному числу m значений d.
4.
Составьте программу вычисления функции ln(x) по разложению в ряд (5).