生活の中のシミュレーション

◆40人学級で、風邪と思われる人が5人も休んだ。
でも、個々の要因でランダムに休みが発生した場合でも
5人休むって結構あるんだろうか?

年間の出席日数が、180日として、平均1年間に12日休むとして
どうなんだろう?

シミュレーション結果:8.02%  ・・・ 少ないが意外にあり得る。

■シミュレーション結果
休暇人数

0 人 ******* 12.61 日 7.01%
1 人 ****************** 32.69 日 18.16%
2 人 ************************* 45.01 日 25.01%
3 人 ********************** 39.82 日   22.12%
4 人 ************** 25.76 日 14.31%
5 人 ******** 14.44 日 8.02%
6 人 *** 6.41 日 3.56%
7 人 * 2.29 日 1.27%
8 人 .7 日 0.39%
9 人 .21 日 0.12%
10 人 .05 日 0.03%



十進BASIC

!−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
RANDOMIZE
OPTION BASE 0

INPUT PROMPT "年間出席日数=":WORK_DAY

DIM NINSUU(WORK_DAY) ,DOSU_BUNPU(30),妊OSU_BUNPU(30)

INPUT PROMPT "クラスの人数=":ALL_NINZUU
INPUT PROMPT "1人の平均的な休暇日数(年間)=":AVGQK

PRINT ""
LET SMT_N=100 !シミュレート回数
FOR L=1 TO SMT_N
CALL INIT !初期化
CALL SMILT !シミュレーション
CALL 農SUM !度数を積算
NEXT L
CALL PRT !印刷

SUB PRT
PRINT "休暇人数"
FOR I=0 TO 30
PRINT I;"人";
PRINT REPEAT$("*",INT(妊OSU_BUNPU(I)/SMT_N/WORK_DAY*100)),妊OSU_BUNPU(I)/SMT_N;"日 ";
PRINT USING "---%.##":妊OSU_BUNPU(I)/SMT_N/WORK_DAY*100;
PRINT "%"
NEXT I
END SUB



SUB 農SUM
FOR I=0 TO 30
LET 妊OSU_BUNPU(I)=妊OSU_BUNPU(I)+ DOSU_BUNPU(I)
NEXT I
END SUB


SUB SMILT
! 乱数を発生させて 労働日に何人休むかをシミュレーションする。
FOR I=1 TO AVGQK*ALL_NINZUU
LET RD=MOD(INT(RND*1000000),WORK_DAY)+1
LET NINSUU(RD)=NINSUU(RD)+1
NEXT I


FOR J=0 TO 30
FOR I=1 TO WORK_DAY
IF NINSUU(I)=J THEN LET DOSU_BUNPU(J)=DOSU_BUNPU(J)+1
NEXT I
! PRINT J;"人休み";DOSU_BUNPU(J)
NEXT J
END SUB


SUB INIT !配列初期化
FOR I=1 TO WORK_DAY
LET NINSUU(I) =0
NEXT I
FOR I=0 TO 30
LET DOSU_BUNPU(I)=0
NEXT I
END SUB

END





Math TOP