ChipMaster's bwBASIC This also includes history going back to v2.10. *WARN* some binary files might have been corrupted by CRLF.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

119 lines
2.9 KiB

  1. 10 PRINT "PROGRAM FILE 138: COUPON COLLECTOR TEST OF RND FUNCTION."
  2. 20 PRINT " ANSI STANDARD 8.4"
  3. 30 PRINT
  4. 40 PRINT "SECTION 138.1: COUPON COLLECTOR TEST OF RND FUNCTION."
  5. 50 PRINT
  6. 60 PRINT "THIS PROGRAM TESTS HOW MANY RANDOM NUMBERS MUST BE GENERATED"
  7. 70 PRINT "(UP TO A MAXIMUM) TO GET AT LEAST ONE OF EACH TYPE. A TYPE IS"
  8. 80 PRINT "DETERMINED BY WHICH FRACTION OF THE 0 - 1 SEGMENT THE VALUE"
  9. 90 PRINT "OF THE NUMBER FALLS WITHIN. CHI-SQUARE IS COMPUTED AND"
  10. 110 PRINT "DISPLAYED TO SEE WHETHER IT IS COMPATIBLE WITH THE"
  11. 120 PRINT "EXPECTED DISTRIBUTION FOR UNIFORM RANDOM NUMBERS."
  12. 130 PRINT
  13. 140 PRINT "***** THIS TEST IS INFORMATIVE ONLY *****"
  14. 150 PRINT
  15. 160 PRINT " BEGIN TEST"
  16. 170 DIM C(30)
  17. 180 DIM O(20)
  18. 190 REM SET #TRIALS
  19. 200 LET N=2000
  20. 210 REM SET #TYPES
  21. 220 LET D=5
  22. 230 REM SET MAX LENGTH
  23. 240 LET T=25
  24. 250 REM C-ARRAY COUNTS HOW MANY SEARCHES OF EACH LENGTH WERE DONE
  25. 260 FOR I=1 TO T
  26. 270 LET C(I)=0
  27. 280 NEXT I
  28. 290 FOR N1=1 TO N
  29. 300 REM R COUNTS LENGTH OF SEARCH
  30. 310 LET R=0
  31. 320 REM Q COUNTS NUMBER OF DISTINCT TYPES SO FAR
  32. 330 LET Q=0
  33. 340 REM O-ARRAY KEEPS TRACK OF WHICH TYPES HAVE BEEN HIT SO FAR
  34. 350 FOR I=0 TO D-1
  35. 360 LET O(I)=0
  36. 370 NEXT I
  37. 380 LET R=R+1
  38. 390 LET X=INT(RND*D)
  39. 400 IF O(X)=1 THEN 380
  40. 410 LET O(X)=1
  41. 420 LET Q=Q+1
  42. 430 IF Q<D THEN 380
  43. 440 IF R<=T THEN 460
  44. 450 LET R=T
  45. 460 LET C(R)=C(R)+1
  46. 470 NEXT N1
  47. 480 LET D1=1
  48. 490 FOR I=1 TO D
  49. 500 LET D1=D1*I
  50. 510 NEXT I
  51. 520 LET S=0
  52. 530 PRINT
  53. 540 PRINT "SEARCH LENGTH","ACTUAL COUNT","EXPECTED COUNT"
  54. 550 PRINT
  55. 560 FOR I=D TO T-1
  56. 570 LET K9=I-1
  57. 580 LET R9=D-1
  58. 590 REM GET STIRLING NUMBER FOR K9,R9 - RETURN RESULT IN A9
  59. 600 GOSUB 890
  60. 610 REM P=PROB OF SEARCH LENGTH I
  61. 620 LET P=(D1*A9)/(D^I)
  62. 630 PRINT I,C(I),N*P
  63. 640 LET S=S+(C(I)*C(I))/P
  64. 650 NEXT I
  65. 660 LET K9=T-1
  66. 670 LET R9=D
  67. 680 REM STIRLING NUMBER
  68. 690 GOSUB 890
  69. 700 LET P=1-((D1*A9)/(D^(T-1)))
  70. 710 PRINT ">=";T,C(T),N*P
  71. 720 LET S=S+(C(T)*C(T))/P
  72. 730 LET V=(S/N) - N
  73. 735 PRINT
  74. 740 PRINT "FOR 20 D.F., SHOULD HAVE 10.8508 <= CHI-SQ <= 31.4104"
  75. 750 PRINT "(5% TAIL AT EACH END.)"
  76. 760 PRINT
  77. 770 PRINT "ACTUAL CHI-SQ = ";V
  78. 780 PRINT
  79. 790 IF V<10.8508 THEN 830
  80. 800 IF V>31.4104 THEN 830
  81. 810 PRINT "*** INFORMATIVE TEST PASSED ***"
  82. 820 GOTO 840
  83. 830 PRINT "*** INFORMATIVE TEST FAILED ***"
  84. 840 PRINT
  85. 850 PRINT " END TEST"
  86. 860 PRINT
  87. 870 PRINT "END PROGRAM 138"
  88. 880 STOP
  89. 890 REM GIVEN K9,R9, COMPUTE STIRLING NUMBER AND RETURN IN A9
  90. 900 IF R9>K9 THEN 950
  91. 910 IF R9=K9 THEN 970
  92. 920 IF R9=1 THEN 970
  93. 930 IF R9=0 THEN 950
  94. 940 GOTO 990
  95. 950 LET A9=0
  96. 960 GOTO 1170
  97. 970 LET A9=1
  98. 980 GOTO 1170
  99. 990 DIM A(20)
  100. 1000 REM THIS LIMITS RANGE OF ROUTINE TO R9<=20 (K9 UNCONSTRAINED)
  101. 1010 FOR I8=1 TO 20
  102. 1020 LET A(I8)=1
  103. 1030 NEXT I8
  104. 1040 LET K8=K9-R9
  105. 1050 FOR K1=3 TO K9
  106. 1060 LET M1=R9
  107. 1070 IF R9<K1-1 THEN 1090
  108. 1080 LET M1=K1-1
  109. 1090 LET M2=2
  110. 1100 IF 2>K1-K8 THEN 1120
  111. 1110 LET M2=K1-K8
  112. 1120 FOR R1=M1 TO M2 STEP -1
  113. 1130 LET A(R1)=R1*A(R1)+A(R1-1)
  114. 1140 NEXT R1
  115. 1150 NEXT K1
  116. 1160 LET A9=A(R9)
  117. 1170 RETURN
  118. 1180 END