sample029.PAS

{* Генерация перестановок *}

Unit SAMPLE029;
Interface
Implementation
Begin
 writeln('Генерация перестановок');
End.

Program pas;

Uses sample029.pas; {* Эту строку можно удалить *}
{ реурсивные алгоритмы: генерация перестановок }
Const {* Предопределенные *}
  n = 3; { количество элементов в перестановке}
Var {* Необходимые переменные *}
  a                     : Array[1..n] Of integer;
  index                 : integer;
Procedure generate (l : integer);
r                     : integer);
Var {* Объявление переменных *}
  i : integer;
  v : integer;
Begin
  If (l = r) Then
  Begin
    For i := 1 To n Do {* Переменная i увеличивается с 1 до n *}
      write(a[i], ' ');
    writeln; {* Вывод пустой строки *}
  End;
  Else Begin
    For i := l To r Do {* Увеличиваем i от l до r с шагом 1 *}
    Begin
      v := a[l];
      a[l] := a[i];
      a[i] := v; {обмен a[i], a[j]}
      generate(l + 1, r); {вызов новой генерации}
      v := a[l];
      a[l] := a[i];
      a[i] := v; {обмен a[i], a[j]}
    End;
  
End;

  End;
  Begin
For index := 1 To N Do {* Переменная index увеличивается с 1 до N *}
  A[index] := index;
generate( 1, n );
End......