FUNCTION RND100(q) ! 1〜100の整数をランダムに出す。ただし1度出た数はださない。 DIM FL(100) DO LET X=INT(RND*100)+1 LOOP UNTIL FL(X)=0 LET FL(X)=1 LET RND100=X END FUNCTION RANDOMIZE PRINT PRINT "0 〜 100 までの整数が1個ずつあります。これら101個の整数の平均値は次のようになります。" PRINT DIM F(101) FOR i=1 TO 101 LET F(i)=i-1 NEXT i PRINT " ";AVER(F,101);" ";((99+0)*100/2+100)/101 PRINT PRINT "それはともあれ、" PRINT PRINT " "; DIM T(20) FOR i=1 TO 20 LET T(i)=RND100(i) NEXT i CALL sort(T,20) FOR i=1 TO 20 PRINT T(i); NEXT i PRINT PRINT PRINT "これら20個の数の平均値は";AVER(T,20);"です。" PRINT PRINT PRINT "1番大きい数は、1番小さな数に50以上の数を分け与えます。" PRINT "2番目に大きな数は、2番目に小さな数に50以上の数を分け与えます。" PRINT "3番目に大きな数は、3番目に小さな数に50以上の数を分け与えます。" PRINT "このようにしていって、最後に小さい順に並べると、次のようになります。" PRINT PRINT " "; FOR i=1 TO 10 LET T(i)=T(i)+(T(21-i)-50) NEXT i FOR i=11 TO 20 LET T(i)=50 NEXT i CALL sort(T,20) FOR i=1 TO 20 PRINT T(i); NEXT i PRINT PRINT PRINT PRINT "1番大きい数は、1番小さな数に1を分け与えます。" PRINT "そして、小さい順に並べえます。" PRINT LET T(1)=T(1)+1 LET T(20)=T(20)-1 CALL sort(T,20) PRINT " "; FOR i=1 TO 20 PRINT T(i); NEXT i PRINT PRINT PRINT PRINT "再び、1番大きい数は、1番小さな数に1を分け与えます。" PRINT "そして再び、小さい順に並べえます。" PRINT "これを繰り返していくと、結局次のようになります。" PRINT PRINT " "; FOR i=1 TO 10 DO LET T(1)=T(1)+1 LET T(20)=T(20)-1 CALL sort(T,20) IF T(20)-T(1)<2 THEN EXIT DO LOOP NEXT i FOR i=1 TO 20 PRINT T(i); NEXT i PRINT PRINT LET C=1 FOR i=1 TO 19 IF T(i)=T(i+1) THEN LET C=C+1 ELSE EXIT FOR END IF NEXT i PRINT "これら20個の数の平均値は";T(1)+(20-C)/20;"です。" PRINT END EXTERNAL FUNCTION AVER(a(),N) !平均 LET s=a(1) FOR i=2 TO N LET s=s+a(i) NEXT i LET AVER=s/N END FUNCTION EXTERNAL SUB sort(a(),N) !昇順に並べ替える FOR i=1 TO N-1 FOR j=i+1 TO N IF a(i)>a(j) THEN swap a(i),a(j) NEXT j NEXT i END SUB