100 REM Statistics/Basic 110 DECLARE EXTERNAL SUB BasicStats 120 CALL BasicStats(100) 130 PRINT 140 CALL BasicStats(1000) 150 PRINT 160 CALL BasicStats(10000) 170 PRINT 180 END 190 REM *** 200 EXTERNAL SUB BasicStats (SampleSize) 210 IF SampleSize < 1 THEN EXIT SUB 220 DIM R(1 TO 10000) 230 LET MaxSampleSize = UBOUND(R) 240 IF SampleSize > MaxSampleSize THEN 250 PRINT "Sample size too large" 260 STOP 270 END IF 280 RANDOMIZE 290 DIM H(0 TO 9) ! all zero by default 300 LET Sum = 0 310 LET HSum = 0 320 REM Gener!ate 'SampleSize' random numbers in the interval [0, 1) 330 REM calculate their Sum 340 REM and in which box they will fall when drawing the histogram 350 FOR I = 1 TO SampleSize 360 LET R(I) = RND 370 LET Sum = Sum + R(I) 380 LET H(INT(R(I) * 10)) = H(INT(R(I) * 10)) + 1 390 NEXT I 400 FOR I = 0 TO 9 410 LET HSum = HSum + H(I) 420 NEXT I 430 REM adjust one of the H() values if necessary to ensure HSum = SampleSize 440 LET Adj = SampleSize - HSum 450 IF Adj <> 0 THEN 460 FOR I = 0 TO 9 470 LET H(I) = H(I) + Adj 480 IF H(I) >= 0 THEN EXIT FOR 490 LET H(I) = H(I) - Adj 500 NEXT I 510 END IF 520 LET Mean = Sum / SampleSize 530 LET Sum = 0 540 REM Now calculate their standard deviation 550 FOR I = 1 TO SampleSize 560 LET Sum = Sum + (R(I) - Mean) ^ 2 570 NEXT I 580 LET Sd = SQR(Sum / SampleSize) 590 REM Draw a histogram of the data with interval 0.1 600 REM If sample size > 500 then normalize histogram to 500 610 LET Scale = 1 620 IF SampleSize > 500 THEN LET Scale = 500 / SampleSize 630 PRINT "Sample size"; SampleSize 640 PRINT USING " Mean #.###### SD #.######": Mean, Sd 650 FOR I = 0 TO 9 660 PRINT USING " #.## : ##### ": I / 10, H(I); 670 PRINT REPEAT$("*", ROUND(H(I) * Scale, 0)) 680 NEXT I 690 END SUB