function Pow(p: real; n: integer): real; // возвращает значение p^n begin Pow := exp(n * ln(p)) end;
function Fact(n: integer): real; // возвращает значение n! var p: real; i: integer; begin p := 1; for i := 1 to n do p := p * i; Fact := p end;
var i: integer; a, ai: real;
begin a := 0; ai := 2 * eps; i := 0; while ai > eps do begin i := i + 1; ai := Pow(2 / i, i) * Fact(i); a := a + ai end; writeln('Сумма первых ',i, ' членов ряда с точностью ', eps:0:4, ' равна ', a:0:4) end.
Тестовое решение:
Сумма первых 32 членов ряда с точностью 0.0010 равна 12.9467
function fact(n : integer) : longint; begin if n <= 1 then fact := 1 else fact := n * fact(n - 1); end;
var t,s:real; i:integer; begin writeln('*** Alphaeus is thinking... ***'); writeln('*** OK ***'); writeln(); writeln('Программа вычисляет частичную сумму ряда с заданной точностью'); writeln(' Общий член ряда: an = ((3^n)*n! )/ (2n)!'); writeln('Вычисление прекратится, когда модуль очередного слагаемого станет меньше 0,001'); writeln(); s:=0; i:=1; t:=1; while t>eps do begin t:=(power(3,i)*fact(i))/(2*fact(2*i)); s:=s+t; writeln('a(',i,')=',t:0:6,' S=',s:0:6); i:=i+1; end; writeln(); writeln('Сумма ряда равна',s:0:6); end.
eps = 0.001;
function Pow(p: real; n: integer): real;
// возвращает значение p^n
begin
Pow := exp(n * ln(p))
end;
function Fact(n: integer): real;
// возвращает значение n!
var
p: real;
i: integer;
begin
p := 1;
for i := 1 to n do p := p * i;
Fact := p
end;
var
i: integer;
a, ai: real;
begin
a := 0;
ai := 2 * eps;
i := 0;
while ai > eps do
begin
i := i + 1;
ai := Pow(2 / i, i) * Fact(i);
a := a + ai
end;
writeln('Сумма первых ',i, ' членов ряда с точностью ', eps:0:4, ' равна ', a:0:4)
end.
Тестовое решение:
Сумма первых 32 членов ряда с точностью 0.0010 равна 12.9467