public static void Main()
Random générateur = new Random();
int nbLancers = LireNombreDeLancers();
Console.WriteLine("Veuillez entrer le nombre de dés lancés: ");
int nbDés = int.Parse(Console.ReadLine());
Console.WriteLine("Veuillez entrer le nombre de faces d'un dé: ");
int nbFaces = int.Parse(Console.ReadLine());
int[] distribution = CréerDistribution(nbDés, nbFaces);
SimulerLancerDesDés(nbDés, nbFaces, distribution, nbLancers, générateur);
AfficherDistribution(distribution, nbDés, nbFaces, nbLancers);
static int LireNombreDeLancers()
Console.WriteLine("Veuillez entrer un nombre de lancers entre 50 et 10000 inclusivement: ");
int nbLancers = int.Parse(Console.ReadLine());
while (nbLancers < 50 || nbLancers > 10000)
Console.WriteLine("Erreur! Vous avez entré un nombre invalide.");
Console.WriteLine("Veuillez entrer un nombre de lancers entre 50 et 10000 inclusivement: ");
nbLancers = int.Parse(Console.ReadLine());
static int[] CréerDistribution(int nbDés, int nbFaces)
return new int[1 + nbDés * nbFaces];
static void SimulerLancerDesDés(int nbDés, int nbFaces, int[] distribution, int nbLancers, Random générateur)
for (int i = 0; i < nbLancers; ++i)
distribution[RoulerDés(nbDés, nbFaces, générateur)] += 1;
static int RoulerDés(int nbDés, int nbFaces, Random générateur)
for (int i = 0; i < nbDés; ++i)
sommeDés += RoulerDé(nbFaces, générateur);
static int RoulerDé(int nbFaces, Random générateur)
return générateur.Next(1, nbFaces + 1);
static void AfficherSymboles(int nbSymboles, char symboles)
for (int i = 0; i < nbSymboles; ++i)
static void AfficherDistribution(int[] distribution, int nbDés, int nbFaces, int nbLancés)
const int NB_SYMBOLES_LIGNE = 70;
const int NB_SYMBOLES_BARRE = 100;
AfficherSymboles(NB_SYMBOLES_LIGNE, '-');
Console.WriteLine("Distribution de {0} lancers de {1} dés à {2} faces : ", nbLancés, nbDés, nbFaces);
for (int i = nbDés; i < distribution.Length; i++)
proportion = (double)distribution[i] / nbLancés;
Console.Write("Somme des dés: {0,3}, proportion {1,5:N1}% :", i, proportion * NB_SYMBOLES_BARRE);
AfficherBarreHistogramme(NB_SYMBOLES_BARRE, proportion);
AfficherSymboles(NB_SYMBOLES_LIGNE, '-');
static void AfficherBarreHistogramme(int max, double proportion)
double nbSymboles = max * proportion;
int nbSymbolesArrondi = (int)nbSymboles;
for (int i = 0; i < nbSymbolesArrondi; ++i)