with Ada.Text_Io, Ada.Integer_Text_Io;
use Ada.Text_Io, Ada.Integer_Text_Io;
-- Calcul de Cnp
-- Cnp = n! / (p! * (n - p)!) = (n * (n - 1) * ... * (n - p + 1)) / p!
-- Cnp = (n / 1) * ((n - 1) / 2) * ((n - 2) / 3) * ... * ((n - p + 1) / p)
procedure Ex01b is
N, P : Natural;
Res : Natural;
begin
-- saisies
Put("Veuillez rentrer deux nombres >= 0 avec n >= p : ");
Get(N); Get(P);
-- Algo :
--- Cnp = n! / (p! * (n - p)!)
--- Cnp = (n * (n - 1) * ... * (n - p + 1)) / p!
--- Cnp = (n / 1) * ((n - 1) / 2) * ((n - 2) / 3) * ... * ((n - p + 1) / p)
Res := 1;
for I in 1 .. P loop
Res := Res * (N - I + 1);
Res := Res / I;
end loop;
-- Affichage du résultat
Put("C("); Put(N, 0); Put(")("); Put(P, 0); Put(" ) = "); Put(Res, 0);
end;