2016-11-27 6 views
0

私は2つのダイスをロールし、ベクトルの合計を追跡するこのコードを作成しようとしています。私は次のコードを思いついたが、12を超える数字を入力すると範囲エラーが出てくる。誰かが私に間違っていることを教えてもらえますか?2つのダイスをローリングしてベクトルで合計を保存する

#include "std_lib_facilities.h" 

void simulate(vector<int>&, size_t); 
void size_int(const vector<int>, size_t); 
void print_vector(const vector<int>&, size_t); 

int main() 
{ 
    size_t n; 
    cout << "Enter the amount of rolls: "; 
    cin >> n; 
    vector<int> v(12); 
    for(int i=0;i<v.size();i++) 
    { 
     v[i] = 0; 
    } 
    simulate(v, n); 
    print_vector(v, n); 
} 

void simulate(vector<int>& sum, size_t n) 
{ 
    int dice_1, dice_2; 
    cout << "Rolling the dice " << n << " times produces:\n"; 
    srand(time(NULL)); 
    size_t i; 

for (i = 0; i < n; ++i){ 
    dice_1 = 1+(rand() % 6); 
    dice_2 = 1+(rand() % 6); 

    sum[dice_1+dice_2]++; 
    } 
} 

void print_vector(const vector<int>& v, size_t n) 
{ 
    size_t i; 
    double x = 1.0*n; 
    cout << "Roll\tFrequency\tProbablity\n"; 
    for(i = 1;i<v.size();++i) 
    { 
     cout << i+1 << "\t" << v[i] << "\t\t" << v[i]/x << endl; 
    } 
} 
+0

からあなたは12に、ベクトルの大きさをハードコード: 'ベクトル V(12);' –

+0

は、あなたが入力した番号のベクトルのサイズを変更し、それがスタック上に12 –

+0

質問に制限されています。オーバーフローには、[最小、完全、および検証可能な例]が必要です(http://stackoverflow.com/help/mcve)。ここのコードは最小限ではありません。 – MrEricSir

答えて

0
sum[dice_1+dice_2]++; 

dice1+dice2 2と12までの間の値となります。 sumの要素は0〜11までです。これを行うには、sum〜のサイズが必要です。

0

あなたのベクトルが0 から始まりとして、あなたは

sum[dice_1+dice_2-1]++; 

、印刷中に値を保存する必要があります。

開始

for(i=0....) 
関連する問題