Вычислить сумму с точностью до e - C (СИ)
Формулировка задачи:
Объясните как вообще делать с этими факториалами???
Решение задачи: «Вычислить сумму с точностью до e»
textual
Листинг программы
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{
system("chcp 1251>NUL");
double x, e, Sk, fact, Sk1, Sk2;
int k = 0;
printf("x=");
scanf("%lf", &x);
printf("e=");
scanf("%lf", &e);
k = 0;
fact = 1;
Sk1 = 0;
Sk2 = 0;
puts("-------------------------------------------------------------------------");
puts("|\tСумма S(k)\t|\tСумма S(k-1)\t|\tS(k)-S(k-1)\t|");
puts("-------------------------------------------------------------------------");
do
{
if (k > 0) fact = fact*k;
else fact = 1.0;
Sk1 = Sk2;
Sk = (pow(-1.0, k)*pow(x, 2.0 * k + 1.0)) / (fact*(2.0 * k + 1.0));
Sk2 = Sk1 + Sk;
printf("|\t%lf\t|\t%lf\t|\t%lf\t|\n", Sk2, Sk1, fabs(Sk2-Sk1));
k++;
} while (fabs(Sk2 - Sk1) > e);
puts("-------------------------------------------------------------------------\n");
printf(""S(k)-S(k-1)" %lf <= %lf "e"\n",fabs(Sk2-Sk1), e);
return 0;
}
Объяснение кода листинга программы
В этом коде выполняется вычисление суммы S(k) с точностью до e. Список действий:
- Ввод значений переменных x и e с помощью функции scanf.
- Инициализация переменных fact, Sk1, Sk2, k = 0.
- Вывод таблицы с названиями и значениями переменных.
- Запуск цикла do-while для вычисления суммы S(k).
- Внутри цикла:
- Вычисление значения fact.
- Вычисление значения Sk1.
- Вычисление значения Sk2 как суммы Sk1 и Sk.
- Вывод значений Sk2, Sk1 и разности Sk2-Sk1.
- Увеличение k на 1.
- Цикл выполняется до тех пор, пока разность Sk2-Sk1 больше e.
- Вывод таблицы с названиями и значениями переменных.
- Вывод сообщения с числом k, значением разности Sk2-Sk1 и числом e.
- Возврат 0, означающий успешное выполнение программы.