var a,b,c: integer;

begin
  writeln('Введите a,b: ');
  read(a,b);  
  while b<>0 do
  begin
    c := a mod b;
    a := b;
    b := c;
  end;
  writeln('Наибольший Общий Делитель = ',a);
end.

Почему он работает правильно без проверки что if a>b?

Ввожу, к примеру, (18,4), a присвоилось 18, b присвоилось 4, тут всё верно, НОД = 2, а если (4,18), то также НОД = 2. Почему работает без проверки условия?

задан 1 Сен '14 15:22

изменен 1 Сен '14 23:21

%D0%92%D0%B8%D1%82%D0%B0%D0%BB%D0%B8%D0%BD%D0%B0's gravatar image


9917

10|600 символов нужно символов осталось
0

При $%a < b$% в случае натуральных чисел остаток будет равен $%a$%, поэтому в итоге числа поменяются местами, и дальше всё будет происходить как обычно.

ссылка

отвечен 1 Сен '14 16:08

10|600 символов нужно символов осталось
Ваш ответ

Если вы не нашли ответ, задайте вопрос.

Здравствуйте

Математика - это совместно редактируемый форум вопросов и ответов для начинающих и опытных математиков, с особенным акцентом на компьютерные науки.

Присоединяйтесь!

отмечен:

×39
×13

задан
1 Сен '14 15:22

показан
562 раза

обновлен
1 Сен '14 16:08

Отслеживать вопрос

по почте:

Зарегистрировавшись, вы сможете подписаться на любые обновления

по RSS:

Ответы

Ответы и Комментарии

Дизайн сайта/логотип © «Сеть Знаний». Контент распространяется под лицензией cc by-sa 3.0 с обязательным указанием авторства.
Рейтинг@Mail.ru