#!/usr/bin/perl

# $prawd = rozklad_dwumianowy($n, $k, $p)
#    Zwraca prawdopodobienstwo wystapienia zdarzenia $k razy
#    w $n probach, gdzie prawdopodobienstwo wystapienia pojedynczego
#    zdarzenia to $p.
sub rozklad_dwumianowy {
    my ($n, $k, $p) = @_;

    return(0) if ((($p == 0) && ($k != 0)) || (($p == 1) && ($k != $n)));
    return(1) if ((($p == 1) && ($k == $n)) || (($p == 0) && ($k == 0)));
    return wybierz($n, $k) * $p**$k * (1-$p)**($n-$k);
}

print rozklad_dwumianowy( 10, 2, 0.10 )
print "Liczba ukladow reki w pokerze (5 kart) ", wybierz(52,5),  "\n";
print "Liczba ukladow reki w brydzu (13 kart) ", wybierz(52,13), "\n";

# wybierz($n, $k) to liczba sposobow, na jakie mozna wybrac $k elementow
# ze zbioru n-elementowego, gdzie kolejnosc wyboru nie ma znaczenia.
#
sub wybierz {
    my ($n, $k) = @_;
    my ($wynik, $j) = (1, 1);

    return 0 if $k > $n || $k < 0;
    $k = ($n - $k) if ($n - $k) < $k;

    while ( $j <= $k ) {
        $wynik *= $n--;
        $wynik /= $j++;
    }
    return $wynik;
}


wybierz_prosto {
    my ($n, $k) = @_;
    return permutacja($n, $k) / permutacja($n-$k);
}

