Вычислить сумму ряда и указать количество слагаемых - C (СИ)
Формулировка задачи:
Дано действительное число х (0<x<=1). Вычислить сумму ряда с точностью e=10^-6 и указать количество слагаемых. Считать, что требуемая точность достигнута, если очередное слагаемое по модулю меньше e.
помогите пожалуйста
Решение задачи: «Вычислить сумму ряда и указать количество слагаемых»
textual
Листинг программы
#include <stdio.h>
#include <math.h>
double factorial(int t)
{
return tgamma((double)t + 1.0);
}
double absd(double t)
{
return t < 0 ? -t : t;
}
double f(double x, int *num)
{
const double eps = 1e-6;
*num = 0;
double res = 0.0;
int k;
for(k = 1; ; k++)
{
double r = pow(-1.0, (double)k) / factorial(k << 1) * pow(x / 3.0, 4.0 * (double)k);
if(absd(r) < eps) return res;
res += r;
*num = *num + 1;
}
}
int main()
{
double x, y;
int n;
scanf("%lf", &x);
y = f(x, &n);
printf("Summa = %lf, chislo slagaemych = %d\n", y, n);
return 0;
}
Объяснение кода листинга программы
Выше представлен код на языке C, который вычисляет сумму ряда и количество слагаемых.
- В функции
factorialиспользуется функцияtgammaиз библиотеки, которая вычисляет факториал числа. В данном случае, факториал числа t + 1 вычисляется как tgamma((double)t + 1.0). - В функции
absdиспользуется тернарный оператор для определения абсолютного значения числа. Если число t меньше нуля, то возвращается его отрицательное значение, иначе возвращается само число. - В функции
fопределяется ряд с помощью циклаfor, который выполняется до тех пор, пока абсолютное значение произведения не станет меньше заданной точностиeps. Значениеepsравно 1e-6. - Каждое слагаемое ряда определяется как
pow(-1.0, (double)k) / factorial(k << 1) * pow(x / 3.0, 4.0 * (double)k). Здесь используется операция сдвига влево (k << 1) для удвоения значения k. - В функции
mainпользователю предлагается ввести значение x с клавиатуры, затем вызывается функцияfс этим значением и неинициализированной переменнойn(которая будет использоваться как указатель на переменную, которая будет изменяться в процессе работы функции). Функцияfвозвращает сумму рядаyи количество слагаемыхn. - Наконец, в функции
mainвыводятся значенияyиnс помощью функцииprintf. Значениеyпредставляет собой сумму ряда, а значениеn- количество слагаемых.