Программа для симуляции броска двух кубиков

Ниже весь вопрос.

Напишите программу, которая имитирует бросание двух кубиков. Программа
следует использовать ранд, чтобы бросить первый кубик, и снова использовать ранд, чтобы
бросьте второй кубик. Сумма двух значений должна быть рассчитана.
[Примечание: каждый кубик может показывать целое значение от 1 до 6, поэтому сумма
эти два значения будут варьироваться от 2 до 12, причем 7 является наиболее частым
сумма и 2 и 12 являются наименее частыми суммами.] Обратите внимание, что есть
36 возможных комбинаций двух костей. Ваша программа должна накатить
две кости 3600 раз. Используйте массив one_dimensional для подсчета чисел
раз появляется каждая возможная сумма. Распечатать результаты в виде таблицы
формат. Кроме того, определите, являются ли итоговые значения разумными (т.е.
шесть способов бросить 7, так что примерно одна шестая всех бросков
должно быть 7).

Результат должен быть следующим:

Question 2
Please enter the seed : 2

введите описание изображения здесь

Я не знаю, как создать «ожидаемый» столбец.
введите описание изображения здесь

Вот моя программа: (Основным является Q2_main ())

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

double total_Array[11];
double expected_Array[11];
double actual_Array[11];
int seed;

void initialization_of_Array()
{
for (int counter=0; counter < 12; counter++)
{
total_Array[counter] = 0;
expected_Array[counter] = 0;
actual_Array[counter] = 0;
}
}

void show_heading_line()
{
cout << setw(5) << "Sum"<< setw(10) << "Total"<< setw(17) << "Expected"<< setw(16) << "Actual"<< endl;
}

void show_Data_Results_line(int sum, int total, double expected, double actual)
{
cout << setw(5) << sum
<< setw(10) << total
<< setw(16) << expected << "%"<< setw(15) << actual << "%"<< endl;
}

void calculation_of_total()
{
int die_1, die_2;
for (int counter = 1; counter <= 3600; counter++)
{
die_1 = 1 + rand() % 6;
die_2 = 1 + rand() % 6;
total_Array[((die_1 + die_2)-2)]++;
}
}

void calculation_of_expect()
{

}

void calculation_of_actual()
{
for (int counter = 0; counter < 11; counter++)
{
actual_Array[counter] = (total_Array[counter] / 3600.0) * 100.0;
}
}

void rollDice_Operation()
{
calculation_of_total();
calculation_of_expect();
calculation_of_actual();
}

void print_Result()
{
show_heading_line();
for (int counter = 0; counter <= 10; counter++)
{
show_Data_Results_line((counter+2), total_Array[counter], 1, actual_Array[counter]);
}
}

void Q2_main()
{
cout << setprecision(3) << fixed;
initialization_of_Array();
cout << "Please enter the seed : ";
cin >> seed;
srand(seed);
rollDice_Operation();
print_Result();
}

Кто-нибудь может дать мне несколько советов, чтобы иметь дело с «ожидаемой» колонкой?


Спасибо за внимание

0

Решение

Ожидаемый столбец — это просто математическая вероятность результата:

+-------+-------------------------+--------------------+-------------+
| Value |      Possibilities      | # of possibilities | Probability |
+-------+-------------------------+--------------------+-------------+
|     2 | 1+1                     |                  1 | 1/36=2.78%  |
|     3 | 1+2,2+1                 |                  2 | 2/36=5.56%  |
|     4 | 1+2,2+2,2+1             |                  3 | 3/36=8.33%  |
|     5 | 1+4,2+3,3+2,4+1         |                  4 | 4/36=11.11% |
|     6 | 1+5,2+4,3+3,4+2,5+1     |                  5 | 5/36=13.89% |
|     7 | 1+6,2+5,3+4,4+3,5+2,6+1 |                  6 | 6/36=16.67% |
|     8 | 2+6,3+5,4+4,5+3,6+2     |                  5 | 5/36=13.89% |
|     9 | 3+6,4+5,5+4,6+3         |                  4 | 4/36=11.11% |
|    10 | 4+6,5+5,6+4             |                  3 | 3/36=8.33%  |
|    11 | 5+6,6+5                 |                  2 | 2/36=5.56%  |
|    12 | 6+6                     |                  1 | 1/36=2.78%  |
+-------+-------------------------+--------------------+-------------+

Вам не нужно вычислять его, просто распечатайте, чтобы сравнить с фактическими статистическими результатами:

double expected_Array[11] = {1/.36, 2/.36, 3/.36, 4/.36, 5/.36, 6/.36, 5/.36, 4/.36, 3/.36, 2/.36, 1/.36};
...
show_Data_Results_line((counter+2), total_Array[counter], expected_Array[counter], actual_Array[counter]);
3

Другие решения

Ожидаемый столбец должен содержать вероятность того, что бросок игральных костей заканчивается данной суммой. Это более точная математическая теория вероятностей, но вы также можете грубо заставить ее вычислить. Вычислите все возможные броски костей и для каждого броска увеличивайте количество бросков, которые приводят к данной сумме. После этого ожидаемое значение для каждой суммы равно количеству способов, которым вы можете получить эту сумму, деленную на общее количество возможных бросков (сколько разных бросков возможно с двумя кубиками?).

1

      1   2   3   4   5   6
+---+---+---+---+---+---+
1 | 2 | 3 | 4 | 5 | 6 | 7 |
+---+---+---+---+---+---+
2 | 3 | 4 | 5 | 6 | 7 | 8 |
+---+---+---+---+---+---+
3 | 4 | 5 | 6 | 7 | 8 | 9 |
+---+---+---+---+---+---+
4 | 5 | 6 | 7 | 8 | 9 | 10|
+---+---+---+---+---+---+
5 | 6 | 7 | 8 | 9 | 10| 11|
+---+---+---+---+---+---+
6 | 7 | 8 | 9 | 10| 11| 12|
+---+---+---+---+---+---+

так что рассчитать ожидаемую вероятность 9
это количество комбинаций в таблице выше
это становится 9 делится на общее количество 36, то есть 4/36

1
По вопросам рекламы [email protected]