Program RazmSoch;
uses crt;
var
 n,k: integer;
function a (n, k: integer):integer;
{размещения}
 var aa, i: integer;
 begin
 aa:=1;
 for i:=n downto n-k+1 do
 aa:=aa*i;
 a:=aa;
 end;
function c (n, k: integer): integer;
{сочетания}
 var cc, i:integer;
 begin
 cc:=1;
 if n<2*k then k:=n-k;
 for i:=n downto n-k+1 do
 cc:=cc*i;
 for i:=1 to k do
 cc:=cc div i;
 c:=cc
 end;
begin
 writeln('n=');
 readln(n);
 writeln('k=');
 readln(k);
 writeln('a=', a(n, k));
 writeln('c=', c(n, k));
end.
При вычислении функции размещений a переполнение может возникнуть только тогда, когда конечный результат превышает maxint, а при вычислении функции сочетание C перевыполнение может возникнуть и вследствии того, что промежуточный результат (числитель дроби) превышает maxint.


2012-06-25 • Просмотров [ 3376 ]