C/C++

Cкажите что не так с кодом?

#include
#include
#include
using namespace std;
int main()
{
double x, y, h, s;
int r;
const double a = -2;
const double b = -0.1;
setlocale(LC_ALL, "Rus");
h = (b - a) / 10;
s = 0;
for (x = a; x < b; x += h)
{
y = x * cos(x);
for (int n = 0; n < 141; n++)
r = pow(-1, n) * pow(x, 2 * n + 1) / (2 * n) + 1;
s+=r;
}
cout << "y= " << y << setw(15) << "s=" << s << endl;
return 0;

}
XS
Xasan Shermanov
33
double a = -2, b = -0.1;
for (int i = 0; i <= 10; ++i) {
double x = a + (b - a) * i / 10;
double s = x, t = x, q = -x * x;
for (int n = 2; n <= 140 * 2; n += 2) {
t = t * q / (n * (n - 1));
s += t;
}
cout << "x=" << x << " y=" << setprecision(15) << x * cos(x) << " s=" << s << endl;
}
Jura G
Jura G
95 870
Лучший ответ
Xasan Shermanov а почему <=10?
Xasan Shermanov а для чего каждый раз домножать на i, там же написано просто с шагом h типо прибавлять h к переменной a до того момента пока a не будет меньше b, разве нет?
Xasan Shermanov а почему тогда до i<11? откуда то ограничение?
Xasan Shermanov а можно как-то оформить тут без факториала?
Jura G for (x = a; x < b; x += h)
{
s = x;
t = x;
q = -x * x;
y = x * cos(x);
for (n = 1; n < 141; n++)
{
t = t * q / (2 * n * (2 * n - 1));
s += t;
}

Смысл t в том, что при вычислении очередного значения t ты используешь предыдущее значение. Иначе факториал не получится.
в задании в знаменателе (2 * n)! - факториал, а у тебя (2 * n) + 1

вообще, тут не надо pow и факториал явно вычислять не надо, если получится сообразить, как из предыдущего слагаемого получить следующее.
{Оптимист}
92 928
Xasan Shermanov в конце какая-то ошибка, что не так?
Xasan Shermanov я просто ваще не приходил факторил и не знаю что это такое, но чел нам сказал сделать лабу)
(◔‿◔) Правильно всё ужè написàли - тут нужна рекурренция, тогда и факториалы со степенями совершенно не понадобятся! Для количества интервалов n и шагов итерации k лучше завести отдельные переменные. (2n)! не вычисляется. И ещё прибавление к аргументу х на каждом шаге внешнего цикла шага табуляции h - довольно плохая идея, потому что, например, в длинных циклах текущее значение аргумента просто "уползает", в то время как такое вот вычисление аргумента х=a+i*h, а вместе с тем, естественно, и соответствующее ему значение табулируемой функции в данной точке, являются более точными, чёткими и достоверными! Правда, в данном случае это как раз неважно, тут ничего никуда не "уплывает" и не "уползает".. 。◕‿◕。
По поводу вывода тоже нужно сказать несколько слов. Лучше ведь, чтобы всё всегда выводилось аккуратно, ровно и красиво, а не как попало, для этого в плюсах и есть манипуляторы, только вот форматный вывод в духе чистого Си, по-моему, намного проще!.
Да, кстати, а зачем брать k (то есть количество итераций для вычисления значений функции !) равным ста сорокà, как в задании? Легко проверить, что k можно задать и поменьше примерно в дюжину раз - результаты будут те же самые. Советую в этом убедиться, сравнив результаты при k=140 и k=11 - всё одно и тоже! А вот и сам код:
Сергей Лебедев Команды system можно, конечно же, убрать, у меня они просто стоят для расцветки экрана вот в такие цвета:
Че такие сложные вопросы делаешь
Олег Вяткин
Олег Вяткин
4 018
Xasan Shermanov :D
Сижу уже 2 часа смотрю на код и не могу понять че не так.
for (x = a; x < b; x += h)
for (int n = 0; n < 141; n++)
for (x = a; x < b; x += h)
а разве тут не нужны ; ??
Xasan Shermanov навряд ли