1 ! OUTRAN -- RANDOM TEST GENERATOR OUTPUT PROGRAM 2 ! M.L. COLE 1-11-74 D.E.C. 3 RANDOMIZE 4 ON ERROR GOTO 7000 5 !L$,F$ ARE NAME VARIABLES N$=QUESTION FILE !N1$=STUDENT NAME FILE Q%=#QUESTIONS IN FILE !Q1%=#LINES IN QUESTION Q2%=#QUESTIONS ON TEST 6 !T=THRESHOLD VALUE Q$(11)=QUES. AND ANS. LINES !C$(50)=DECISION TABLE X$=NAME OF TEST 7 !N%=# OF TESTS TO PRINT C%=QUESTION COUNTER !G%=READS GARBAGE # 8 !B%=LAST QUESTION PRINTED I%=CURRENT Q LOOKED AT 10 ! PRINT DIRECTIONS 20 PRINT"*** RANDOM TEST GENERATOR OUTPUT PROGRAM ***" 25 PRINT 30 PRINT 'IF YOU WANT TESTS GENERATED FOR EACH STUDENT BY NAME, USE' 40 PRINT 'THE PROGRAM NAMES.BAS OR PIP TO CREATE A STUDENT NAME FILE.' 50 PRINT 'OTHERWISE THE TESTS AND ANSWER KEYS ARE ASSOCIATED BY NUMBER.' 60 PRINT 100 ! GET DATA INPUT 110 INPUT "NAME OF QUESTION FILE (CR='QUES.FIL')";N$ 120 IF N$='' THEN N$='QUES.FIL' 125 OPEN N$ FOR INPUT AS FILE 1% 130 INPUT #1%, Q%: PRINT"THERE ARE ";Q%;" QUESTIONS IN THE FILE ";N$ 135 CLOSE 1% 140 INPUT"HOW MANY QUESTIONS DO YOU WANT ON EACH TEST";Q2% 150 IF Q2%>=Q%THENPRINT"TESTS SHOULD CONTAIN A SUBSET OF TOTAL QUESTIONS"ELSEGOTO 170 160 GOTO 140 170 Q=Q%: Q2=Q2%: T=(Q-Q2)/Q !THRESHOLD VALUE TO REJECT QUESTION 175 DIM Q$(11) !UP TO 10 LINES OF QUESTION, 1 LINE OF ANSWER 180 DIM C$(50%) !DECISION TABLE FOR 5000 ROUTINE, LIMITS !PROGRAM TO TOTAL OF 50 QUESTIONS. CHANGE !IF NECESSARY TO REFLECT MAX. NO. OF QUESTIONS. 190 INPUT "NAME OF TEST (CR=NO NAME)";X$ 300 ! NAME FILE? 310 PRINT"DO YOU WISH TO USE A STUDENT NAME FILE"; 320 INPUT"(Y OR N)";A$ 330 IF A$='N' GOTO 400 340 IF A$<>'Y' GOTO 320 350 INPUT"NAME OF STUDENT FILE (CR=NAME.FIL)";N1$ 360 IF N1$='' THEN N1$='NAME.FIL' 370 OPEN N1$ FOR INPUT AS FILE 2% 400 ! OPEN OUTPUT FILE FOR TESTS AND ANSWER KEY 410 OPEN "ANS.KEY" FOR OUTPUT AS FILE 4% 420 OPEN "TESTS.FIL" FOR OUTPUT AS FILE 3% 430 IF A$='Y' GOTO 1000 !HANDLE STUDENT NAME FILE 440 IF A$='N' GOTO 2000 !NO STUDENT NAME FILE 1000 ! DO OUTPUT ACCORDING TO STUDENT NAME FILE 1010 INPUT #2%,L$,F$: IF L$='END' GOTO 6000 !DONE 1020 PRINT #4%: PRINT #4%,'ANSWER KEY FOR TEST 'X$;TAB(60%);DATE$(0%) 1030 PRINT #3%, CHR$(12%): S%=S%+1% 1040 PRINT #4%, F$;" ";L$: PRINT #3%, F$;" ";L$;TAB(40%);X$;TAB(60%);DATE$(0%) 1045 OPEN N$ FOR INPUT AS FILE 1%: INPUT #1%, G% 1050 GOSUB 5000 !GET QUESTIONS 1060 GOSUB 5500 !PRINT Q'S AND A'S 1065 CLOSE 1% 1070 GOTO 1010 2000 ! NO STUDENT NAME FILE 2010 INPUT"HOW MANY TESTS WOULD YOU LIKE GENERATED";N% 2020 PRINT #4%: PRINT#4%,'ANSWER KEY FOR TEST ';X$;TAB(60%);DATE$(0%) 2025 FOR L%=1% TO N% 2027 OPEN N$ FOR INPUT AS FILE 1%: INPUT #1%, G% 2030 PRINT #3%, CHR$(12%) 2040 PRINT #3%, "TEST NUMBER ";L%;TAB(40%);X$;TAB(60%);DATE$(0) 2050 PRINT #4%, "ANSWERS TO TEST NUMBER ";L% 2060 GOSUB 5000 !GET QUESTIONS 2070 GOSUB 5500 !PRINT Q'S AND A'S 2075 CLOSE 1% 2080 NEXT L% 2090 GOTO 6000 !DONE 5000 ! ROUTINE TO CHOOSE Q2% QUESTIONS OUT OF Q% QUESTIONS 5001 ! IF TOTAL # OF Q'S > 50, INCREASE SIZE OF LINE 180 ARRAY 5010 C%=0% !INITIALIZE QUESTION COUNTER 5020 C$(I%)='' FOR I%=1% TO Q% !SCRUB DECISION TABLE 5030 FOR I%=1% TO Q% 5040 IF C$(I%)='Y' THEN GOTO 5080 5050 IF RND>=T THEN C$(I%)='Y' ELSE C$(I%)='N' 5060 IF C$(I%)='Y' THEN C%=C%+1% 5070 IF C%=Q2% THEN GOTO 5100 5080 NEXT I% 5090 IF C%Q2% THEN RETURN 5545 ! FIND RIGHT QUESTION 5547 IF B%+1%