
Цитата
Program laba4;
Var x,y,n,s:real;
Begin
x:=0.2;
While x<=0.8 do
Begin
y:=1/2*ln((1+x)/(1-x));
x:=x+0.2; //y и s будут считаться при разных x! Нужно либо перенести в начало, либо в конец цикла.
Begin //Begin просто так?
n:=1;
s:=x+(exp(n*ln(x)))/n; //Сумма вычислится неверно, формула же другая? Правильно s:=(exp((2*n-1)*ln(x)))/(2*n-1). При n равном 1 как раз получится x, отдельно его писать не нужно.
If abs(y-s)<=0.001 then //Если разница между первыми двумя (у меня только первым) членами меньше 0.001, тогда посчитать следующий член суммы? Можно написать while abs(y-s)>0.001 do, тогда можно вычислить при каком значении n погрешность становится меньше 0,001
begin
n:=n+1;
s:=s+(exp(n*ln(x)))/n; //Формула аналогично формулы выше s:=s+... .
end;
end; //End от ненужного Begin'а
writeln('x=', x);
end;
end.
Хотя судя по всему, нужно просто написать написать
x:=0.2;
while x<=0.8 do
begin
y:=(1/2)*ln((1+x)/(1-x));
s:=x+exp(3*ln(x))/3+exp(5*ln(x))/5+exp(7*ln(x))/7;
if abs(y-s)<0.01 then writeln('При x=', x, ' погрешность менее 0.01');
x:=x+0.2;
end;