Почему функция в этой программе повторяется? Паскаль

Сделал программу нахождения наибольшего общего делителя, но почему-то функция повторяется.

var p,q:integer;
function nod(x,y: integer):integer;
begin
while y<>0 do nod(y,x mod y);
result:=x;
end;
begin
write('Enter two integers: ');
read(p,q);
write(nod(p,q));
end.

person user3484031    schedule 04.04.2014    source источник
comment
Ваш код использует переменную y, чтобы решить, когда остановить цикл, но вы никогда не делаете ничего, что могло бы изменить значение y, чтобы остановить его. Очевидно, вам нужно исправить свой код, чтобы значение y менялось при каждом проходе цикла, пока не будет выполнено условие прерывания (y = 0).   -  person Ken White    schedule 04.04.2014


Ответы (1)


Вы не обновляете переменную y, и цикл никогда не заканчивается.

Может быть:

var p,q:integer;
function nod(x,y: integer):integer;
begin
while y<>0 do 
  begin
    y:= nod(y,x mod y);
  end;
result:=x;
end;
begin
write('Enter two integers: ');
read(p,q);
write(nod(p,q));
end.
person rafalopez79    schedule 04.04.2014