Free Pascal - Exitcode 200

Witam napisałem sobie programik obliczający pierwiastek z danej liczby metodą Newtona. Gdy wpisze wszystkie dane wywala mi Exitcode 200. Co jest nie tak? Oto kod:

program Algorytm_Newtona;


Uses Crt;


var

 a, p, e: real;

 klaw: char;


procedure Start;


begin

 ClrScr;

 WriteLn('Program oblicza pierwiastek kwadratowy');

 WriteLn('z dowolnej liczby stosujac algorytm Newtona.');

end;


procedure Podaj_Dane;


begin

 Repeat

  Write('Podaj liczbe podpierwiastkowa(a>0): ');

  ReadLn(a);

  if a<=0 then WriteLn('Podales zle dane!');

 Until a>0;

 WriteLn;

 Write('Podaj poczatkowe przyblizenie wartosci pierwiastka(p>0): ');

 ReadLn(a);

 WriteLn;

 Write('Podaj dokladnosc obliczen(e>0): ');

 ReadLn(a);

end;


function PierwKw(a, p, e: real): real;


var

 x: real;


begin

 x:=p;

 Repeat

  p:=x;

  x:=(p+a/p)/2;

 Until Abs(p-x)<=e;

 PierwKw:=x;

end;


begin

 Repeat

  Start;

  WriteLn;

  Podaj_Dane;

  WriteLn('Pierwiastek z liczby ',a,' wynosi ',PierwKw(a, p, e));

  WriteLn;

  Write('Czy chcesz powtorzyc program?(T/N)');

  klaw:=UpCase(ReadKey);

  if klaw='N' then Exit;

 Until klaw='T';

end.

Exitcode 200 - Division by zero jest spowodowane tym, że w procedurze Podaj_Dane wczytujesz 3 razy zmienną “a”, zamiast wczytać kolejno zmienne: “a”, “p”, “e”. Kompilator domyślnie inicjuje zmienne “p” i “e” przypisując im wartość zero, a w procedurze PierwKw dzielisz właśnie przez “p”.