#include <iostream> // ввод и вывод
#include <cmath> // функции pow
#include <clocale> // русский язык
using namespace std;
int main()
{
// Предусловие: ввод x (не 0) и n >= 1
// Постусловие: вычисление суммы S с пропуском деления на ноль и нулевых сомножителей
setlocale(LC_ALL, "Russian");
double x;
int n;
cout << "Введите x: ";
cin >> x;
cout << "Введите n (от 1): ";
cin >> n;
if (x == 0.0)
{
cout << "Ошибка: x не может быть нулем!" << endl;
system("pause");
return 0;
}
if (n < 1)
{
cout << "Ошибка: n должно быть >= 1!" << endl;
system("pause");
return 0;
}
double S = 0.0; // копилка для всей суммы
// ВНЕШНИЙ ЦИКЛ ПО k
for (int k = 1; k <= n; k++)
{
// Деление на ноль во внешнем слагаемом (знаменатель обращается в 0 при k = 2)
if (k - 2 == 0)
{
cout << "Слагаемое при k = " << k << " равно бесконечности (пропущено)" << endl;
continue;
}
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; // сброс произведения перед каждым шагом k
// ВНУТРЕННИЙ ЦИКЛ ПО m
for (int m = 1; m <= k + 2; m++)
{
// 1. Деление на ноль (бесконечность)
if (m - 4 == 0)
{
cout << " -> сомножитель при m = " << m << " равен бесконечности (пропущен)" << endl;
continue;
}
double factor = (pow(m, 3) - 8.0) / (m - 4.0);
// 2. ПРОПУСК НУЛЯ: сомножитель равен 0 — не умножаем
if (factor == 0.0)
{
cout << " -> сомножитель при m = " << m << " равен нулю (пропущен, чтобы не занулить P)" << endl;
continue; // пропускаем
}
P *= factor;
}
S += term_k * P;
}
cout << "\nИтоговая сумма S = " << S << endl;
system("pause");
return 0;
}