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