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