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


#include <iostream>     // ввод и вывод данных
#include <cmath>        // библиотека для pow (степени)
#include <clocale>      // чтобы консоль понимала кириллицу

using namespace std;

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

    setlocale(LC_ALL, "Russian"); // включаем русский язык

    double x; // переменная x из формулы
    int n;    // верхняя граница для внешней суммы

    cout << "Введите значение x: ";
    cin >> x;

    cout << "Введите значение n (целое число от 1): ";
    cin >> n;

    // x стоит в знаменателе (x^(3k+1)), если он ноль — делить нельзя
    if (x == 0.0)
    {
        cout << "Ошибка: переменная x не может быть нулем (будет деление на ноль)!" << endl;
        system("pause");
        return 0; // выходим
    }

    // проверка на адекватность n
    if (n < 1)
    {
        cout << "Ошибка: n должно быть >= 1!" << endl;
        system("pause");
        return 0; // выходим
    }

    double S = 0.0; // сюда будем складывать всю общую сумму (начинаем с нуля)

    // ВНЕШНИЙ ЦИКЛ: крутим сумму по k от 1 до n
    for (int k = 1; k <= n; k++)
    {
        // при k = 2 знаменатель дроби 2*(k - 2) становится нулем — выкидываем этот шаг
        if (k == 2)
        {
            cout << "Слагаемое при k = 2 пропущено (деление на ноль)" << endl;
            continue; // переходим к k = 3
        }

        // считаем числитель и знаменатель дроби перед произведением
        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 от 1 до k + 2
        for (int m = 1; m <= k + 2; m++)
        {
            // при m = 2 числитель зануляется — пропускаем шаг
            if (m == 2)
            {
                cout << "  -> сомножитель при m = 2 пропущен (равен нулю)" << endl;
                continue;
            }

            // при m = 4 знаменатель становится нулем — пропускаем шаг
            if (m == 4)
            {
                cout << "  -> сомножитель при m = 4 пропущен (деление на ноль)" << endl;
                continue;
            }

            // считаем сомножитель и умножаем в P
            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;        // завершение
}