0

他の変数の出力がプログラムの最後の確率変数と同じ配置領域にある場合でも、変数「確率」は常にゼロになります。配置に関係している気がしますが、初期化の問題かもしれません。確率がゼロになることはありません。

#include <iostream>
#include <cstdlib>  
#include <ctime>
#include <iomanip>

using namespace std;

int main() {

    int die1, 
        die2, 
        sum,
        turns,
        win=0,
        loss=0;
    double probability=0;
    int thepoint, rolls;
        srand(time(0));


    cout<<"How many turns would you like? ";
    cin>>turns;

    for(int i=0; i<turns; i++)
    {
        sum=0;

        die1=rand()%6;
        die2=rand()%6;
        sum=die1+die2;

        //cout<<"\nFirst die is a  "<<die1<<endl;
        //cout<<"Second die is a "<<die2<<endl;
        //cout<<"\n\n>>>Turn "<<i<<": You rolled "<<sum;


        switch (sum){
            case 2: case 3: case 12:
                //cout<<"You have lost this turn with 2 3 or 12!"<<endl;
                loss++;
                break;
            case 7: 
                //cout<<"\nYea! You won this turn with a 7 on the first roll!"<<endl;

                win++;

                break;      
            case 11:
                //cout<<"You won this turn ith 11!"<<endl;
                win++;
                break;
            default:
                //cout<<"\nRolling again!"<<endl;
                thepoint=sum;
                rolls=1;
                sum=0;
                //cout<<"\nRoll 1 - Your point is "<<thepoint<<endl;
                while (sum != thepoint)
                {
                    //srand(time(0));
                    die1=rand()%6;
                    die2=rand()%6;
                    sum=die1+die2;
                    rolls++;
                    //cout<<"Roll "<<rolls<<". You rolled "<<sum<<endl;
                    if (sum == thepoint)
                    {
                        //cout<<"You won this turn in the while with a point match!"<<endl;
                        win++;
                        break;
                    }
                    if (sum == 7)
                    {
                        loss++;
                        //cout<<"You lost this turn in the while with a 7"<<endl;
                        break;
                    }
                }
        }

    }

    probability = win/turns;

    cout<<"No. of Turns: "<<turns<<"\n";
    cout<<"No. of Wins: "<<win<<"\n";
    cout<<"No. of Loses: "<<loss;

    cout.precision(6);
    cout<<"\nExperimental probability of winning: "<<fixed<<probability;

    cin.get();
    cin.get();

    return 0;
}
4

2 に答える 2

5

変数winturnsはデータ型intでありprobability、実数であるため(つまり、ここでは2倍)double、除算を実行する前に、それらの少なくとも1つをキャストする必要があります。

probability = (double)win/turns;

winところで、両方をキャストしても害はありturnsません。必要な場合でも、実際には必要ありません。

于 2013-03-03T07:14:10.973 に答える
3

このmod 6操作% 6により、0..5の範囲の数値が得られます(6で割った余り)。あなたはそれに追加する必要があります1

変化する

die1=rand()%6;
die2=rand()%6;

die1=1+rand()%6;
die2=1+rand()%6;

更新:これはバグですが、ゼロを出力する確率の根本的な原因ではありません。実際の問題は@Tuxdudeによって指摘されました。

于 2013-03-03T07:15:49.307 に答える