code 32051;
real procedure INTEGRAL(X, A, B, FX, E, UA, UB);
value A,B;real X, A, B, FX; array E; boolean UA, UB;
begin
real procedure TRANSF;
begin Z:= 1 / X; X:= Z + B1; TRANSF:= FX * Z * Z end;
real procedure QAD(FX); real FX;
begin real T, V, SUM, HMIN;
procedure INT;
begin real X3, X4, F3, F4, H;
X4:= X2; X2:= X1; F4:= F2; F2:= F1;
ANEW: X:= X1:= (X0 + X2) * .5; F1:= FX;
X:= X3:= (X2 + X4) * .5; F3:= FX; H:= X4 - X0;
V:= (4 * (F1 + F3) +2 * F2 + F0 + F4) * 15;
T:= 6 * F2 -4 * (F1 + F3) + F0 + F4;
if ABS(T) < ABS(V) * RE + AE then
SUM:=SUM + (V - T) * H else
if ABS(H) < HMIN then E[3]:= E[3] +1
else
begin INT; X2:= X3; F2:= F3; goto ANEW end;
X0:= X4; F0:= F4
end INT;
HMIN:= ABS(X0 - X2) * RE; X:= X1:= (X0 + X2) * .5;
F1:=FX;SUM:= 0; INT; QAD:= SUM / 180
end QAD;
real X0, X1, X2, F0, F1, F2, RE, AE, B1, Z;
RE:= E[1]; if UB then AE:= E[2] * 180 / ABS(B - A)
else AE:= E[2] * 90 / ABS(B - A); if UA then
begin E[3]:= E[4]:= 0; X:= X0:= A; F0:= FX end
else
begin X:= X0:= A:= E[5]; F0:= E[6] end;
E[5]:= X:= X2:= B; E[6]:= F2:= FX; E[4]:= E[4] + QAD(FX);
if ^UB then
begin if A < B then
begin B1:= B -1 ; X0:= 1 end
else
begin B1:= B +1 ; X0:= -1 end;
F0:= E[6]; E[5]:= X2:= 0; E[6]:= F2:= 0;
AE:= E[2] * 90;
E[4]:= E[4] - QAD(TRANSF)
end;
INTEGRAL:= E[4]
end INTEGRAL;
eop