Главная » Статьи » Задачи по программированию

Размещения и сочетания [Pascal]
Число размещений без повторений  и число сочетаний повторений подсчитывается по таким формулам: 

Применяя
функцию вычисления факториала (см. задачу I), мы могли бы записать подсчет
числа размещений или сочетаний при помощи одного оператора присваивания:

A:=f(n) div f(n-r) или C:=f(n) div (f*f(n - r)),

Чтобы уменьшить вероятность переполнения, создадим функции,
непосредственно подсчитывающие число размещений и сочетаний. Кроме того,
подсчитывая число сочетаний, мы будем опираться на известное тождество   
(например, вместо того, чтобы вычислять   можем вычислить  )
Составим 2 функции:

Код
Function a (n,r:integer):integer;  
  (*размещения*)
  Var aa, i:  
integer;
  begin
  aa:=1;
  For i:=n  
downto n-r+1 do
  aa:=aa*I;
  a:=aa;
  end;
  


Код

Function c (n,r:integer):integer;
  (*сочетания*)
  Var cc,i:integer;  
  begin
  cc:=1;
  if n<2*r then r:=n-r;
  for I:=n downto n-r+1 do
  cc:=cc*i;
  for I:=1 to r do
  cc:=c div I;
  c:=cc;
  end;


Составим программу для данных функции:
________

Код
Function a(n,r:integer):integer;
  (* размещения *)
  Var aa,i:integer;
  begin
  aa:=1;
  For i:=n downto n-r+1 do
  aa:=aa*I;
  a:=aa;
  end;

  Function c (n,r:integer):integer;
  (*сочетания*)
  Var cc,i:integer;
  begin
  cc:=1;
  if n<2*r then r:=n-r;
  for I:=n downto n-r+1 do
  cc:=cc*i;
  for I:=1 to r do
  cc:=cc div i;
  c:=cc;
  end;

  var
  n,r:integer;
begin
n:=2;
r:=3;
  Writeln(C(n,r));
  Writeln(a(n,r));
  Readln;
end.

Категория: Задачи по программированию | Добавил: shypuk (02.10.2013)
Просмотров: 2592 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]