(* Algorithmus 8.4 *) FUNCTION adapt(a,b,fa,fm,fb,is: real): real ; VAR h,m,i1,i2,fml,fmr,int: real; i:integer; stack : ARRAY[1..30] OF RECORD a,b,fa,fm,fb: real END; fertig : boolean; (* globale Funktion f : real *) BEGIN (* Initialisierung und erster Eintrag *) i:=1; int:=0; stack[1].a:=a; stack[1].b:=b;stack[1].fa:=fa; stack[1].fm:=fm; stack[1].fb:=fb; REPEAT (* Eintrag holen *) a:=stack[i].a; b:=stack[i].b; fa:=stack[i].fa; fm:=stack[i].fm; fb:=stack[i].fb; i:=i-1; REPEAT m := (a+b)/2 ; h := (b-a)/4 ; fml:=f(a+h); fmr:=f(b-h); i1 := h/1.5*(fa+4*fm+fb) ; i2 := h/3*(fa+4*(fml+fmr)+2*fm+fb) ; i1 := (16*i2-i1)/15; fertig:=(is+(i1-i2) = is); IF fertig THEN BEGIN int:= int+i1; writeln(tf,a:10:5,b-a,i1); END ELSE BEGIN i:=i+1; IF i>30 THEN writeln('I>30'); stack[i].a:=m; stack[i].b:=b; stack[i].fa:=fm; stack[i].fm:=fmr; stack[i].fb:=fb; b:=m; fb:=fm;fm:=fml; END; UNTIL fertig; UNTIL i=0; adapt:=int; END;