rand関数を使ったシミュレーション
Posted: 2017年5月03日(水) 23:48
箱の中に赤玉2、緑玉5、青玉3個がある。箱の中から球を取り出して色を記録した後、箱に戻す。この操作をN会繰り返して行い、各色の出現割合0.2,0.5,0.3をrand関数を用いてシミュレーションで確認せよ。
という問題です。
#include<stdio.h>
#include<stdlib.h>
int kyu(void);
int main(void)
{
int i, n, u, v, w, res;
printf("球を取り出す回数:");
scanf("%d",&n);
u = v = w = 0;
for(i = 0;i < n;i++){
res = kyu();
if(0 == res) u++;
else if(1 == res) v++;
else w++;
}
printf("赤:%d,緑:%d,青:%d\n",(double)u/n,(double)v/n,(double)w/n);
return 0;
}
int kyu(void)
{
float a;
a = (double)rand() / RAND_MAX;
if(a < 0.2) return 0;
else if(a < 0.5) return 1;
else return 2;
}
このようにプログラムを作ったのですが、-などとんでもく大きかったり小さかったりする数字が出力されます。
どこが違うのでしょうか?
一応コインの表裏の確立をシミュレーションするプログラムを参考にしました。
という問題です。
#include<stdio.h>
#include<stdlib.h>
int kyu(void);
int main(void)
{
int i, n, u, v, w, res;
printf("球を取り出す回数:");
scanf("%d",&n);
u = v = w = 0;
for(i = 0;i < n;i++){
res = kyu();
if(0 == res) u++;
else if(1 == res) v++;
else w++;
}
printf("赤:%d,緑:%d,青:%d\n",(double)u/n,(double)v/n,(double)w/n);
return 0;
}
int kyu(void)
{
float a;
a = (double)rand() / RAND_MAX;
if(a < 0.2) return 0;
else if(a < 0.5) return 1;
else return 2;
}
このようにプログラムを作ったのですが、-などとんでもく大きかったり小さかったりする数字が出力されます。
どこが違うのでしょうか?
一応コインの表裏の確立をシミュレーションするプログラムを参考にしました。