Сочетания

 

     Пусть M - конечное (не обязательно упорядоченное) множество, состоящее из n элементов. Сочетанием из n элементов по k называется любое подмножество множества , состоящее из k элементов. Два сочетания из n элементов по k мы будем считать различными в том случае, если в одном из них есть, хотя бы один элемент, не содержащийся в другом.

     Другими словами, в сочетаниях не важен порядок элементов, а важен лишь их состав. Так, например, из множества M = {1, 2, 3, 4} можно составить четыре различных сочетания из 4 по 3: {1, 2, 3}, {1,2,4}, {2, 3, 4}, {1, 3, 4}.

     Число различных сочетаний из n элементов по k равно:

     Учитывая, что число размещений из n элементов по k равно:

можно выразить число сочетаний через число размещений, тогда получим:

     Составим процедуру вычисления числа сочетаний из n элементов по k. Для этого удобней воспользоваться второй формулой, в которой вычисляется только один факториал числа k. В формуле

их надо вычислять целых три (n!, (n - k)! и k!) и может возникнуть ситуация, когда будут получаться очень большие числа, которые могут выходить за пределы указанного целого типа.

     Можно найти и другую формулу для числа сочетаний, в которой можно избежать больших чисел и вычисления факториалов чисел.

     В процедуре, в качестве входных формальных переменных будут две переменные n и k, для числа всех элементов и числа выбираемых элементов. Выходной параметр для значения сочетания обозначим c, имя процедуры - Сombination.

     Входные параметры имеют тип integer, а выходной - longint, так как значение числа сочетаний может быть даже очень большим числом.

     Переменные самой процедуры - i, - переменная для цикла for и p - промежуточная переменная для факториала k!.

     Программа для вычисления числа сочетаний

{combin.pas

Сайт Algorithm (http://www.algorithm1.narod.ru/)

Автор проекта: Galina}

uses Crt;

var n1,k1,p : longint;

Procedure combination(n, k : integer; var c : longint);

var i : longint;

begin

  c := 1;

  for i := 1 to n - k do c := c*(n - k + i) div i

end;

begin

  writeln('Введите число всех элементов: ');

  readln(n1);

  writeln('Введите число выбираемых элементов: ');

  readln(k1);

  combination(n1, k1, p);

  writeln('Число сочетаний равно: ', p)

end.

 

Автор проекта: Galina
Hosted by uCoz