С ++ 2 игральные кости катят 10 миллионов раз НАЧИНАЕТСЯ - PullRequest
0 голосов
/ 31 октября 2019

Я пытаюсь создать программу, которая будет бросать 2 кубика 10 миллионов раз и выводить количество бросков каждого числа. Наряду с этим мне поручено создать гистограмму (* = 2000) для выходных данных. Вот что у меня есть.

/*
Creating a program that counts outcomes of two dice rolls, then show a
histogram of the outcomes.
Section 1 : Simulate ten million times rolls of two dice, while counting
outcomes. (Hint: Use an array of size 13.)
Section 2 : Show the outcome, the numbers of outcomes, and the histogram
(one * designates 20000). Your output must align properly.
*/

#include <iostream>
#include <iomanip>
#include <ctime>
using namespace std;

int main()
{
   int i, j, ary[13] = {};

   cout << "Please enter the random number seed.";
       cin >> j;
   srand(j);

   for (i = 0; i < 10000000; i++)
       ary[die() + die()]++;

   for (i = 2; i <= 12; i++)
   {
       cout << setw(3) << i << " : " << setw(6) << ary[i] << " : ";
       for (j = 0; j < ary[i]; j += 2000)
           cout << "*";
       cout << endl;
   }
   return 0;
}

ПРИМЕР ВЫХОДА: https://imgur.com/a/tETCj4O

Я знаю, что мне нужно что-то сделать с rand ()% 6 + 1;в начале программы. Я чувствую, что я близок к тому, чтобы быть завершенным, но упускаю ключевые моментыЯ также понимаю, что я не бросил вызов die () в моем ary []

1 Ответ

0 голосов
/ 31 октября 2019

Я рекомендую создавать случайные начальные числа из высокоточных таймеров, таких как std :: chrono :: high_resolution_clock. Тогда они не зависят от пользователя и фактически являются случайными. Всегда создавайте начальное число перед вызовом std :: rand.

#include <chrono>

auto time = std::chrono::high_resolution_clock::now();
auto seed = std::chrono::duration_cast<std::chrono::milliseconds>(time);
std::srand(seed)

Точность в миллисекундах делает семя обычно достаточно уникальным, но если начальное число требуется близко к 1000 раз в секунду, тогда я рекомендую использовать точность в наносекунду или микросекунду, чтобыдействительно случайный.

Лучше всего было бы создать функцию, которая создает случайное начальное число, используя высокоточный таймер и случайное значение, и, наконец, проверяет, что возвращаемое значение находится в диапазоне от 0 до 5 (для 6-гранных кубиков).

...