Из-за дурацкого сбоя этого сервиса при сохранении ответа пропал получасовой набор формул в модераторов удалить этот ответ.
P.S. Набираешь ответ - как по минному полю идешь. При нажатии "сохранить" неизвестно что произойти может. Например, при случайном нажатии "сохранить ответ" (каждый может ошибиться) нет анализа, того, что в поле набора данных не пусто и весь этот набор формул мгновенно "улетает в никуда". Я уж не говорю о постоянных "Вы были отключены от сервера".
И еще. Поскольку автор вопроса не виноват, даю два "голых" (без формул) решения.
1. Рекурсивная программа (как не надо решать подобные задачи)
{ рекурcивная программа } function prod(a,b:integer):real; var i:integer; p:real; begin p:=1; for i:=a to b do p:=p*i; prod:=p end;
function pow2(n:integer):integer; var i,p:integer; begin p:=1; for i:=1 to n do p:=p*2; pow2:=p end;
function an(n:integer):real; begin if n=1 then an:=0.5 else an:=an(n-1)*n/prod(pow2(n-1)+1,pow2(n)) end;
var s:real; i,n:integer; begin Write('n='); Read(n); s:=0; for i:=1 to n do s:=s+an(i); Writeln(s) end.
Пример: n=4 0.58348214285829
2. А вот рекуррентная, которую можно написать, если немного подумать.
{ рекуррентная программа } var a,p,s:real; i,j,n,lo,hi:integer; begin Write('n='); Read(n); a:=0.5; s:=a; lo:=1; hi:=2; for i:=2 to n do begin p:=1; lo:=hi+1; hi:=hi*2; for j:=lo to hi do p:=p*j; a:=a*i/p; s:=s+a end; Writeln(s) end.
begin var n:=readInteger('Число элементов массива-'); var a:=ArrRandom(n,-50,50); a.Println; for var i:=1 to n-2 do a[i]:=2*(i+1); a.Println end.
Пример Число элементов массива- 10 -40 4 -49 0 -47 41 49 33 -31 -1 -40 4 6 8 10 12 14 16 18 -1
begin var n:=readInteger('Число элементов массива-'); var a:=ArrRandom(n,-50,50); a.Println; var i1:=a.IndexMax; var i2:=a.IndexMin; Writeln(a[min(i1,i2)+1:max(i1,i2)].Where(x->x<0).Sum) end.
Пример Число элементов массива- 18 -45 -30 -49 -44 34 -5 -12 -28 22 14 -39 -20 -46 50 6 21 20 -47 -194
begin var a:=ReadlnString('Введите строку;').ToCharArray; // было сделано так только ради получения массива символов, // который на самом деле только мешает Writeln(a); if Pos('...',a.JoinIntoString)>0 then Writeln('Троеточие в массиве есть') else Writeln('Троеточия в массиве нет') end.
Пример Введите строку; 6ye$% DFDRT..drrtert...DFDGD [6,y,e,$,%, ,D,F,D,R,T,.,.,d,r,r,t,e,r,t,.,.,.,D,F,D,G,D] Троеточие в массиве есть
P.S. Набираешь ответ - как по минному полю идешь. При нажатии "сохранить" неизвестно что произойти может. Например, при случайном нажатии "сохранить ответ" (каждый может ошибиться) нет анализа, того, что в поле набора данных не пусто и весь этот набор формул мгновенно "улетает в никуда".
Я уж не говорю о постоянных "Вы были отключены от сервера".
И еще. Поскольку автор вопроса не виноват, даю два "голых" (без формул) решения.
1. Рекурсивная программа (как не надо решать подобные задачи)
{ рекурcивная программа }
function prod(a,b:integer):real;
var
i:integer;
p:real;
begin
p:=1;
for i:=a to b do p:=p*i;
prod:=p
end;
function pow2(n:integer):integer;
var
i,p:integer;
begin
p:=1;
for i:=1 to n do p:=p*2;
pow2:=p
end;
function an(n:integer):real;
begin
if n=1 then an:=0.5
else an:=an(n-1)*n/prod(pow2(n-1)+1,pow2(n))
end;
var
s:real;
i,n:integer;
begin
Write('n='); Read(n);
s:=0;
for i:=1 to n do s:=s+an(i);
Writeln(s)
end.
Пример:
n=4
0.58348214285829
2. А вот рекуррентная, которую можно написать, если немного подумать.
{ рекуррентная программа }
var
a,p,s:real;
i,j,n,lo,hi:integer;
begin
Write('n='); Read(n);
a:=0.5; s:=a; lo:=1; hi:=2;
for i:=2 to n do begin
p:=1; lo:=hi+1; hi:=hi*2;
for j:=lo to hi do p:=p*j;
a:=a*i/p;
s:=s+a
end;
Writeln(s)
end.
Пример
n=4
0.58348214285829