Program Approxi_pas(input,output);
        {Nhert eine Zahl durch einen Bruch an.}
        {markus schaber}
uses crt;

Var Wert,Toleranz:extended;
    Nenner,Zaehler:longint;  {fr hhere Genauigkeiten comp (64-Bit-Integer
                              von TP7) nehmen.}
var Signum:Boolean;

begin
     Nenner:=1; Zaehler:=0;  {Initialisieren}

     Writeln('Bitte geben sie den anzunhernden Wert ein');
     Readln(Wert);

     if Wert<0 then BEGIN {Vorzeichen merken}
        Signum:=True;
        Wert:=-Wert
     end else
        Signum:=False;

     Writeln('Bitte geben sie die Toleranz ein');
     Readln(Toleranz);

     writeln('Ich berechne...');

     while abs((Zaehler/Nenner) - Wert) > Toleranz DO BEGIN

           if (Zaehler/Nenner) <= wert then {Bruch vergrern}
              Zaehler:=Zaehler+1

           else begin {letzte Vergrerung war zu gro
                       => Schrittgre verkleinern}

              Zaehler:=(Zaehler DIV Nenner * (Nenner+1))-1;
              Nenner:=Nenner+1
           end;

           {Debug-Ausgaberoutine
           GotoXY(1,WhereY);
           DelLine;
           Write(Nenner,'/',Zaehler,'=',Zaehler/Nenner);
           }
     end;

     writeln; {und den ganzen Quark ausgeben}
     Write('Der Bruch lautet:');
     if signum then write('-');
     writeln(Zaehler,'/',Nenner);

     Writeln('ausgerechnet: ',Zaehler/Nenner);

     Writeln('Abweichung: ',abs(Zaehler/Nenner-Wert));
end
.
