RANDOMIZE OPTION BASE 0 DIM s(50),FL(100) FUNCTION RND100(q) ! 0〜99を乱数で出す。ただし1度出た数はださない。 DO LET X=INT(RND*100) LOOP UNTIL FL(X)=0 LET FL(X)=1 LET RND100=X END FUNCTION PRINT PRINT " 0〜99までの異なる整数が小さい順に並んでいます。" PRINT "あなたの好きな数があるかどうか、あるならば何番目にあるか?" PRINT FOR i=1 TO 50 LET s(i)=RND100(i) NEXT i CALL sort(s,50) INPUT PROMPT "0から99までの数を1つ選んでください。 ":Q PRINT FOR i=1 TO 10 PRINT USING " ## ## ## ## ## ## ## ## ## ##":s(i); NEXT i PRINT FOR i=11 TO 20 PRINT USING " ## ## ## ## ## ## ## ## ## ##":s(i); NEXT i PRINT FOR i=21 TO 30 PRINT USING " ## ## ## ## ## ## ## ## ## ##":s(i); NEXT i PRINT FOR i=31 TO 40 PRINT USING " ## ## ## ## ## ## ## ## ## ##":s(i); NEXT i PRINT FOR i=41 TO 50 PRINT USING " ## ## ## ## ## ## ## ## ## ##":s(i); NEXT i PRINT PRINT CALL TWOTAN(s,50,Q) PRINT PRINT " ちなみに" PRINT " "; CALL TWOTAN(s,50,49) PRINT " "; CALL TWOTAN(s,50,50) PRINT PRINT END EXTERNAL SUB TWOTAN(a(),n,K) !二分探索 LET L=1 !下限 LET H=n !上限 DO UNTIL L>H LET C=INT((H+L)/2) !中央 IF K=a(C) THEN PRINT K;"は小さいほうから";C;"番目にあります。" EXIT SUB END IF IF a(C)a(j) THEN LET t=a(j) LET a(j)=a(i) LET a(i)=t END IF NEXT j NEXT i END SUB