АК
Алексей Кононов

Объясните пожалуйста, почему не работает программа поиска НОД двух числе по алгоритму Евклида.

Алгоритм на русском. Если а=b, то НОД = а или b. Если это не так, то выбираем из чисел наибольшее и вычитаем из него наименьшее. Получившееся значение присваиваем числу, которое было наибольшим. (Пример a=5, b=3, то a=5-3=2) Повторяем алгоритм пока a не станет равным b.

program Evklid;

var a, b: integer;

begin

writeln('Введите a и b');

readln(a);

readln(b);



m1: if a=b then writeln(a)

else;

if a>b then a:=a-b;

else b:=b-a;

goto m1;

writeln('НОД чисел',a,'и',b=a);

end.

ИК
Ирина Кох(Волкова)

Во-первых, алгоритм Евклида, насколько я помню, ориентируется не на вычитание, а на деление нацело. Иначе для того, чтобы выяснить, что НОД (2000002, 2) = 2, потребуется два миллиона вычитаний.

Во-вторых, все эти goto, если их использовать неразумно, приводят к зацикливаниям, как в данном случае.

Так что я бы написал этот алгоритм немного по-другому:

PROGRAM Evklid;

VAR
a, b, c: integer;

BEGIN

WriteLn('Введите a и b');
ReadLn(a);
ReadLn(b);

c := a MOD b;

WHILE (c <> 0) DO
BEGIN
a := b;
b := c;
c := a MOD b;
END;

WriteLn('НОД = ', b);

END.

d.
d.alekcey

Потому что лишняя точка я запятой.

Похожие вопросы
Помогите, пожалуйста, составить алгоритм для программы
программа на поиск числа
Используя алгоритм Евклида, найдите НОД для чисел 144 и 66.Сколько шагов алгоритма при этом вам приходилось выполнить
что такое алгоритм евклида? не могу понять, задание: используя алгоритм евклида, найдите НОД чисел: 437 и 133
сортировка методом поиска максимума. написать алгоритм и код программы
объясните алгоритм в C++
объясните доступно бинарный алгоритм Евклида. не копируя алгоритмы из сети
почему ключи для нод 32 не работают больше?
Алгоритмы поиска. Кто-нибуть дайте инфу по алгоритму поиска с вычислением адреса пожалуйста.
программа на pascal (найти НОК через НОД для двух чисел )