# Подсчёт суммы ряда.

# При заданной погрешности и с диапазоном числа n
# программа выводит сумму ряда на каждом этапе и конечный результат,
# а также сообщение о том велик или мал дипазон вывода n.

#----------------------------------------------------------------------
# Переменные:
#----------------------------------------------------------------------
# x - Число использующееся в подсчёте каждого члена последовательности; 
# eps - Погрешность суммы ряда; 
# n0,nk - Начало и конец (соответственно) диапазона вывода суммы;
# sh - Шаг вывода суммы на каждом этапе; 
# sumr - Текущяя сумма ряда;
# n - Номер операции;
# y1,y2 - Вспомогательные переменные для обозначения следующего и
# предыдущего члена ряда;

from math import *
from decimal import Decimal

x=float(input('Введите число x: '))
eps=float(input('Введите погрешность суммы: '))
n0,nk=map(int,input('Введите диапазон n, не рваное нулю: ').split())
sh=int(input('Введите шаг печати суммы ряда: '))
print('───────┬───────────────────────────')
print(' Номер │   Текущее зн-е суммы ряда')
n=1
y1=((x**2)*log(3))/4
y2=-((x**2)*log(5))/16
sumr=0

while abs(Decimal(y2) - Decimal(y1)) > eps:
    y = Decimal((Decimal((-1)**(n+1)) * (Decimal(x**(2 * n))) * (Decimal((log(1+2*n))))) / Decimal((4 * n**2)))
    sumr += Decimal(y)
    if n == n0 and n0<=nk:
        if abs(sumr)<=100000:
            print('───────┼───────────────────────────')
            print('{:3.0f}    │          {:7.3f}'.format(n,sumr))
        else:
            print('───────┼───────────────────────────')
            print('{:3.0f}    │          {:7.5e}'.format(n,sumr))
        n0+=sh
    n+=1
    y1=Decimal(y2)
    y2=Decimal(y)
print('───────┴───────────────────────────')
if n<nk:
    print('\nДиапазон вывода слишком велик.')
    print('Cумма ряда при данной погрешности равна: {:7.3f}\
 и стоит под номером: {:3.0f}'.format(sumr,n))
elif n==nk:
    print('\nДиапазона вывода хватило.')
    print('Cумма ряда при данной погрешности равна: {:7.3f}\
 и стоит под номером: {:3.0f}'.format(sumr,n))
else:
    print('\nДиапазон вывода слишком мал.')
    print('Cумма ряда при данной погрешности равна: {:7.3f}\
 и находится под номером: {:3.0f}'.format(sumr,n))
input('\nНажмите Enter для завершения.')       
    
