#include <iostream> // потоковый ввод-вывод
#include <cmath> // математические функции (pow)
#include <clocale> // поддержка русского языка
using namespace std;
int main()
{
/* Предусловие: с клавиатуры вводятся вещественное число x (x != 0) и целое число n (n >= 1) */
/* Постусловие: программа вычисляет сумму S, пропуская слагаемое при k = 2 и сомножитель при m = 4 из-за деления на ноль, и выводит результат на экран */
setlocale(LC_ALL, "Russian");
double x; // входная вещественная переменная
int n; // верхняя граница внешней суммы
cout << "Введите значение x: ";
cin >> x;
cout << "Введите значение n (целое положительное число): ";
cin >> n;
if (x == 0.0)
{
cout << "Ошибка: переменная x не может быть равна нулю (деление на ноль)!" << endl;
system("pause");
return 0;
}
double S = 0.0; // накопитель для общей суммы
// Внешний цикл суммы по k от 1 до n
for (int k = 1; k <= n; k++)
{
// Проверка деления на ноль во внешнем слагаемом при k = 2
if (k == 2)
{
cout << "Предупреждение: слагаемое при k = 2 пропущено (деление на ноль в знаменателе суммы)\n";
continue; // переходим к следующему значению k
}
// Вычисление дроби внешнего слагаемого: (-3)^(3k+1) / (2*(k-2) * x^(3k+1))
double numerator_k = pow(-3.0, 3 * k + 1);
double denominator_k = 2.0 * (k - 2) * pow(x, 3 * k + 1);
double term_k = numerator_k / denominator_k;
double P = 1.0; // накопитель для внутреннего произведения
// Внутренний цикл произведения по m от 1 до k + 2
for (int m = 1; m <= k + 2; m++)
{
// Проверка деления на ноль во внутреннем сомножителе при m = 4
if (m == 4)
{
cout << "Предупреждение: множитель при m = 4 пропущен (деление на ноль в знаменателе произведения)\n";
continue; // пропускаем множитель m = 4, произведение домножается дальше
}
// Вычисление сомножителя: (m^3 - 8) / (m - 4)
double factor = (pow(m, 3) - 8.0) / (m - 4.0);
P *= factor;
}
// Прибавление полного слагаемого к общей сумме
S += term_k * P;
}
cout << "\nИтоговое значение суммы S = " << S << endl;
system("pause");
return 0;
}