Показать сообщение отдельно
Старый 19.04.2015, 10:17   #8 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Рома123 Посмотреть сообщение
2) найти наиб.общий делитель и наим.общее кратное (для любого числа).
Код:
Var
 m,n,p,GCD:LongInt; {формат Longint выбран потому, что в программе будет
                     использоваться произведение чисел m и n}

Function Min(p,q:LongInt):LongInt;
{вспомогательная функция поиска минимального из двух чисел}
begin
 if p>q then Min:=q else Min:=p;
end;

Function Find_GCD(p,q:LongInt):LongInt;
{Ищем Наибольший Общий Делитель (Greatest Common Divisor) двух чисел.
Алгоритм таков: проверяем делимость бОльшего числа на меньшее, и в случае
отрицательного результата в цикле отнимаем от меньшего по единичке до
тех пор, пока не окажется, что оба исходных числа делятся на полученное.
Делимость проверяется по равенству нулю остатка от деления.}
var
 i:LongInt;
begin
 i:=Min(p,q)+1;
 repeat
  i:=i-1;
 until ((p mod i)=0) and ((q mod i)=0);
 Find_GCD:=i;
end;

Begin
 Repeat
 {Цикл организован для проверки выполнения условия строгой положительности
  вводимых чисел}
  Write('m = ');
  Readln(m);
  Write('n = ');
  Readln(n);
  if (m<=0) or (n<=0) then writeln('Both numbers must be positive!!!');
 Until (m>0) and (n>0);
 GCD:=Find_GCD(m,n);
 Writeln('Greatest Common Divisor = ',GCD);
 {Для поиска Наибольшего Общего Кратного используется теорема о том,
  что произведение НОД и НОК равно произведению самих чисел.}
 Writeln('  Least Common Multiple = ',(m*n div GCD));
 Readln
End.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070