Другие языки программирования и технологии

Вычисление суммы с факториалом в С++?

#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <math.h>
using namespace std;
#pragma hdrstop
//---------------------------------------------------------------------------
//#pragma argsused

int main(int argc, char* argv[])
{
double a, b, h, S, Y, x, r;
int i, n;

cout << "Vvedite a:";
cin >> a;
cout << "Vvedite b:";
cin >> b;
cout << "Vvedite h:";
cin >> h;
cout << "Vvedite n:";
cin >> n;

for (x = a; x <= b; x += h) //цикл изменения х от а до b с шагом h
{
Y = (pow(x, 2) / 4 + (x / 2) + 1)*exp(x / 2); //вычисление Y(x)
{
r = S = 1;
for (i = 1; i <= n; i++)
{
r *= ((i*i + 1) / ((i - 1)*i))*(pow((x / 2), i)); // ПРОБЛЕМА
S += r; // вычисление S(x)
}

printf("\n x= %8.2lf S(x)= %8.5lf Y(x)= %8.5lf |Y(x)-S(x)|= %8.5lf", x, S, Y, fabs(Y - S)); //вывод результат для каждого шага
i++;
}
_getch();
return 0;
}
}

Для каждого x, изменяющегося от a до b с шагом h, найти значения функции
Y(x), суммы S(x) и |Y(x)–S(x)| и вывести в виде таблицы. Значения a, b,
h и n вводятся с клавиатуры.

Так как значение S(x) является рядом разложения функции Y(x), при
правильном решении значения S и Y для заданного аргумента x (для
тестовых значений исходных данных) должны совпадать в целой части и в
первых двух-четырех позициях после десятичной точки.

Работу программы проверить для a = 0,1; b = 1,0; h = 0,1.

Формулы на картинке

D\ Rain
D\ Rain
564
Я не пишу программы на си, но в формуле прослеживается явная ошибка!
Не хочу разглагольствовать о «высших материях»…
Но вот как это делается:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Для k=0 значение будет равно 1.
```
Для k=1:
— числитель = 1²+1 = 2
— факториал 1! = 0!·1 = 1
— степенной член = (x/2)¹ = (x/2)
```
Для k=2:
— числитель = 2²+1 = 5 — получено новое число, не связанное с предыдущим
— факториал 2! = 1!·2 = 2 — полученное число получено из предыдущего умножением на k
— степенной член = (x/2)² = (x/2)·(x/2) — получено домножением на (x/2) из предыдущего
```
Для k=n:
— числитель = n²+1 — получено новое число, не связанное с предыдущим
— факториал n! = (n-1)!·n — полученное число получено из предыдущего умножением на n
— степенной член = (x/2)^n = (x/2)^(n-1)·(x/2) — получено домножением на (x/2) из предыдущего
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Т.е. выражение вычисления в программе должно выглядеть так:

S = 1;
r = 1;
for (i = 1; i
ВМ
Владимир Минеев
82 195
Лучший ответ
i - 1 в знаменателе. При i = 1. Чего ты хочешь?!
Я не зная С++ скажу что это ужас ...нужно делать через рекурсивную функцию, а то в коде сам черт ногу сломает, как будто расчитываешь траекторию полета ракеты
**
***артyр ***
38 668
причем в том же знаменателе факториал накапливаться не будет, а каждый раз новое значение. необходимо заменить (i-1) новой переменной, проинициализировать ее изначально единицей и в цикле умножать ее на i, подставляя результат в знаменатель