code 34151;
    comment MCA 2311;
    procedure VALSYMTRI(D, BB, N, N1, N2, VAL, EM);
    value N, N1, N2;
    integer N, N1, N2; array D, BB, VAL, EM;
        begin integer K, COUNT;
        real MAX, X, Y, MACHEPS, NORM, RE, MACHTOL, UB, LB, LAMBDA;

        real procedure STURM;
        begin integer P, I; real F;
            COUNT:= COUNT + 1;
            P:= K; F:= D[1] - X;
            for I:= 2 step 1 until N do 
            begin if F <= 0 then 
                begin P:= P + 1;
                    if P > N then goto OUT
                end 
                else if P < I - 1 then 
                begin LB:= X; goto OUT end;
                if ABS(F) < MACHTOL then 
                F:= if F <= 0 then - MACHTOL else MACHTOL;
                F:= D[I] - X - BB[I - 1] / F
            end;
            if P = N or F <= 0 then 
            begin if X < UB then UB:= X end else LB:= X;
       OUT: STURM:= if P = N then F else (N - P) * MAX
        end STURM;

        MACHEPS:= EM[0]; NORM:= EM[1]; RE:= EM[2];
        MACHTOL:= NORM * MACHEPS; MAX:= NORM / MACHEPS; COUNT:= 0;
        UB:= 1.1 * NORM; LB:= - UB; LAMBDA:= UB;
        for K:= N1 step 1 until N2 do 
        begin X:= LB; Y:= UB; LB:= -1.1  * NORM;
            ZEROIN(X, Y, STURM, ABS(X) * RE + MACHTOL);
            VAL[K]:= LAMBDA:= if X > LAMBDA then LAMBDA else X;
            if UB > X then UB:= if X > Y then X else Y
        end;
        EM[3]:= COUNT
    end VALSYMTRI

        eop