ошибка времени выполнения в следующем коде паскаля

Я пытаюсь разложить на множители заданное число a, поэтому я написал следующий код на Паскале:

program prime_factors;
  var b:array[1..1000] of integer;
  k,i,d,a:integer;
begin
  k:=0;
  write(' enter number ');
  read(a);
  while a>1 do
    if a mod d =0 then
      begin
        k:=k+1;
        b[k]:=d;
        a:=a div d;
      end
    else
      if d=2 then
        d:=d+1
      else
        d:=d+2;
   for i:=1 to k do
     write(b[i],'  ');
   readln();
   readln();
end.

Но когда я запускаю его, он выдает ошибку 200 или ошибку времени выполнения, но я не могу определить, в чем проблема. Я использовал k как длину числа факторов в массиве b. Должен ли я думать, что проблема с индексом k?


person Aleksi Beriashvili    schedule 27.10.2012    source источник
comment
нашел свою ошибку, я не инициализировал d   -  person Aleksi Beriashvili    schedule 28.10.2012
comment
Каждый код ошибки времени выполнения имеет соответствующее описание. Ошибка 200 — это деление на ноль, что должно показать, что d действительно является виновником, поскольку все операции деления (mod, div) в вашем коде используют d в качестве знаменателя.   -  person Thomas    schedule 28.10.2012


Ответы (1)


вы должны определить D:=2; сразу после начала: D, потому что его значение по умолчанию равно 0.

person surena    schedule 11.03.2013