Программа для имитации броска двух игральных костей

В следующем - весь вопрос.

Напишите программу, имитирующую бросание двух игральных костей. Программа должна использовать rand, чтобы бросить первый кубик, и должна снова использовать rand, чтобы бросить второй кубик. Затем следует рассчитать сумму двух значений. [Примечание: на каждом кубике может отображаться целое число от 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();
}

Кто-нибудь может дать мне несколько советов по работе с «ожидаемым» столбцом?


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


person Casper    schedule 15.11.2013    source источник
comment
Это вопрос программирования или у вас проблемы с пониманием проблемы?   -  person HAL    schedule 15.11.2013
comment
expected result - это не результат вычисления, это математический результат, специфичный для задачи (сумма двух игральных костей). Вам не нужно ничего вычислять для этого столбца.   -  person zakinster    schedule 15.11.2013
comment
Думаю, у меня возникли проблемы с пониманием проблемы ...   -  person Casper    schedule 15.11.2013
comment
как всегда, когда кто-то использует rand в c ++: rand считается вредным   -  person Mgetz    schedule 15.11.2013


Ответы (3)


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

+-------+-------------------------+--------------------+-------------+
| 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]);
person zakinster    schedule 15.11.2013

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

person Ivaylo Strandjev    schedule 15.11.2013

      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.

person AndersK    schedule 15.11.2013