60 lines
1.8 KiB
Text
60 lines
1.8 KiB
Text
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
|