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