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


#include <iostream>     // потоковый ввод и вывод
#include <cmath>        // возведение в степень pow
#include <clocale>      // поддержка кириллицы

using namespace std;    // пространство имен std

int main()
{
    // Предусловие: ввод вещественного числа x (не ноль) и целого числа n (n >= 1)
    // Постусловие: вычисление суммы S с пропуском точек деления на ноль при k = 2 и m = 4

    setlocale(LC_ALL, "Russian"); // русская локаль

    double x; // вещественная переменная x
    int 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) // деление на ноль во внешнем слагаемом (k - 2 = 0)
        {
            cout << "Слагаемое при k = 2 пропущено (деление на ноль)" << 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) // деление на ноль во внутреннем сомножителе (m - 4 = 0)
            {
                cout << "  -> сомножитель при m = 4 пропущен (деление на ноль)" << endl; // сообщение
                continue; // пропускаем деление на ноль
            }

            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; // успешный выход
}