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


#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>   // Подключение функций ввода-вывода (printf, scanf)
#include <stdlib.h>  // Подключение системных функций (system)
#include <locale.h>  // Подключение локализации русского языка
#include <math.h>    // Подключение математических функций (pow)

int main()
{
    setlocale(LC_ALL, "Russian"); // Установка русской локали в консоли

    double x;        // Переменная x, вводимая пользователем
    int n;           // Количество слагаемых n
    double S = 0.0;  // Накопитель итоговой суммы

    printf("Введите значение x: ");      // Приглашение ко вводу x
    scanf("%lf", &x);                    // Считывание вещественного числа x

    printf("Введите значение n: ");      // Приглашение ко вводу n
    scanf("%d", &n);                     // Считывание целого числа n

    // Внешний цикл по параметру k от 1 до n
    for (int k = 1; k <= n; k++)
    {
        // Проверка деления на ноль при k = 2
        if (k == 2)
        {
            printf("Пропуск k = 2 (деление на ноль в знаменателе)\n"); // Сообщение об особой точке
            continue;                                                  // Пропуск шага k = 2
        }

        double P = 1.0; // Инициализация накопителя произведения для текущего k

        // Внутренний цикл по параметру m от 1 до k + 2
        for (int m = 1; m <= k + 2; m++)
        {
            // Проверка деления на ноль при m = 4
            if (m == 4)
            {
                printf("Прерывание произведения при m = 4 (деление на ноль)\n"); // Сообщение об особой точке
                P = 0.0;                                                         // Обнуление произведения
                break;                                                           // Выход из внутреннего цикла
            }

            double term = (pow((double)m, 3) - 8.0) / (m - 4.0); // Вычисление очередного сомножителя
            P *= term;                                           // Накопление произведения
        }

        int pwr = 3 * k + 1;                                      // Показатель степени (целое число)
        double sign = (pwr % 2 == 0) ? 1.0 : -1.0;                // Определение знака (-1)^(3k+1)
        double num = sign * pow(3.0, (double)pwr);                // Числитель дроби: (-3)^(3k+1) без Domain Error
        double den = 2.0 * (k - 2.0) * pow(x, (double)pwr);       // Знаменатель дроби
        double coeff = num / den;                                 // Вычисление коэффициента перед произведением

        S += coeff * P; // Добавление вычисленного слагаемого к общей сумме
    }

    printf("\nИтоговая сумма S = %.4lf\n", S); // Вывод результата вычисления суммы

    system("pause"); // Остановка консоли перед закрытием программы
    return 0;        // Завершение работы программы
}