resolut1123
@resolut1123
Студент

Как посчитать этот пример (суммы ряда)*(произведение ряда)+почему выводит такой результат?

Столкнулся с таким вот примером, 5facff54e40ca846129915.jpeg
Посмотрел как и что работает, сделал вот такую вот программу.
#include <cmath>
#include <iomanip>
#include <iostream>
using namespace std;

int main()
{
	setlocale(LC_ALL, "rus");
	double x,s=1,i=1, sumar=0, proizr=1,k=3,n;
	cout << "Введите x= ";
	cin >> x;
	cout << "Введите n = ";
	cin >> n;
	for (k; k <= n; k++) {
		sumar += (pow(-2, k - 1)) / ((k - 5)*pow(x,k));
	}
	for (i; i < k + 7; i++) {
		proizr *= ((pow(i, 3) - 27) / (i - 7));
	}
	s = sumar * proizr;
	cout <<fixed << setprecision(4)<< "s = " << s;
}

Ошибок никаких не выдаёт, предупреждений тоже нет, после расчётов "s" выводит как -nan ( ind ).
Буду рад если укажете на ошибку, или подскажите как лучше решать такую задачу.
P.S в остальном всё в порядке, вычислил путем отладки, не работает второй цикл
for (i; i < k + 7; i++) {
		proizr *= ((pow(i, 3) - 27) / (i - 7));
	}
  • Вопрос задан
  • 2846 просмотров
Решения вопроса 1
@AVKor
Никак. Код весь не читал, но там и должно получиться NaN (знаменатель дроби обращается в ноль). Задачу давал какой-то идиот.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
wataru
@wataru Куратор тега Математика
Разработчик на С++, экс-олимпиадник.
У вас ошибка в том, что вы считаете произведение один раз после цикла по k. На тот момент k после цикла равно n. Т.е. как будто у вас вместо k в формуле стоит n как граница для произведения.

Вам надо считать proizr внутри цикла по k и домножать на него каждое слагаемое. (не забудьте инициализировать proizr единицей).
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы