Программа 1
Pascal Code:
  1.  
  2. program lab;
  3.  
  4. uses  crt;
  5. var
  6.   n, k: integer;
  7.  
  8. type
  9.   t_razm = array[1..9]of byte;
  10.  
  11. var
  12.   a: t_razm;
  13.   m: set of 1..9;
  14.  
  15. procedure write_razm(const a: t_razm);
  16. var
  17.   i: byte;
  18. begin
  19.   for i := 1 to k do
  20.     write(a[i], ' ');
  21.   write('  ');
  22. end;
  23.  
  24. procedure razmeshenie(i: byte);
  25. var
  26.   x: byte;
  27. begin
  28.   for x := 1 to n do
  29.     if x in m
  30.         then
  31.     begin
  32.       a[i] := x;
  33.       if i = k
  34.         then write_razm(a)
  35.                 else
  36.       begin
  37.         exclude(m, x);
  38.         razmeshenie(i + 1);
  39.         include(m, x)
  40.       end;
  41.     end
  42. end;
  43.  
  44. begin
  45.   clrscr;
  46.   writeln('Введите m : ');
  47.   read(n);
  48.   writeln('Введите n : ');
  49.   read(k);
  50.     m := [1..n];
  51.   razmeshenie(1);
  52.   writeln;
  53.   readln;
  54. end.


Которая генерирует размещения, из N по M, которые вводится с клавиатуры.
------------------------------------------------------------------------------
Программа 2
Pascal Code:
  1.  
  2. var   a:array[1..300] of integer;
  3.       index,n,p : integer;
  4.  
  5. procedure generate (l,r:integer; var k:integer);
  6. var i,v:integer;
  7. begin
  8.       if (l=r) then
  9.       begin
  10.         for i:=1 to n do write(a[i],' ');
  11.         k:=k+1;
  12.         if k=3 then
  13.          begin
  14.           writeln;
  15.           k:=0;
  16.          end else
  17.          begin
  18.           write (' ');
  19.          end;
  20.       end else
  21.       begin
  22.         for i := l to r do begin
  23.            v:=a[l]; a[l]:=a[i]; a[i]:=v; {обмен a[i],a[j]}
  24.            generate(l+1,r,k);              {вызов новой генерации}
  25.            v:=a[l]; a[l]:=a[i]; a[i]:=v; {обмен a[i],a[j]}
  26.         end;
  27.       end;
  28. end;
  29.  
  30. begin
  31.       writeln ('Введите количество элементов перестановки');
  32.       readln(n);
  33.       writeln ('Введите элементы');
  34.       for index:=1 to N do read(A[index]);
  35.       p:=0;
  36.       writeln ('Полученные перестановки:');
  37.       generate( 1,n,p);
  38. end.


Которая генерирует перестановки, из N по M, которые вводится с клавиатуры.
-------------------------------------------------------------------------------
Помогите расписать как они поэтапно генерируют эти размещения в соответствии с кодами программ. Потому что коды мне помогали делать, и я не соображу как здесь это происходит.