DECLARE SUB SetUpGraph () '============================================================================ ' G.H. George 1992 JAN 06 ' COINTOSS.BAS ' - simulates tossing a coin hundreds of times and plots the evolution ' of the proportion of heads observed. '============================================================================ ' DEFINT A-Z DIM Proportion AS SINGLE RANDOMIZE TIMER CALL SetUpGraph DO Coins = 0: Heads = 0 FOR Plot = 1 TO 300 ' <-- Plot after every 5 coin flips. FOR Flip = 1 TO 5 Heads = Heads + INT(2 * RND) ' <-- 50% chance of incrementing Hds. NEXT Flip Coins = Coins + 5 Proportion = Heads / Coins LINE -(2 * Plot, 500 - 800 * Proportion)' <-- Plot line to new point. FOR Delay = 1 TO 1000: NEXT Delay ' <-- Loop to slow plot down. NEXT Plot LOCATE 1, 25: PRINT "Relative frequency of heads in n coin tosses" LOCATE 21, 25: PRINT "Press "; CHR$(34); "X"; CHR$(34); PRINT " to exit, any other key to continue:" ' <-- Hold graph on screen. DO Flag$ = INKEY$ LOOP WHILE Flag$ = "" IF UCASE$(Flag$) = "X" THEN EXIT DO ' <-- Exit when user so indicates. CLS ' <-- else clear graph for next run. CALL SetUpGraph LOOP SCREEN 0: WIDTH 80 END DEFSNG A-Z SUB SetUpGraph '============================================================================ ' Initialise graphic display. '============================================================================ DEFINT T SCREEN 2 LOCATE 3, 2: PRINT "0.6" ' <-- Axis value labels. LOCATE 13, 2: PRINT "0.5" LOCATE 23, 2: PRINT "0.4" LOCATE 14, 25: PRINT "500" LOCATE 14, 49: PRINT "1000" FOR Tick = 40 TO 600 STEP 40 LINE (Tick, 98)-(Tick, 102) ' <-- Tick marks every 100 coin flips. NEXT Tick FOR Tick = 68 TO 92 STEP 8 LINE (0, Tick)-(639, Tick), , , &H1818 ' <-- Dotted lines every 0.01 of p NEXT Tick FOR Tick = 108 TO 132 STEP 8 LINE (0, Tick)-(639, Tick), , , &H1818 ' <-- Dotted lines every 0.01 of p NEXT Tick LINE (40, 20)-(639, 20), , , &HF000 ' <-- Dashed line every 0.05 of p . LINE (0, 60)-(639, 60), , , &HF000 LINE (0, 140)-(639, 140), , , &HF000 LINE (40, 180)-(639, 180), , , &HF000 LINE (40, 100)-(639, 100), , , &HCCCC ' <-- Horizontal axis at p = 0.5 LINE (0, 0)-(0, 199) ' <-- Vertical axis at n = 0 PSET (0, 100) ' <-- Reset graphics cursor at (0,0.5). LOCATE 14, 78: PRINT " n " ' <-- Horizontal axis label. END SUB