Если одно или оба числа равны 0, возвращает |a+b|
function NOD(a, b: integer): integer;
var
min, i: integer;
begin
{ если одно или оба числа равны 0 }
if ((a = 0) or (b = 0)) then
begin
NOD := abs(a + b);
exit;
end;
{ находим минимальное из a и b }
if a < b then
min := a
else
min := b;
{ каждое из чисел 1..min проверяем на то, что и а, и b делятся на него без остатка }
for i := min downto 1 do
if (((a mod i) = 0) and ((b mod i) = 0)) then
begin
NOD := i;
exit;
end;
end;
begin
writeln('Программа находит максимальный общий делитель ' +
'двух заданных целых чисел, используя простейший циклический алгоритм');
write('Введите первое число ');
readln(a);
write('Введите второе число ');
readln(b);
writeln('НОД(', a, ',', b, ') = ', NOD(abs(a), abs(b)));
writeln('Нажмите [Enter] для завершения программы');
readln;
end.