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