Раздел «Алгоритмы».GeneratePAS:

Переборные алгоритмы n!, 2^n, C(m,n) на Pascal

// автор: Igor Kvasov
{генерирование перестановок n!, 2^n, C(m,n)}
var
  n,m:byte;
  a,was:array[1..50]of byte;

procedure check;
var
  i:byte;
begin
  for i:=1 to n do write(a[i]); writeln;
end;

procedure genNFact(i:byte);
var
  j:byte;
begin
  if i>n then begin
    check; exit;
  end;
  for j:=1 to n do if was[j]=0 then begin
    was[j]:=1; a[i]:=j; genNFact(i+1); was[j]:=0;
  end;
end;

procedure Gen2n(i:byte);
begin
  if i>n then begin
    check; exit;
  end;
  a[i]:=0; gen2n(i+1);
  a[i]:=1; gen2n(i+1);
end;

procedure GenCmn(i:byte);
var
  j:byte;
begin
  if i>n then begin
    check; exit;
  end;
  for j:=1 to m do if was[j]=0 then begin
    was[j]:=1; a[i]:=j; GenCmn(i+1); was[j]:=0;
  end;
end;

begin
end.

{ автор: Дмитрий Полищук } 
program The_Next;
const n=6;
      k=3;

var a:array[1..k+1] of longint;
    i:longint;

function NextCnm:boolean;
var i:longint;
begin
   Next:=False;
   for i:=1 to k do
    begin
       inc(a[i]);
       if a[i]=a[i+1] then a[i]:=i
                      else break;
    end;
   if a[k]>n then next:=True;
end;

begin
   writeln;
   for i:=1 to k do a[i]:=i;
   repeat
      for i:=1 to k do write(a[i],' ');
      writeln;
   until NextCnm;
end.
AlgorithmClasifyForm
Type: Код
Scope: Математика
Strategy: Перебор
Complexity: Low