real procedure ZERO (x,a,b,fx,e); value a,b; real x,a,b,fx; array e; begin real c,fa,fb,fc,re,ae; re:= e[1]; ae:= e[2]; x:= a; fa:= fx; x:= b; fb:= fx; goto entry; begin: if abs (a - b) <= fa then a:= b + sign (c - b) * fa; if sign (a - x) = sign (b - a) then x:= a; a:= b; fa:= fb; b:= x; fb:= fx; if sign (fc) = sign (fb) then entry: begin c:= a; fc:= fa end; if abs (fb) > abs (fc) then begin a:= b; fa:= fb; b:= c; fb:= fc; c:= a; fc:= fa end; a:= (a * fb - b * fa) / (fb - fa); x:= (c + b) / 2; fa:= abs (b * re) + ae; if abs (x - b) > fa then goto begin; ZERO:= x end ZERO; real procedure MAX(k,a,b,fk); value a,b; integer k,a,b; real fk; begin real r,s; MA : k:= a; if k <= b then MAX:= s:= fk; goto MC; MB : k:= k + 1; r:= fk; if r > s then begin MAX:= s:= r; a:= k end; MC : if k < b then goto MB; k:= a end MAX; real procedure PROD(k,a,b,fk); value a,b; integer k,a,b; real fk; begin real p; p:= 1; for k:= a step 1 until b do p:= fk * p; PROD:= p end PROD; real procedure INT (x, a, b, y, eps); value a, b, eps; real x, a, b, y, eps; begin boolean ls; real h, F, V, f0, f4, I; I:= 0; x:= a; f0:= y; m1: h:= (b - a)/ 4; ls:= true; m2: x:= a + h; F:= f0 + 4 * y; x:= x + h; V:= y; F:= F + 2 * V; x:= x + h; F:= F + 4 * y; x:= x + h; f4:= y; F:= F + f4; V:= 8 * V + 2 * (f0 + f4) - F; if abs (V) >= eps then begin h:= h/2; ls:= false end else begin a:= x; f0:= f4; I:= h * (F - V/15) + I; if ls then goto m3; if abs (V) <= eps/32 then h:= 2 * h; if sign (b - a - 4 * h) != sign (h) then goto m1 end; goto m2; m3: INT:= I/3 end INT;