Вычисление суммы ряда, подскажите, где в цикле ошибка - Pascal
Формулировка задачи:
Помогите пожалуйста найти ошибку, не знаю почему, но при запуске не считает сумму
Вычислить сумму элементов бесконечного ряда с заданной точностью
e = 0,00001. Условием окончания вычислений считать Sn <= e.
Значение x задать самостоятельно.
∞
∑ ((-1)^n )*(6+(0,3x)^(3+n))/(2n+2)!
n=1
Program rediska;
var
c,n:integer;
s,a,x,s1,delta,e,h,y:real;
f:longint;
begin
write('Введите х =');
readln(x);
//начальные значения
s:=0;
n:=0;
y:=0.3*x;
a:=exp(3*ln(y));
f:=1*2;
e:=0.00001;
repeat
s1:=s; //в s1 хранится значение s для сравнения
n:=n+1; //cчетчик слагаемых
c:=-c; //значение (-1) для первого n-го слагаемого
a:=a*y; //вычисление 0,3*х в степени (3+n) n-го слагаемого
h:=a+6;
f:=f*(2*n+1)*(2*n+2); //факториала n-го слагаемого
s:=s+c*h/f; //добавление n-го слагаемого к общей сумме
delta:=abs(s-s1); //проверка условия окончания цикла
until delta<=e;
//вывод результата на экран
writeln('при x=',x,' сумма ', n, 'элементов=',s);
end.Решение задачи: «Вычисление суммы ряда, подскажите, где в цикле ошибка»
textual
Листинг программы
const e = 0.00001;
var x, s, a, b, t: double;
n: integer;
begin
write('x = ');
readln(x);
x := 0.3 * x;
n := 1;
a := -0.25;
b := -x * x * x / 24;
s := a + b;
repeat
inc(n);
a := -a / 4 / (n + 0.5) / (n + 1);
b := -x * b / 4 / (n + 0.5) / (n + 1);
t := a + b;
s := s + t
until abs(t) <= e;
write('Sum = ', s:0:5, ', terms: ', n);
readln
end.
Объяснение кода листинга программы
- Объявляются и инициализируются переменные:
e- считается равным0.00001x- введенное значение с клавиатурыs,a,b,t- временные переменные для вычисленийn- устанавливается в начальное значение1
- Программа запрашивает ввод значения
xс клавиатуры и умножает его на 0.3. - Вычисляются начальные значения для
aиb:aустанавливается в-0.25bвычисляется как-x * x * x / 24
- Вычисляется значение суммы
sравноеa + b. - Выполняется цикл
repeat-untilдля расчета суммы ряда:- Увеличивается счетчик
nна 1 - Вычисляются новые значения
aиbпо формулам - Новое значение
tустанавливается какa + b - Новое значение
sприбавляется к суммеt - Цикл выполняется до тех пор, пока абсолютное значение
tне будет меньше или равноe
- Увеличивается счетчик
- Выводится значение вычисленной суммы
sс точностью до 5 знаков после запятой и количествоterms(членов ряда)n. - Конец программы.
В цикле
repeat-untilвыполняются формулы для вычисления суммы ряда. Ошибка в цикле не присутствует, но для правильного вычисления суммы ряда нужно убедиться, что формула дляbсоответствует уравнению ряда.