zadach501.PAS

{* Задача 501 *}

Unit ZADACH501;
Interface
Implementation
Begin
 writeln('Hапечатать все перестановки чисел 1..N');
End.

Program zadach501;

Uses zadach501.pas; {* Эту строку можно удалить *}
Type {* Типы переменных *}
  Pere = Array [byte] Of byte;
Var {* Объявление переменных *}
  N   : byte;
  i   : byte;
  j   : byte;
  X   : Pere;
  Yes : boolean;
Var {* Необходимые переменные *}
  X : Pere;
Var {* В работе нам потребуются переменные: *}
  Yes : boolean);
Var {* В работе нам потребуются переменные: *}
  i : byte;
Var {* Объявление переменных *}
  a : byte);
  b : byte); {обмен переменных}
Var {* В работе нам потребуются переменные: *}
  c : byte;
Begin
  c := a;
  a := b;
  b := c
End;
Begin
  i := N - 1; {поиск i}
  While (i > 0)And(X[i] > X[i + 1]) Do
    dec(i); {* Вычтем из i единицу *}
  If i > 0 Then
  Begin
    j := i + 1; {поиск j}
    While (jX[i]) Do
      inc(j); {* j++ *}
    Swap(X[i], X[j]);
    For j := i + 1 To (N + i) Div 2 Do
      Swap(X[j], X[N - j+i + 1]);
    Yes := true
  End;
  Else Yes := false
End;
Begin
  write('N=');
  readln(N);
  For i := 1 To N Do {* Переменная i увеличивается с 1 до N *}
    X[i] := i;
  Repeat
    For i := 1 To N Do {* Увеличиваем i от 1 до N с шагом 1 *}
      write(X[i]);
  writeln; {* Пустая строка *}
  Next(X, Yes)
  Until Not Yes
End.