# 2BIO1 TD4

from random import shuffle, randint

# Simulation de la loi hypergeometrique
def hypergeometrique(p,n,N):
    # Constitution de l'urne
    Np = int(N*p)
    Nq = N - Np
    Urne = [1] * Np + [0] * Nq
    shuffle(Urne)
    X = 0
    for k in range(n):
        M = len(Urne)
        i = randint(0,M-1)
        boule = Urne.pop(i)
        if boule == 1:
            X += 1
    return X

# Obtention du tableau des frequences    
def frequence(p,n,N,f=10000):
    Freq = [0] * (n+1)
    for i in range(f):
        X = hypergeometrique(p,n,N)
        Freq[X] += 1
    return [x/f for x in Freq]

# Simulation de H(0.3,10,100)   
N = 100
n = 30
p = 0.45
K = [k-0.4 for k in range(n+1)]
X = frequence(p,n,N)
import matplotlib.pyplot as plt
# Histogramme de la loi
titre = "Simulation de H("+str(p)+","+str(n)+","+str(N)+")"
plt.figure(1)
plt.clf()
plt.bar(K,X)
plt.title(titre)
plt.show()
# Histogramme de la fonction de repartition
R = [0] *(n+1)
for k in range(n+1):
    for i in range(k+1):
        R[k] += X[i]
plt.figure(2)
plt.clf()
plt.bar(K,R)
plt.title("Fonction de repartition")
plt.show()

