Cで確率
N88-BASICで確率をCで書いてみました。
CとBASICのLISTです。
/* ... */はコメントですので参考にして下さい。
出来るだけBASICに寄せて書いています。
CプログラムはCut&pasteして下さい。
Cコンパイラー環境は各自で準備して下さい。
/*
---------------------------------------------------------------------
コインを表が出るまで投げた回数nが奇数か偶数かを当てる確率
---------------------------------------------------------------------
*/
#include <stdio.h> /* printfを使用するため */
#include <stdlib.h> /* rand,srandを使用するため */
#include <time.h> /* clockを使用するため */
static /* このファイル内部のみで使用できる関数の定義 */
double rnd(void)/* 引数(パラメータ)なし、関数の値double(実数) */
{ /* 0以上1未満の乱数を返す */
return ((double)rand()) / (((double)RAND_MAX)+1.0);
}
/* main関数から実行される */
void main(void)
{
int odd, even, max, i, n; /* 変数の定義 */
srand(clock()); /* 乱数の種 */
odd = 0; /* 奇数回で終了したゲーム数 */
even = 0; /* 偶数回で終了したゲーム数 */
max = 1; /* 投げた回数の最大値 */
for (i = 1; i <= 100000; i++) /* ゲーム回数 */
{
n = 0; /* 投げた回数 */
repeat:
n++; /* 投げた回数(n = n + 1;) */
if (rnd() < 0.5) goto repeat; /* 裏ならもう一度 */
if (n % 2) odd++; else even++;
if (n > max) max = n; /* 投げた最大数 */
if ((i % 10000) == 0)
{
printf("奇 = %8d , ", odd );
printf("偶 = %8d , ", even);
printf("奇/偶 = %8.5f\n", odd / (double)even);
}
}
printf("max %d\n", max);
getchar(); /* キー入力待ち */
}
coin001.bas
100 '---------------------------------------------------------------------
110 ' コインを表が出るまで投げた回数nが奇数か偶数かを当てる確率
120 '---------------------------------------------------------------------
130 RANDOMIZE VAL(RIGHT$(TIME$,2)) '--- 乱数の種
140 ODD = 0 '--- 奇数回で終了したゲーム数
150 EVEN = 0 '--- 偶数回で終了したゲーム数
160 MAX = 1 '--- 投げた回数の最大値
170 FOR I=1 TO 10000 '--- ゲーム回数
180 N = 0 '--- 投げた回数
190 *REPEAT
200 N = N + 1 '--- 投げた回数
210 IF RND(1) < 0.5 THEN *REPEAT '--- 裏ならもう一度
220 IF N MOD 2 THEN ODD = ODD + 1 ELSE EVEN = EVEN + 1
230 IF N > MAX THEN MAX = N '--- 投げた最大数
240 IF I MOD 1000 THEN *NOPRINT
250 PRINT USING "奇 =######## , "; ODD;
260 PRINT USING "偶 =######## , "; EVEN;
270 PRINT USING "奇/偶 =##.#####"; ODD / EVEN
280 *NOPRINT
290 NEXT
300 PRINT "max"; MAX
NL-BASICは下記リンクよりダウンロードできます。
NL-BASIC(N88-BASIC互換?)ホームページへのリンク
Readme.txtを読んで、遊んで見て下さい。