#include <stdio.h> // Функции ввода-вывода (printf, scanf)
#include <stdlib.h> // Системные функции (system)
#include <locale.h> // Русская локализация
#include <math.h> // Функция степени pow
int main()
{
// Предусловие: ввод x != 0, n >= 1 (точки деления на 0: k = 2 и m = 4 пропускаются)
// Постусловие: расчет и вывод итоговой суммы S
setlocale(LC_ALL, "Russian"); // Включение русского языка в консоли
double x; // Вводимый аргумент x
int n; // Количество слагаемых n
double S = 0.0; // Накопитель суммы S
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 (знаменатель 2*(k - 2) обращается в ноль)
if (k == 2)
{
printf("Шаг k = 2 пропущен (деление на ноль)\n");
continue; // Переход к следующему шагу k без прерывания программы
}
double P = 1.0; // Инициализация накопителя произведения для текущего k
// Внутренний цикл произведения по m от 1 до k + 2
for (int m = 1; m <= k + 2; m++)
{
// Пропускаем сомножитель при m = 4 (знаменатель m - 4 обращается в ноль)
if (m != 4)
{
double term = (double)(m * m * m - 8) / (double)(m - 4); // Вычисление сомножителя
P *= term; // Накопление произведения
}
else
{
printf(" Сомножитель m = 4 пропущен (деление на ноль)\n");
}
}
// Вычисление внешнего множителя при текущем k
int pwr = 3 * k + 1; // Показатель степени (3k + 1)
double sign = (pwr % 2 == 0) ? 1.0 : -1.0; // Знак числителя (-1)^(3k+1)
double num = sign * pow(3.0, (double)pwr); // Числитель (-3)^(3k+1)
double den = 2.0 * (k - 2.0) * pow(x, (double)pwr); // Знаменатель 2*(k-2)*x^(3k+1)
double coeff = num / den; // Итоговый дробный коэффициент
S += coeff * P; // Добавление вычисленного слагаемого к общей сумме
}
printf("\nвыв. S = %.4lf\n", S); // Вывод итоговой суммы
system("pause"); // Задержка окна консоли
}