Текст подпрограммы и версий
pa10i_p.zip 
Тексты тестовых примеров
tpa10i_p.zip 

Подпрограмма:  PA10I (модуль PA10I_p)

Назначение

Генерация сочетаний Cnk   из  n целых чисел по  k .

Математическое описание

Пусть заданы целые числа 0, 1, 2, ..., n - 1. Подпрограмма PA10I формирует следующее по порядку сочетание из этих  n целых чисел по  k, 1 ≤ k ≤ n, если задано предшествующее сочетание. Новое сочетание помещается в одномерном целом массиве J длины  k таким образом, что его компоненты J (1), J (2), ..., J (k) содержат целые числа в пределах от 0 до  n - 1 в виде монотонной строго возрастающей последовательности.

На входе в подпрограмму предшествующее сочетание задается в массиве J также в виде монотонной строго возрастающей последовательности. Если массив J задать нулевым, то в качестве первого сочетания будет получено n - k, ..., n - 1. Это же начальное сочетание получится и после выходного сочетания 0, 1, ...., n - k, которое всегда является последним в циклическом процессе генерации всех возможных сочетаний из  n по  k .

Использование

procedure PA10I(N :Integer; K :Integer; var J :Array of Integer); 

Параметры

     N, K - заданные значения  n и  k соответственно, n ≥ 1, 1 ≤ k ≤ n (тип: целый);
J - целый одномерный массив длины K, содержащий на входе предшествующее сочетание, а на выходе - следующее по порядку сочетание.

Версии: нет

Вызываемые подпрограммы: нет

Замечания по использованию: нет

Пример использования

Unit tpa10i_p;
interface
uses
SysUtils, Math, { Delphi }
LStruct, Lfunc, UtRes_p, PA10I_p;

function tpa10i: String; 

implementation

function tpa10i: String;
var
N,K,I,_i :Integer;
const
J :Array [0..2] of Integer = ( 0,0,0 );
label
_10;
begin
Result := '';
N := 5;
K := 3;
for I:=1 to 10 do
 begin
  PA10I(N,K,J);
  Result := Result + #$0D#$0A;
  for _i:=0 to 2 do
   begin
    Result := Result + Format('%3d',[J[_i]]);
    if ( ((_i+1) mod 1)=0 )
     then Result := Result + #$0D#$0A;
   end;
  Result := Result + #$0D#$0A;
_10:
 end;
UtRes('tpa10i',Result);  { вывод результатов в файл tpa10i.res }
exit;
end;

end.

Результаты:

       (2, 3, 4);  (1, 3, 4);  (0, 3, 4);  (1, 2, 4); 
       (0, 2, 4);  (0, 1, 4);  (1, 2, 3);  (0, 2, 3); 
       (0, 1, 3);  (0, 1, 2)