RANDOMIZE OPTION BASE 0 FUNCTION RND100(q) ! 0〜99を乱数で出す。ただし1度出た数はださない。 DIM FL(100) DO LET X=INT(RND*100) LOOP UNTIL FL(X)=0 LET FL(X)=1 LET RND100=X END FUNCTION SUB SORT(a(,),m) FOR i=1 TO m-1 FOR j=i+1 TO m IF a(2,i)>a(2,j) THEN LET t=a(1,j) LET a(1,j)=a(1,i) LET a(1,i)=t LET s=a(2,j) LET a(2,j)=a(2,i) LET a(2,i)=s END IF NEXT j NEXT i END SUB PRINT PRINT "< 最初に選んだカードは、小さい方から数えて何番目? >" PRINT PRINT " 0〜99のカードが1枚ずつあります。" INPUT PROMPT "何枚のカードを選びますか? ":N PRINT PRINT "この実験を1000回行ってみます。" PRINT DIM Q(2,N),W(2,N) LET SS=0 FOR k=1 TO 1000 FOR i=1 TO N LET Q(1,i)=i LET Q(2,i)=RND100(i) NEXT i MAT W=Q CALL SORT(Q,N) LET C=1 FOR i=1 TO N IF Q(1,i)=1 THEN EXIT FOR LET C=C+1 NEXT i IF k=1 THEN PRINT "1回目の実験結果:" PRINT " 並び替え前 並び替え後" FOR i=1 TO N PRINT " ( "; PRINT USING "##":W(1,i); PRINT " , "; PRINT USING "##":W(2,i); PRINT " ) ( "; PRINT USING "##":Q(1,i); PRINT " , "; PRINT USING "##":Q(2,i); PRINT " )" NEXT i PRINT PRINT " 最初に選んだカードは";W(2,1);"で、" PRINT " 小さい方から数えて";C;"番目の数でした。" PRINT END IF LET SS=SS+C MAT Q=ZER MAT W=ZER MAT FL=ZER NEXT k PRINT PRINT "平均すると";SS/1000;"回目でした。" PRINT "それを";N;"で割ると";ROUND(SS/(1000*N),3);"です。" PRINT END