program Intervallschachtelung(input, output); {Nullstellensuche der Funktion f=cos(x)-x im Intervall [xu, xo] durch Intervallschachtelung} var xu, xo: double; {Intervallgrenzen} eps: double; {Genauigkeit} fehler: double; xneu: double; function f(x: double): double; begin f := cos(x) - x end; {f} procedure init; begin writeln('Exemplarische Darstellung einer Nullstellensuche durch '); writeln('Intervallschachtelung anhand der Funktion f=cosinus(x)-x'); writeln; writeln('Geben Sie bitte die Grenzen des Intervalls an, in dem gesucht werden soll.'); writeln('(Vorsicht, (cos(xunten)-xunten)*(cos(xoben)-xoben) muss negativ sein!)'); readln(xu, xo); while (f(xu)*f(xo)) > 0 do begin writeln('Zwischen diesen Grenzen liegt keine Nullstelle. Versuchen Sie es noch einmal.'); readln(xu, xo) end; {while} writeln('Wie genau soll die Nullstelle bestimmt werden?'); readln(eps); while eps <= 0 do begin writeln('Nur positive Genauigkeiten machen Sinn. Versuchen Sie es noch einmal.'); readln(eps) end {while} end; {init} procedure result; begin writeln('Die Nullstelle liegt bei ', xneu:1:7, '.') end; {result} begin {Intervallschachtelung} init; fehler := abs(xo - xu)/2; while fehler > eps do begin xneu := (xo + xu)/2; if f(xneu) = 0.0 then begin result; halt end; {if} if f(xneu)*f(xu) < 0 then begin xo := xneu end else begin {if} xu := xneu; fehler := 0.5*fehler end {if} end; {while} xneu := (xo + xu)/2.0; result end. {Intervallschachtelung}