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
procedure GetWord(s: string; var ib: integer; var pWord: string; var l: integer); // Возвращает слово pWord, которое является подстрокой s // Разделителем слов являются один и более пробелов. // ib при вызове процедуры указывает на позицию в строке s, // начиная с которой ведется поиск слова. // При выходе из процедуры ib - позиция начала найденного слова, // l- длина найденного слова, l=0 если слово не найдено. var i, n: integer; w: string; begin n := Length(s); l := 0; w := ''; if ib >= n then begin ib := n; pWord := '' end else begin i := ib; while (s[i] = ' ') and (i < n) do i := i + 1; ib := i; w := ''; while (s[i] <> ' ') and (i < n) do begin w := w + s[i]; i := i + 1 end; if i < n then begin l := i - ib; pWord := w end else begin l := i - ib + 1; pWord := w + s[n] end; if pWord[l]='.' then pWord:=Copy(pWord,1,l-1) end end;
procedure SortWords(n:integer); // Сортировка первых n элементов массива ast var i,j:integer; s:string; begin for i:=1 to n-1 do begin if ast[i]>ast[i+1] then begin s:=ast[i]; ast[i]:=ast[i+1]; ast[i+1]:=s; j:=i; while j>1 do if ast[j]<ast[j-1] then begin s:=ast[j]; ast[j]:=ast[j-1]; ast[j-1]:=s; j:=j-1 end else j:=0 end end end;
var s,st:string; p,n,i,len:integer; Flag:Boolean; begin st:=' aquila non captat muscas '; st:=st+'dolus an virtus quis in hoste requirat '; st:=st+'de mortuis aut bene aut nihil '; st:=st+'esse oportet ut vivas non vivere ut edas.'; p:=1; i:=1; len:=1; n:=0; while len>0 do begin GetWord(st,p,ast[i],len); if len>0 then begin p:=p+len; n:=n+1; i:=i+1 end end; for i:=1 to n do write(ast[i],' '); SortWords(n); writeln; writeln; s:=ast[1]; Flag:=True; for i:=2 to n do if ast[i]<>s then begin If Flag then write(s,' ') else Flag:=True; s:=ast[i]; end else Flag:=False; if Flag then write(ast[n],' '); writeln end.
Тестовое решение: aquila non captat muscas dolus an virtus quis in hoste requirat de mortuis aut bene aut nihil esse oportet ut vivas non vivere ut edas
an aquila bene captat de dolus edas esse hoste in mortuis muscas nihil oportet quis requirat virtus vivas vivere
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