Witam
Mam obliczyć funkcje nieliniową metodą newtona. Znalazłem kod w internecie i chciałbym go przerobić

program mzf1;


const
  EPS0 = 0.0000000001; 
  EPSX = 0.0000000001; 

function f(x : real) : real;
begin
  f := 2(x*x)-3;
end;


function fp(x : real) : real;
begin
  fp := 4*x;
end;



var
  x0,x1,f0,f1 : real;
  i           : integer;

begin
  write('Podaj punkt startowy x0 = '); readln(x0);
  writeln;
  writeln('-----------------------------------------------');
  writeln('WYNIK:');
  writeln;
  x1 := x0 - 1; f0 := f(x0); i := 64;
  while (i > 0) and (abs(x1 - x0) > EPSX) and (abs(f0) > EPS0) do
  begin
    f1 := fp(x0);
    if abs(f1) < EPS0 then
    begin
      writeln('Zly punkt startowy');
      i := 0;
      break;
    end;
    x1 := x0;
    x0 := x0 - f0 / f1;
    f0 := f(x0);
    dec(i);
    if i = 0 then writeln('Przekroczony limit obiegow');
  end;
  if i > 0 then writeln('x0 = ',x0:15:8);
  writeln;
  writeln('-----------------------------------------------');
  writeln('Koniec. Nacisnij klawisz Enter...');
  readln;
end.

zminiłem już funcje i pochodną na swoją a chodzi mi o urpszczenie tego:

x1 := x0 - 1; f0 := f(x0); i := 64;
  while (i > 0) and (abs(x1 - x0) > EPSX) and (abs(f0) > EPS0) do
  begin
    f1 := fp(x0);
    if abs(f1) < EPS0 then
    begin
      writeln('Zly punkt startowy');
      i := 0;
      break;
    end;
    x1 := x0;
    x0 := x0 - f0 / f1;
    f0 := f(x0);
    dec(i);
    if i = 0 then writeln('Przekroczony limit obiegow');
  end;
  if i > 0 then writeln('x0 = ',x0:15:8);

żeby mi nie sprawdzał tych obiegów. lepije zamiast tego niech wypisze który pkt jest ostatnim i jego wynik. oraz żeby mi nie spr czy pkt jest dobry czy zły. Kombinowałem ale chyba za każdym razem za dużo usuwam bo raz mi wyniku nie pokazuje raz mi się zapętla z tymi obiegami, będę wdzięczny za każdą pomoc
Pozdrawiam