
var
n:integer; //кол-во отрезков
a:integer; //левая граница
b:integer; //правая граница
dx:real;
rez:real; //будущий ответ
xi,xi1:real; //отрезок 1 и отрезок 2
h:real;
y0,y1,y2,y3,y4:real;
inter:real; //накапливаяемая сумма
i:integer; //переменная, необходимая для великой миссии
E:real; //необходимая точность
function y(x:real):real;
begin
Result:=sqrt(2*x+1);
end;
begin
WriteLn('Please input border integral(a,b): '); //просьба ввести границы интеграла
ReadLn(a,b); //границы интерграла
WriteLn;
WriteLn('Enter the desired accuracy: '); //просьба ввести желаемую точность
ReadLn(E); //E - необходимая точность
WriteLn;
rez := 0; //зануляем на всякий случай переменную
n := 1; //начальное кол-во отрезков
dx :=(b-a)/n;
if a >= b then WriteLn('Sorry, my bad') //защита от дурака
else
for i:=0 to n-1 do
while (rez-rez+1)/rez < E do //собственно условие на проверку точности
begin
xi:=dx*i;
xi1:=dx*(i+1);
h:=(xi1-xi)/4;
y0:=y(xi);
y1:=y(xi+h);
y2:=y(xi+2*h);
y3:=y(xi+3*h);
y4:=y(xi1);
inter:=(2*h/45)*(7*y0+32*y1+12*y2+32*y3+7*y4);
rez:=rez+inter;
end;
WriteLn('Response to your example: ',rez:6:5); //ответ вашего примера
WriteLn;
WriteLn('Press ENTER to exit...'); //показание к действию
ReadLn;
end.
while
(rez-rez+1)/rez < E do - вот это условие нужно поменять так, чтобы выполнялась идея:
пользователь вводит границы интеграла (а и б), необходимую точность (Е), далее машина считает до тех пор пока некая формула, имеющая в себе результат, не получит ответ менее заданной погрешности
|