Загрузка данных


#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;
}