硬貨をひたすらぶちまける実験が辛すぎた
こんにちは、じゃた。です。つい最近実験で、データの統計処理行ったのですが、あまりにも辛すぎてプログラムで自動化というもののすごさをひしひしと感じました…。ということで、実験の自動化のために書いたプログラムについて話していこうと思います。
実験について
実験の自動化の為にプログラムを書いたっていいましたが、実際に私がプログラムでやっちゃったかどうかはご想像にお任せします。まあ条件提示されて、その通りにきちんとやらなかったら駄目ですからね。ちゃんとやりましたよ私は!
ということで、今回行った実験内容について簡単に説明していきます。まずは、以下のものを準備します。
1. 10円玉12枚
2. 適当な箱(大きすぎないもの)
そうしたら、10円玉をすべて箱の中に入れ、しゃかしゃか振った後に全部出します。表が出ている枚数を数えます。記録を行ったら、また10円玉を箱に入れて操作を繰り返します。最終的な記録としては、
– 表の枚数0枚:a回
– 表の枚数1枚:b回
…
– 表の枚数12枚:c回
みたいな感じですね。試行回数100回という指定があったので、100回操作を繰り返します。硬貨12枚のデータが得られたら、2枚、6枚についても同様に100回操作を繰り返してデータを取得します。まあ、大変ですよね。私は缶の箱に入れてやったんですが、騒音がすごいという苦情を家族からぶん投げられました。私のせいじゃないです。
試行回数は全部で300回で終わりかと思いきや、プラスで硬貨2枚、6枚、12枚についてさらに10回ずつ操作を行うことになりました…。総試行回数330回。もう二度とやりたくないです。
プログラム
10円玉の表、裏が出る確率がどちらも絶対に1/2であるとしたら、プログラムで簡単にできますよね。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define C 12 //硬貨の枚数
#define N 100 //試行回数
int main(void){
int num = 0;
int ans[C+1];
for(int i = 0; i < C+1; i++){
ans[i] = 0;
}
srand((unsigned int)time(NULL));
for(int i = 0; i < N; i++){
for(int j = 0; j < C; j++){
if((rand() % 2) == 1) num++;
}
ans[num]++;
num = 0;
}
printf("---結果を表示します---\n");
for(int i = 0; i < C+1; i++){
printf("%d枚:%d\n",i,ans[i]);
}
printf("---硬貨枚数%d枚, 試行回数%d回---\n",C,N);
return 0;
}
ランダムな数字の取得方法については、私が1年生の時に先輩から教えてもらったものを使用しました。硬貨の枚数、試行回数はマクロ変数を使用しているので、簡単に変更することが可能です。
おわりに
本当に、プログラムで簡単にできるのに、なぜ何時間も十円玉をしゃかしゃかしなくてはいけなかったんだ…。
最後まで見てくれてありがとうございます!See You Next Time!
コメント入力