1

基本的に、乱数を生成してサイコロのペアをシミュレートするプログラムを作成する必要があります。このプログラムは、複数のファイルで構成する必要があります。メイン関数は 1 つのファイルに、他の関数は 2 番目のソース ファイルに、それらのプロトタイプはヘッダー ファイルに配置する必要があります。最初に、1 から 6 までのランダムな値を返す短い関数を作成して、1 つの 6 面サイコロの転がりをシミュレートします。次に、この関数を 2 回呼び出して、1 対のサイコロを振ったふりをする関数を作成します。私のプログラムは、何回ロールを作成する必要があるかをユーザーに尋ねることから始まります。次に、値 2、3、4、5、6、7、8、9、10、11、12 (各数字はサイコロのペアの合計) が配列で発生します。

2    3    4    5    6    7    8    9   10    11    12
*    *    *    *    *    *    *    *    *     *     *
*    *    *    *    *    *    *    *    *     *     *
*    *    *    *    *    *    *    *    *     *     *
*    *    *    *    *    *    *    *    *     *     *
     *    *    *    *    *    *    *    *     *     

次に、乱数発生器の動作を確認するために、丸めた平均値を計算する関数を作成します。これを理想的な平均 7 と比較してください。また、プログラムによって作成された各ロールのカウント、ロールの総数が与えられた上記の周波数に基づく理想的なカウント、およびこれらの値の差を示す小さな表を印刷してください。列。これはこれまでのところ私の不完全なコードです:「コンパイラビジュアルスタジオ2010」

int rolling(){    //Function that returns a random value between 1 and 6
rand(unsigned(time(NULL)));
int dice = 1 + (rand() %6);
return dice;
}
int roll_dice(int num1,int num2){ //it calls 'rolling function' twice 
int result1,result2;
num1 = rolling();
num2 = rolling();
result1 = num1;
result2 = num2;
return result1,result2;
}
int main(void){
int times,i,sum,n1,n2;
int c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11;//counters for each sum
printf("Please enter how many times you want to roll the dice.\n")
scanf_s("%i",&times);

カウンターを使用して各合計をカウントし、その数 (カウント) を配列に格納するふりをします。ループ (for) といくつかの条件文 (if) が必要なのはわかっていますが、主な問題は、roll_dice から値を取得して n1 と n2 に格納することです。

4

3 に答える 3

5

あなたは使用することができますC++11 を使用できる場合はライブラリ。

ページから:

uniform_int_distribution<int> one_to_six {1,6};  // distribution that maps to the ints 1..6
default_random_engine re {};                     // the default engine

int x = one_to_six(re); // x becomes a value in [1:6]

急速に変化する時間値でシードを冷やします。

std::chrono::time_point<std::chrono::system_clock>
  now {std::chrono::system_clock::now()};
std::chrono::system_clock::duration
  epoch {now.time_since_epoch()};
typedef std::chrono::duration<unsigned long long int, std::milli> ms;

std::default_random_engine re {std::chrono::duration_cast<ms>(epoch).count()};
于 2012-09-18T01:50:41.210 に答える
0
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int RollDice()
{
    return rand() % 6 + 1;
}

int main()
{
    int times, i, cont;
    int count[11];

    srand(time(NULL));

    printf("Please enter how many times you want to roll the dice: ");
    scanf("%i", &times);

    if (times <= 0)
    {
         fprintf(stderr, "Invalid value.\n");
         return -1;
    }

    for (i = 0; i < 11; i++)
    {
        count[i] = 0;
    }

    for (i = 0; i < times; i++)
    {
        int result = RollDice() + RollDice();
        if (result < 2 || result > 12)
        {
            fprintf(stderr, "something goes wrong\n");
            return -1;
        }

        ++count[result - 2];
    }

    for (i = 2; i <= 12; i++)
    {
        printf("%3d", i);
    }

    printf("\n");

    while (1)
    {
        cont = 0;

        for (i = 0; i < 11; i++)
        {
            printf("  %c", (count[i] > 0) ? '*' : ' ');
            if (count[i] > 0)
            {
                if (--count[i] > 0)
                {
                    cont = 1;
                }
            }
        }

        printf("\n");

        if (!cont)
        {
            break;
        }
    }

    return 0;
}
于 2012-09-18T03:52:33.400 に答える
0

サイコロを振って合計を返す関数を作成します。

int Roll(int numberOfTimes)
{
     int temp = numberOfTimes;
     int sum = 0;
     int dice1 = 0;
     int dice2 = 0;

     for (int i = 0; < temp; i++)
     {
         dice1 = 1 + (rand() % 6);
         dice2 = 1 + (rand() % 6);
         sum = dice1 + dice2;  
     }

     return sum;
}

私はこれをテストしていませんが、役立つかもしれません。

于 2012-09-18T01:45:25.333 に答える