RANDOMIZE PRINT PRINT "サイコロを何回も振ったときに、" PRINT "過去に出た目と同じ目が出るまで振る回数の期待値を求める" PRINT "シミュレーション。1000回試行します。" PRINT LET a1=0 LET a2=1/6 LET a3=5/6*2/6 LET a4=5/6*4/6*3/6 LET a5=5/6*4/6*3/6*4/6 LET a6=5/6*4/6*3/6*2/6*5/6 LET a7=5/6*4/6*3/6*2/6*1/6 PRINT PRINT "############# 理 論 値 ###############" PRINT PRINT " 1回目: 0.00 %" PRINT " 2回目: ";ROUND(a2,4)*100;"%" PRINT " 3回目: ";ROUND(a3,4)*100;"%" PRINT " 4回目: ";ROUND(a4,4)*100;"%" PRINT " 5回目: ";ROUND(a5,4)*100;"%" PRINT " 6回目: ";ROUND(a6,4)*100;"%" PRINT " 7回目: ";ROUND(a7,4)*100;"%" PRINT " 計 :";(a1+a2+a3+a4+a5+a6+a7)*100;"%" PRINT PRINT " 期待値:";ROUND(1*a1+2*a2+3*a3+4*a4+5*a5+6*a6+7*a7,2) PRINT PRINT "########################################" PRINT DIM Q(7) MAT Q=ZER LET CC=0 PRINT "一例:"; FOR i=1 TO 1000 LET C=0 FOR j=1 TO 7 LET K=RND6(i) IF i=1 THEN PRINT " ";K; END IF LET C=C+1 IF Q(K)=1 THEN EXIT FOR LET Q(K)=1 NEXT j IF i=1 THEN PRINT PRINT PRINT " ";C;"番目にダブりました。" PRINT PRINT END IF LET CC=CC+C MAT Q=ZER NEXT i PRINT "シミュレーションの結果、平均";ROUND(CC/1000,2);"回目にダブりました。" PRINT END EXTERNAL FUNCTION RND6(q) ! 1〜6を乱数で出す。 OPTION BASE 0 DIM FL(6) DO LET X=INT(RND*6)+1 LOOP UNTIL FL(X)=0 LET FL(X)=1 LET RND6=X END FUNCTION