evklid.PAS

{* Алгоритм Эвклида. Метод вычитаний *}

Unit EVKLID;
Interface
Implementation
Begin
 writeln('Найти наибольший общий делитель двух целых чисел (алгоритм Евклида). В этой программе используются только операции вычитания. ');
End.

{  Алгоритм Эвклида. Метод вычитаний.     Данная программа вычисляет НОД по алгоритму Эвклида. Все  вычисления основаны на использовании операций вычистания.     Задача.  Найти наибольший общий делитель двух целых                   чисел (алгоритм Евклида). В этой программе                    используются только операции вычитания.    кл. слова:  НОД алгоритм Эвклида паскаль задачи паскаль работа операции вычитания наибольший общий делитель    выход:    Алгоритм Эвклида. Метод вычитаний.    Рекурсивная функция: 20  Глубина рекурсии: 322  Итерационная функция: 20    }
Program evklid;

Uses evklid.pas; {* Эту строку можно удалить *}
Uses Crt; {* Вызов внешних функций *}
Var { данное число }
  { данное число }
  : longint; { глубина рекурсии (количество рекурсивных вызовов)}
  : word; { данное число }
  { данное число }
  : longint                      ); {находит наибольший общий делитель с помощью рекурсии }
If n = 0 Then
  rec := m
Else If m < n Then
  rec; { данное число }
{ данное число }
: longint                       ); {находит наибольший общий делитель с помощью итерации}
Var { дополнительная переменная }
  : longint;
Begin
  While n > 0 Do
  Begin
    If m < n Then
    Begin
      t := m;
      m := n;
      n := t;
    End;
    t := m - n;
    m := n;
    n := t;
  End;
  iter := m;
End;
Begin
  ClrScr; {* Очищаем экран *}
  depth := 0;
  writeln('Алгоритм Эвклида. Метод вычитаний.');
  writeln; {исходные значения функции передаются в подпрограмму rec()}
  WriteLn ('Рекурсивная функция;
  '
, rec (200, 62140));
  WriteLn ('Глубина рекурсии: ', depth); {исходные значения функции передаются в подпрограмму iter()}
  WriteLn ('Итерационная функция: ', iter (200, 62140));
  WriteLn; {* Пустая строка *}
  ReadLn; {* Приостановка программы. Ожидание Enter *}
End.