/** * @brief Programme donnant des exemples de valeurs tirees aleatoirement. */ #include #include /** * @brief Fonction simulant le tirage aleatoire d'un entier entre 1 et @p nbMax. * @remark Le fonctionnement de cette fonction sera expliqué en cours. * @param nMax Valeur maximum que peut avoir la valeur tiree. * @return Valeur tiree aleatoirement. */ int random_1_to_n(int const nMax) { static std::random_device rd; static std::default_random_engine engine(rd()); std::uniform_int_distribution distribution(1, nMax); return distribution(engine); } // Fonction simulant le tirage aleatoire d'un entier entre 1 et 6. // Comme on le verra en cours, la declaration en static de distribution // permet d'etre un peu plus performant que la version non static. // Contrepartie : on ne peut pas changer les bornes de la distribution. /** * @brief Fonction simulant le tirage aleatoire d'un entier entre 1 et 6. * @remark Comme nous le verrons en cours, la declaration en static de * distribution permet d'etre un peu plus performant que la version non static. * @return Valeur tiree aleatoirement. */ int random_1_to_6() { static std::random_device rd; static std::default_random_engine engine(rd()); static std::uniform_int_distribution distribution(1, 6); return distribution(engine); } int main() { auto sixCount = 0; constexpr auto throwCount{10'000}; for (int i = 0; i < throwCount; ++i) { if (random_1_to_n(20) == 6) { sixCount++; } } std::cout << sixCount << " dices were equal to 6 when throwing " << throwCount << " dices with " << 20 << " faces." << std::endl; std::cout << "Ratio: " << static_cast(sixCount) / throwCount * 100 << "%" << std::endl; sixCount = 0; for (int i = 0; i < throwCount; ++i) { if (random_1_to_6() == 6) { sixCount++; } } std::cout << sixCount << " dices were equal to 6 when throwing " << throwCount << " dices with " << 6 << " faces." << std::endl; std::cout << "Ratio: " << static_cast(sixCount) / throwCount * 100 << "%" << std::endl; }