Исправить ошибку в вычислениях функции - C (СИ)
Формулировка задачи:
#include<stdio.h>
#include<conio.h>
#include <math.h>
#include<stdlib.h>
#include<iostream.h>
long double factorial(int n) {
return !n ? 1 : n * factorial(n - 1);
}
float sum_r(float _x,float _e)
{
float rez,element;
int i;
rez=0;i=1;
element=(pow((-1),i)*sqrt(i+M_PI)*pow(sin(i*x),2)/(factorial(i+1)+exp(i*x));
while ( fabs(element)>=_e )
{
rez=rez+element;
i++;
element=(pow((-1),i)*sqrt(i+M_PI)*pow(sin(i*x),2)/(factorial(i+1)+exp(i*x));
}
return(rez);
}
int main()
{
float x, e, rezult;
int ii;
x=0.63;
for (ii=1;ii<=10;ii++)
{
rezult=sum_r(0.63,pow(10,-ii));
printf("\n For e = %12.10f x = %3.1f rezult = %15.14f",pow(10,-ii),x,rezult);
}
getch();
return 0;
}Решение задачи: «Исправить ошибку в вычислениях функции»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <conio.h>
long double factorial(int n)
{
return !n ? 1 : n * factorial(n - 1);
}
float element(int i, float x)
{
return (pow((-1), i) * sqrt(i + M_PI) * pow(sin(i * x), 2) /
(factorial(i + 1) + exp(i * x)));
}
float sum_r(float x, float e)
{
float rez, elem;
int i;
rez = 0;
i = 1;
elem = element(i, x);
while (fabs(elem) >= e)
{
rez = rez + elem;
i++;
elem = element(i, x);;
}
return(rez);
}
int main()
{
float x = 0.63, rezult;
int ii;
for (ii = 1; ii <= 10; ii++)
{
rezult = sum_r(0.63, pow(10, -ii));
printf(" For e = %12.10f x = %3.1f rezult = %15.14f\n", pow(10, -ii), x, rezult);
}
getch();
return 0;
}
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы:
, , , . - Определяем функцию factorial(), которая вычисляет факториал числа n.
- Определяем функцию element(i, x), которая вычисляет значение элемента функции на заданном шаге i и аргументе x.
- Определяем функцию sum_r(x, e), которая вычисляет сумму ряда на заданном интервале [0, x] с точностью до e.
- В функции main() задаем начальные значения переменных: x = 0.63, e = 10^-ii, где ii — номер итерации.
- Задаем цикл от 1 до 10 и выполняем вычисления в каждой итерации.
- Выводим результаты на экран.
- В конце программы вызываем функцию getch() для приостановки выполнения программы до нажатия клавиши.
- Возвращаем 0, чтобы указать, что программа успешно завершилась.