DECLARE SUB SETUP (FLAG4%, FLAG10%, MAXV%, SCRFL$, MAXQ%) DECLARE SUB NCSLOAD (FLAG1%, FLAG3%, FLAG4%, FLAG5%, FLAG9%, FLAG10%, IVER%, MAXVER%, N6%, KSUM%, SCRFL$, RAWFL$) DECLARE SUB SUBIT (NQST%, SCRFL$, RAWFL$) DECLARE SUB YESNO (JS%) REM PROGRAM SCOR REM REM VERSION 2.1 January 16, 1996 REM REM THIS VERSION IS WRITTEN IN QUICKBASIC, VERSION 4.0 REM REM (c) COPYRIGHT 1996 BY OLIVER SEELY, JR. REM DEPARTMENT OF CHEMISTRY REM CALIFORNIA STATE UNIVERSITY DOMINGUEZ HILLS REM CARSON, CA 90747 REM REM ALL RIGHTS RESERVED REM REM REM TAPE1 -- UPDATED FILE PREODUCED BY FRONT END PROCESSING SUBROUTINE REM TAPE2 -- INTERMEDIATE RAW DATA FILE AT FIRST RANDOM ACCESS. REM LATER IT IS A FACSIMILE OF TAPE9, DATA SORTED ON STUDENT NAMES. REM TAPE3 -- LOCAL COPY OF PERMANENT RAW DATA FILE REM REM TAPE4 -- SCORE FILE (SCRFL$), THAT IS, FACSIMILE OF TEST FILE WITH REM BANK ID, ITEM ID, ADDRESS IN ITEM BANK AND NUMBER OF QUESTIONS. REM REM #5 -- OUTPUT, IF DIRECTED TO A FILE OR PRINTER REM TAPE6 -- RAW DATA FILE (RAWFL$) EXACTLY AS IT COMES FROM ANSWER SHEETS. REM THIS IS THE RAW INPUT FILE. REM REM TAPE7 -- NAMES OF STUDENTS AND THEIR RECORD NUMBERS ON TAPE2 -- UNSORTED REM TAPE8 -- NAMES OF STUDENTS AND THEIR RECORD NUMBERS ON TAPE2 -- SORTED REM REM TAPE9 -- RAW DATA FILE (RAWFL$) SORTED BY STUDENT NAMES. REM REM TAPE10 -- FILE HOLDING COMPRESSED BANK, ID,LOC,VERS,SEQ,NQ REM THERE SEEMS TO BE A CONTRADICTION IN NCSLOAD REM TAPE10 THERE IS USED FOR DETERMINING A VARIABLE ISQ%(I) REM THAT OCCURS AFTER NEW STATEMENT 301 REM TAPE11 -- PERMANENT FILE HOLDING STATISTICS OF BANK REM (OLD KFILE, NEW .STT FILE) REM #11 IS ALSO USED AS FILE # OF TEST ITEM BANK CURRENTLY BEING INTERROGATED REM TAPE13 -- A COPY OF WHAT IS ON TAPE9, BUT ONLY VERSION 0 AND WITHOUT HEADER LINE. REM TAPE14 -- SUMMATION OF RESPOONSE PROFILE FOR EACH QUESTION ON TEST. REM TAPE15 -- SOCRATES TEST ITEM BANKS, USED AS NEEDED FOR COMPARING REM ANSWER ON ANSWER SHEET REM REM FLAG1 -- SIGNALS STARTING SCORING CYCLE AGAIN WITH NEW UPDATE REM FILE. (1 TO CONTINUE , 0 TO END PROGRAM) REM FLAG2 -- SIGNALS PROCESSING BLANK AND ERRONEOUS VERSION SHEETS REM FLAG3 -- SIGNALS THAT =0 OUTPUT FILE HAS NOT BEEN OPENED. REM =1 OUTPUT FILE HAS BEEN OPENED. REM FLAG4 -- SIGNALS ACCUMULATION OF SOCRATES STATISTICS REM FLAG5 -- SIGNALS EXTERNAL OR INTERNAL KEY (0=EXT, 1=INT) REM REM FLAG6 -- USED ONLY IN SUBROUTINE SUBIT REM =0 IF SUMMING CURRENT ITEM FOR CUMULATIVE ITEM STATISTICS REM =1 IF NEXT ITEM IN .STT FILE IS ALSO ON TEST AND MUST BE REM SAVED FOR NEXT SUM. REM REM FLAG9 -- 0 FOR ITEM ANALYSIS OF ONE VERISON REM 1 FOR ITEM ANALYSIS FOR CONSOLIDATED FILE REM REM FLAG10 -- 0 IF INTERNAL KEY IS INDICATED, AND INITIAL SET-UP OF KEY REM FILES, TEST FILES AND ANSWER SEQUENCE HAS NOT YET BEEN DONE. REM 1 IF INITIAL SET-UP HAS BEEN DONE REM REM COMMON SHARED STATEMENTS REM REM REM DIM SHARED STATEMENTS REM DIM SHARED KEYSYM(201) AS INTEGER, NANS(201) AS STRING * 1, ZERR AS INTEGER DIM SHARED SUMM(201) AS SINGLE, NLOW(201, 7) AS INTEGER DIM SHARED NHIGH(201, 7) AS INTEGER DIM SHARED NCNT(201) AS INTEGER, NCH1(4) AS INTEGER DIM SHARED EXCRIT(500) AS SINGLE, IDEN(500) AS STRING, SCORE(500) DIM SHARED NOM1(500), IOUT AS INTEGER DIM SHARED TDIFF(201), TDISC(201) DIM SHARED PANS(6), ALFA(5) AS STRING * 1, NBTEMP(10) AS STRING DIM SHARED ANAME(500) AS STRING DIM SHARED NAMKEY(2) AS STRING * 10, INTERM(4) AS STRING, N2(4) AS INTEGER DIM SHARED LANS(10) AS STRING, ITYPE AS STRING, RANS(6) AS STRING * 1 DIM SHARED DSK$(11), MAXIT%, HST AS STRING * 5 DIM SHARED NARRA AS STRING, NARRB AS STRING REM REM DIM LOCAL STATEMENTS REM DIM AON AS INTEGER DIM NQST%, NQST1%, NQST2%, NQST5% DIM NDBR AS INTEGER, NEXBR AS INTEGER DIM NFRBR AS INTEGER, NC AS INTEGER, NRSP AS INTEGER DIM NNM AS STRING, ALPHA AS STRING * 1, ID AS STRING * 10, EXCR AS STRING * 10 DIM JNTERM AS STRING, KNTERM AS STRING, JJANS AS STRING DIM NR1(500) AS INTEGER, NW1(500) AS INTEGER, ONSUB AS SINGLE REM REM ======================FORMAT STATEMENTS========================= REM F3$ = "\ \\ \########. ########. ###### ###### ###### ########." F8$ = " ### ### ## ##" F9$ = CHR$(10) + CHR$(10) F77$ = " ### ### ### ###" F103$ = "Identification ID# SCORE Z SCORE RIGHT WRONG OMIT " F104$ = "Frequency Distribution of External Criterion" + CHR$(10) F110$ = "Mean of Scores=#####.# S.D. of Scores=#####.#" F111$ = CHR$(12) + "Frequency Distribution of Scores" + CHR$(10) F156$ = "Item A B C D E Omit Item" F158$ = "Test Reliability K/R(21)=##.###" + CHR$(10) + CHR$(10) F159$ = "Test Reliability K/R(20)=##.###" + CHR$(10) + CHR$(10) F245$ = STRING$(23, 32) + "Item Analysis Output Data" + CHR$(10) F247$ = STRING$(26, 32) + "Tabulation of Scores" + CHR$(10) F300$ = "\ \\ \" F601$ = " ### ! ### ### ### ### ### ### ### ### ### ### ### ### ##.## ##.## ###.## ###" F604$ = " Item ### Omitted" F713$ = " Key U L U L U L U L U L U L DIF PHI PBIS" CLS '************************************* ' 'Module to read the file PROTOCOL 'File PROTOCOL contains path information and printer protocol information ' '************************************* ON ERROR GOTO 291 OPEN "I", #1, "\MICROSOC\PROTOCOL" FOR N = 1 TO 11 INPUT #1, A$ INDX = VAL(LEFT$(A$, 2)) DSK$(INDX) = RIGHT$(A$, LEN(A$) - 3) NEXT N LINE INPUT #1, A$ IFORM% = VAL(RIGHT$(A$, LEN(A$) - 3)) IFORM% = IFORM% * 2 LINE INPUT #1, A$ CR$ = CHR$(VAL(RIGHT$(A$, LEN(A$) - 3))) LINE INPUT #1, A$ LF$ = CHR$(VAL(RIGHT$(A$, LEN(A$) - 3))) LINE INPUT #1, A$ FOR M = 6 TO LEN(A$) IF ASC(MID$(A$, M, 1)) = 44 THEN 294 NEXT M GOTO 293 294 NC = VAL(MID$(A$, 5, M - 5)) IIS = M + 1 HLF$ = "" FOR N = 1 TO NC IF N = NC THEN 295 FOR M = IIS TO LEN(A$) IF ASC(MID$(A$, M, 1)) = 44 THEN 296 NEXT M FOR M = IIS TO LEN(A$) IF ASC(MID$(A$, M, 1)) = 44 THEN 296 NEXT M GOTO 293 296 HLF$ = HLF$ + CHR$(VAL(MID$(A$, IIS, M - IIS))) IIS = M + 1 NEXT N 295 HLF$ = HLF$ + CHR$(VAL(RIGHT$(A$, LEN(A$) - IIS + 1))) LINE INPUT #1, A$ FF$ = CHR$(VAL(RIGHT$(A$, LEN(A$) - 3))) CLOSE GOTO 281 291 RESUME 293 293 CLOSE CHAIN "START" '************************************** ' 'End PROTOCOL module ' '************************************** REM REM THE FOLLOWING STATEMENT ESTABLISHES THE PATHS FOR TESTING PURPOSES. REM IT MUST BE CHANGED INTO THE MODULE WHICH READS THE FILE 'PROTOCOL' REM AND GETS THE PATH FROM THAT FILE. TO PUT THE PROGRAM BACK INTO THE REM FORM NECESSARY FOR PRODUCTION RUNS, SIMPLY ADD REM INDICATEOR NEXT TO REM THE FOLLOWING STATEMENTS UP TO THE REM STATEMENT REM END TEST MODULE REM REM DSK$(2) = "\MICROSOC\TESTS\" REM DSK$(3) = "\MICROSOC\SOURCE\" REM END TEST MODULE REM DEFINE OUTPUT FILE REM 281 IOUT = 5 REM OPEN "R", #2, DSK$(3) + "TAPE2", 90 FIELD #2, 90 AS JNTERM 102 PRINT "Your raw student answer data must be loaded in a format" PRINT "compatible with this program. This version requires that" PRINT "each record be up to 240 characters in length in an ASCII file," PRINT "without any carriage returns or line feeds in between." PRINT "If a word processor is used to extract garbage at the beginning" PRINT "or end of the file, make sure that it is stored as an ASCII file," PRINT "using a font size small enough so as not to allow any extra carriage" PRINT "returns or line feeds to be inserted in the middle of a record" PRINT "during the storage process." PRINT " " PRINT " " PRINT "Type the name of the raw data file which is to be evaluated." INPUT "Type ENTER if you don't know the name: "; RAWFL$ IF RAWFL$ <> "" THEN 52 PRINT "Do you wish to exit the program?" CALL YESNO(JS%) IF JS% = 1 THEN STOP IF JS% = 2 THEN 102 IF JS% = 3 THEN STOP 52 OPEN "I", #6, DSK$(3) + RAWFL$ OPEN "O", #7, DSK$(3) + "TAPE7" PRINT "Reading raw data file" REM REM ************************************************************* REM REM NCS 7000 BATCH PREPARATION BEGINS HERE REM REM ************************************************************* REM REM PUT IN READ/WRITE REM 383 NNM = "NONAME" NNS% = 0 NREC = 0 REM REM INITIALIZE NARRA,INTERM REM NARRA = "" FOR N = 1 TO 4 INTERM(N) = "" NEXT N REM REM READ 1ST WHOLE RECORD (KEY RECORD) REM IVER% = 0 3209 LINE INPUT #6, NARRA IF LEN(NARRA) > 240 THEN 104 FOR N = LEN(NARRA) TO 1 STEP -1 IF MID$(NARRA, N, 1) <> " " THEN 103 ELSE 105 105 NEXT N 103 NARRA = LEFT$(NARRA, N) + STRING$(240 - N, " ") GOTO 68 104 PRINT "Length of raw data record is found to be "; LEN(NARRA) PRINT "This program requires that the record lengths be" PRINT "240 characters or shorter. Please investigate and" PRINT "correct before continuing." CLOSE STOP 68 REM REM REM THIS IS KEY RECORD. ENCODE "AAA" FOR SORTING. REM 330 INTERM(1) = LEFT$(NARRA, 9) + "AAA" + MID$(NARRA, 38, 6) + STRING$(11, 32) INTERM(1) = INTERM(1) + MID$(NARRA, 30, 17) + " " INTERM(1) = INTERM(1) + MID$(NARRA, 47, 40) + "1Q" FOR N = 2 TO 4 INTERM(N) = LEFT$(INTERM(1), 48) + MID$(NARRA, 47 + (N - 1) * 40, 40) + RIGHT$(STR$(N), 1) + "Q" NEXT N FOR N = 1 TO 4 NREC = NREC + 1 LSET JNTERM = INTERM(N) PUT #2, NREC NEXT N PRINT #7, MID$(INTERM(1), 10, 20); STR$(NREC - 3) REM REM INITIALIZE NARRA REM 321 NARRA = "" FOR N = 1 TO 4 INTERM(N) = "" NEXT N ON ERROR GOTO 387 LINE INPUT #6, NARRA IF LEN(NARRA) > 240 THEN 104 FOR N = LEN(NARRA) TO 1 STEP -1 IF MID$(NARRA, N, 1) <> " " THEN 108 ELSE 107 107 NEXT N 108 NARRA = LEFT$(NARRA, N) + STRING$(240 - N, " ") IF LEN(NARRA) <> 240 THEN STOP IF MID$(NARRA, 10, 8) <> STRING$(8, 32) THEN 76 NNS% = NNS% + 1 REM REM ENCODE IDENTIFICATION INFORMATION AND FIRST 40 ANSWERS REM FOR STUDENT RECORD WITH NONAMEXX IN PLACE OF STUDENT NAME REM NARRA = LEFT$(NARRA, 9) + NNM + RIGHT$(STR$(NNS%), LEN(STR$(NNS%)) - 1) + MID$(NARRA, 15 + LEN(NNS%), 32 - LEN(NNS%)) + MID$(NARRA, 47, 40) + "1Q" REM REM ENCODE IDENTIFICATION INFORMATION AND FIRST 40 ANSWERS IN REM FIRST LINE OF STUDENT RECORD. THIS ENCODING ASSUMES THAT REM STUDENT NAME APPEARS IN NAME FIELD ON ANSWER SHEET. REM 76 IF MID$(NARRA, 10, 1) <> " " THEN 376 MID$(NARRA, 10) = "Z" 376 INTERM(1) = LEFT$(NARRA, 46) + " " + MID$(NARRA, 47, 40) + "1Q" FOR N = 2 TO 4 INTERM(N) = LEFT$(INTERM(1), 48) + MID$(NARRA, 47 + (N - 1) * 40, 40) + RIGHT$(STR$(N), 1) + "Q" NEXT N FOR N = 1 TO 4 LSET JNTERM = INTERM(N) NREC = NREC + 1 PUT #2, NREC NEXT N PRINT #7, MID$(INTERM(1), 10, 20); STR$(NREC - 3) GOTO 321 387 RESUME 85 85 CLOSE #6, #7, #8 PRINT "Sorting students alphabetically" SPATH$ = "SORT /+1 <" + DSK$(3) + "TAPE7 >" + DSK$(3) + "TAPE8" SHELL SPATH$ OPEN "I", #8, DSK$(3) + "TAPE8" OPEN "O", #9, DSK$(3) + "TAPE9" PRINT "Copying sorted file" ON ERROR GOTO 79 78 LINE INPUT #8, IDUM$ NREC = VAL(RIGHT$(IDUM$, LEN(IDUM$) - 20)) FOR N = 1 TO 4 GET #2, NREC + N - 1 JDUM$ = JNTERM PRINT #9, JDUM$ NEXT N GOTO 78 79 RESUME 82 82 CLOSE DPATH$ = "DEL " + DSK$(3) + "TAPE7" SHELL DPATH$ DPATH$ = "DEL " + DSK$(3) + "TAPE8" SHELL DPATH$ DPATH$ = "DEL " + DSK$(3) + "TAPE2" SHELL DPATH$ RPATH$ = "REN " + DSK$(3) + "TAPE9 TAPE2" SHELL RPATH$ 378 CALL NCSLOAD(FLAG1%, FLAG3%, FLAG4%, FLAG5%, FLAG9%, FLAG10%, IVER%, MAXVER%, N6%, KSUM%, SCRFL$, RAWFL$) REM REM************************************************************** REM REM NCS7000 PREPARATION ENDS HERE REM REM************************************************************** REM 75 OPEN "I", #1, DSK$(3) + "TAPE1" NCH = 0 REM REM READ FIRST LINE OF TAPE1 GIVING THE NUMBER OF ANSWERS TO BE FOUND REM ON EACH DATA LINE REM LINE INPUT #1, IDUM$ FOR K = 1 TO 4 NCH1(K) = VAL(MID$(IDUM$, (K - 1) * 3 + 1, 3)) NEXT K REM REM READ SECOND LINE OF TAPE1 GIVING TOTAL NUMBER OF QUESTIONS ON TEST (NQST%), REM TOTAL NUMBER OF STUDENTS (ONSUB) ON THIS SCORING PASS, REM THE THREE MYSTERIOUS ZEROS (NDBR, NEXBR, NFRBR), REM THE TOTAL NUMBER OF RECORDS PER STUDENT CASE (NC, FROM 1 TO 4), REM THE TOTAL NUMBER OF DISTRACTORS PER QUESTION -- AT THIS STAGE, THIS REM VERSION IS FIXED TO 5 DISTRACTORS -- THIS MUST BE MODIFIED SOON SO REM THAT A SCORE ADJUSTED FOR GUESSING CAN BE ACCURATELY ESTABLISHED. REM LINE INPUT #1, IDUM$ NQST% = VAL(LEFT$(IDUM$, 4)) ONSUB = VAL(MID$(IDUM$, 6, 4)) NDBR = VAL(MID$(IDUM$, 10, 1)) NEXBR = VAL(MID$(IDUM$, 11, 1)) NFRBR = VAL(MID$(IDUM$, 12, 1)) NC = VAL(MID$(IDUM$, 13, 1)) NRSP = VAL(MID$(IDUM$, 14, 1)) M = 1 FOR K = 1 TO NC NCH = NCH + NCH1(K) ON K GOTO 810, 820, 820, 820, 99 REM REM READ FIRST KEY LINE REM 810 LINE INPUT #1, IDUM$ NAMKEY(1) = LEFT$(IDUM$, 10) NAMKEY(2) = MID$(IDUM$, 11, 10) ID = MID$(IDUM$, 21, 10) EXCR = MID$(IDUM$, 31, 2) FOR I = M TO NCH KEYSYM(I) = VAL(MID$(IDUM$, 33 + I - M + 1, 1)) NEXT I GOTO 850 REM REM READ SUBSEQUENT KEY LINES REM 820 LINE INPUT #1, IDUM$ FOR I = M TO NCH KEYSYM(I) = VAL(MID$(IDUM$, 33 + I - M + 1, 1)) NEXT I 850 M = NCH + 1 6 NEXT K M = 1 SUM = 0 NCH = 0 SUMSQ = 0 SUMEC = 0 SMSQEC = 0 NQST1% = NQST% + 1 FOR I = 1 TO NQST% SUMM(I) = 0 FOR J = 1 TO 6 NLOW(I, J) = 0 NHIGH(I, J) = 0 NEXT J NEXT I FOR I = 1 TO NQST1% NCNT(I) = 0 NEXT I AON = 0 17 AON = AON + 1 FOR K = 1 TO NC NCH = NCH + NCH1(K) ON K GOTO 880, 890, 890, 890, 99 REM REM READ FIRST LINE OF STUDENT DATA REM 880 LINE INPUT #1, IDUM$ ANAME(AON) = LEFT$(IDUM$, 20) IDEN(AON) = MID$(IDUM$, 21, 9) EXCRIT(AON) = VAL(MID$(IDUM$, 31, 2)) FOR J = M TO NCH NANS(J) = MID$(IDUM$, 33 + J - M + 1, 1) IF NANS(J) = " " OR NANS(J) = "*" THEN NANS(J) = "0" NEXT J GOTO 1446 REM REM READ SUBSEQUENT LINES OF STUDENT DATA REM 890 LINE INPUT #1, IDUM$ FOR J = M TO NCH NANS(J) = MID$(IDUM$, 33 + J - M + 1, 1) IF NANS(J) = " " OR NANS(J) = "*" THEN NANS(J) = "0" NEXT J 1446 M = NCH + 1 NEXT K NCH = 0 K = 0 IF IDEN(AON) = " 0 " THEN 99 NR = 0 NW = 0 NOM = 0 REM ---------------------------------------- REM <<<<<<<<<<<<<<<<<<<<<<<<<<<< SCORING SECTION >>>>>>>>>>>>>>>>>>>>> REM ---------------------------------------- FOR M = 1 TO NQST% IF KEYSYM(M) = 0 THEN 20 IF NANS(M) > "0" THEN 11 ELSE 63 63 IF NANS(M) < "0" THEN 99 10 NOM = NOM + 1 GOTO 20 11 IF VAL(NANS(M)) = KEYSYM(M) THEN 13 12 NW = NW + 1 GOTO 20 13 NR = NR + 1 20 NEXT M M = 1 NR1(AON) = NR NW1(AON) = NW NOM1(AON) = NOM SCORE(AON) = NR IF NFRBR = 0 THEN 19 18 SCORE(AON) = SCORE(AON) - NW / (NRSP - 1) 19 SUM = SUM + SCORE(AON) SUMSQ = SUMSQ + SCORE(AON) * SCORE(AON) REM REM THE FOLLOWING STATEMENT USED TO READ + 1.5 IN ORDER TO MAKE REM THE INTEGER CONVERSION IN FORTRAN WORK RIGHT REM IT IS A TERRIBLE WAY TO DO IT, BUT IT HAS BEEN LEFT IN BECAUSE REM THE LOGIC IS CONNECTED WITH EXCRIT() (EXTERNAL CRITERIA) WHICH REM HAVE NEVER BEEN USED. THE EXTERNAL CRITERIA THING SHOULD EITHER REM BE INSTALLED, OR THROWN OUT AND RELATED STATEMENTS GREATLY REM SIMPLIFIED. REM NSCORE% = SCORE(AON) + 1 IF NSCORE% > 0 THEN 42 36 NSCORE% = 1 42 NCNT(NSCORE%) = NCNT(NSCORE%) + 1 IF NEXBR = 0 THEN 22 21 SUMEC = SUMEC + EXCRIT(AON) SMSQEC = SMSQEC + EXCRIT(AON) * EXCRIT(AON) 22 IF AON - ONSUB > 0 THEN 99 ELSE 30 30 IF AON - ONSUB < 0 THEN 17 XBAR = SUM / ONSUB SD = SQR((ONSUB * SUMSQ - SUM * SUM) / (ONSUB * ONSUB)) IF NEXBR = 0 THEN 24 23 XBAR2 = SUMEC / ONSUB SD2 = SQR((ONSUB * SMSQEC - SUMEC * SUMEC) / (ONSUB * ONSUB)) GOTO 611 24 XBAR2 = XBAR SD2 = SD 611 PRINT #IOUT, F9$ PRINT #IOUT, USING F300$; DATE$; TIME$ PRINT #IOUT, F9$ PRINT #IOUT, F247$ PRINT #IOUT, F103$ REM ************************************************************ REM <<<<<<<<<<<<<<<< Z SCORE COMPUTATION >>>>>>>>>>>>>>>>>>>>>>> REM ************************************************************ AON = 0 40 AON = AON + 1 TSCORE = ((SCORE(AON) - XBAR) / SD) * 10! + 50! IF NEXBR = 0 THEN 131 PRINT #IOUT, USING F3$; ANAME(AON); IDEN(AON); SCORE(AON); TSCORE; NR1(AON); NW1(AON); NOM1(AON); EXCRIT(AON) GOTO 132 131 PRINT #IOUT, USING F3$; ANAME(AON); IDEN(AON); SCORE(AON); TSCORE; NR1(AON); NW1(AON); NOM1(AON) 132 IF AON - ONSUB > 0 THEN 99 IF AON - ONSUB < 0 THEN 40 60 PRINT #IOUT, F9$ PRINT #IOUT, F111$ QST = NQST1% NQST5% = NQST1% QST2 = QST / 2! IF INT(QST2) <> QST2 THEN 650 NQST1% = INT(QST2) II = 1 GOTO 651 650 NQST1% = INT(QST2) + 1 651 NQST2% = INT(QST2) FOR I = 1 TO NQST1% NXX% = I - 1 NXXX% = I + NQST2% - II IF NXXX% - NQST5% >= 0 THEN 653 652 I6 = NXXX% + 1 PRINT #IOUT, USING F77$; NXX%; NCNT(I); NXXX%; NCNT(I6) GOTO 38 653 PRINT #IOUT, USING F77$; NXX%; NCNT(I) 38 NEXT I PRINT #IOUT, F9$ PRINT #IOUT, USING F110$; XBAR; SD PRINT #IOUT, F9$ IF NEXBR = 0 THEN 34 PRINT #IOUT, F104$ FOR I = 1 TO 100 NCNT(I) = 0 NEXT I AON = 0 144 AON = AON + 1 NSCORE% = EXCRIT(AON) + 1! NCNT(NSCORE%) = NCNT(NSCORE%) + 1 IF AON - ONSUB > 0 THEN 99 IF AON - ONSUB < 0 THEN 144 REM REM THE FOLLOWING STATEMENTS ASSUME 100 QUESTIONS REM IF EXTERNAL CRITERIA ARE TO BE USED, THESE MUST BE CHANGED REM FOR I = 1 TO 50 NXX% = I - 1 I2% = I + 50 NXX2% = I2% - 1 PRINT #IOUT, USING F8$; NXX%; NCNT(I); NXX2%; NCNT(I2%) NEXT I PRINT #IOUT, F9$ 34 BR = ONSUB / 2! LBR = BR BR1 = LBR CUM = 0! FOR I = 1 TO NQST5% CNT = NCNT(I) CUM = CUM + CNT IF CUM - BR1 < 0 THEN 43 ON1 = CUM - BR1 NBR1 = I GOTO 49 43 NEXT I 49 AON = 0 CLOSE 1 OPEN "I", #1, DSK$(3) + "TAPE1" NCH = 0 LINE INPUT #1, IDUM$ FOR K = 1 TO 4 NCH1(K) = VAL(MID$(IDUM$, (K - 1) * 3 + 1, 3)) NEXT K LINE INPUT #1, IDUM$ NQST% = VAL(LEFT$(IDUM$, 4)) ONSUB = VAL(MID$(IDUM$, 6, 4)) NDBR = VAL(MID$(IDUM$, 10, 1)) NEXBR = VAL(MID$(IDUM$, 11, 1)) NFRBR = VAL(MID$(IDUM$, 12, 1)) NC = VAL(MID$(IDUM$, 13, 1)) NRSP = VAL(MID$(IDUM$, 14, 1)) M = 1 FOR K = 1 TO NC NCH = NCH + NCH1(K) ON K GOTO 2, 4, 4, 4, 99 2 LINE INPUT #1, IDUM$ NAMKEY(1) = LEFT$(IDUM$, 10) NAMKEY(2) = MID$(IDUM$, 11, 10) ID = MID$(IDUM$, 21, 10) EXCR = MID$(IDUM$, 31, 2) FOR I = M TO NCH KEYSYM(I) = VAL(MID$(IDUM$, 33 + I - M + 1, 1)) NEXT I GOTO 14 4 LINE INPUT #1, IDUM$ FOR I = M TO NCH KEYSYM(I) = VAL(MID$(IDUM$, 33 + I - M + 1, 1)) NEXT I 14 M = NCH + 1 27 NEXT K M = 1 NCH = 0 50 AON = AON + 1 FOR K = 1 TO NC NCH = NCH + NCH1(K) ON K GOTO 1880, 1890, 1890, 1890, 99 1880 LINE INPUT #1, IDUM$ ANAME(AON) = LEFT$(IDUM$, 20) IDEN(AON) = MID$(IDUM$, 21, 9) EXCRIT(AON) = VAL(MID$(IDUM$, 31, 2)) FOR J = M TO NCH NANS(J) = MID$(IDUM$, 33 + J - M + 1, 1) IF NANS(J) = " " OR NANS(J) = "*" THEN NANS(J) = "0" NEXT J GOTO 2446 1890 LINE INPUT #1, IDUM$ FOR J = M TO NCH NANS(J) = MID$(IDUM$, 33 + J - M + 1, 1) IF NANS(J) = " " OR NANS(J) = "*" THEN NANS(J) = "0" NEXT J 2446 M = NCH + 1 NEXT K M = 1 NCH = 0 K = 0 IF NEXBR = 0 THEN 181 NSCORE% = EXCRIT(AON) + 1! GOTO 182 REM REM THE FOLLOWING STATEMENT USED TO READ + 1.5 FOR SAME REASON AS THAT REM OFFERED JUST ABOVE STATEMENT 36 REM 181 NSCORE% = SCORE(AON) + 1 182 IF NSCORE% - NBR1 > 0 THEN 53 IF NSCORE% - NBR1 < 0 THEN 51 ON1 = ON1 - 1! IF ON1 >= 0 THEN 53 51 K = 1 GOTO 55 53 K = 3 55 FOR L = 1 TO NQST% IF KEYSYM(L) = 0 THEN 61 IF VAL(NANS(L)) <> KEYSYM(L) THEN 72 73 IF NEXBR = 0 THEN 173 172 SUMM(L) = SUMM(L) + EXCRIT(AON) GOTO 72 173 SUMM(L) = SCORE(AON) 72 J = VAL(NANS(L)) IF NANS(L) > "0" THEN 71 IF NANS(L) < "0" THEN 99 70 J = 6 71 ON K GOTO 83, 99, 84 83 NLOW(L, J) = NLOW(L, J) + 1 GOTO 61 84 NHIGH(L, J) = NHIGH(L, J) + 1 61 NEXT L IF AON - ONSUB > 0 THEN 99 IF AON - ONSUB < 0 THEN 50 PQ = 0! 178 PRINT #IOUT, F245$ PRINT #IOUT, F156$ PRINT #IOUT, F713$ FOR I = 1 TO NQST% NA = KEYSYM(I) IF NA <> 0 THEN 261 PP = 0 GOTO 94 261 NH = 0 NL = 0 FOR M = 1 TO 5 NH = NH + NHIGH(I, M) NL = NL + NLOW(I, M) 122 NEXT M ONRQ = NHIGH(I, NA) + NLOW(I, NA) IF NFRBR = 0 THEN 161 A = NRSP * NHIGH(I, NA) - NH IF A >= 0 THEN 162 A = 0 162 C = NRSP * NLOW(I, NA) - NL NRSP1 = NRSP - 1 IF C >= 0 THEN 163 C = 0 163 NH = NRSP1 * NH NL = NRSP1 * NL GOTO 166 161 A = NHIGH(I, NA) C = NLOW(I, NA) 166 CNH = NH CNL = NL B = CNH - A D = CNL - C IF NFRBR <> 0 THEN 171 PP = (A + C) / ONSUB GOTO 972 171 PP = (A + C) / (A + B + C + D) 972 PQ = PQ + PP * (1 - PP) IF PP = 0 THEN 94 93 IF 1 - PP = 0 THEN 94 RXBAR = SUMM(I) / ONRQ DTEST = (A + B) * (A + C) * (B + D) * (C + D) IF DTEST <> 0 THEN 175 PHI = 0 GOTO 176 175 PHI = (A * D - B * C) / SQR((A + B) * (A + C) * (B + D) * (C + D)) 176 RPBI = ((RXBAR - XBAR2) / SD2) * SQR(PP / (1 - PP)) GOTO 92 94 RPBI = 0 PHI = 0 92 IF NA <> 0 THEN ON NA GOTO 501, 502, 503, 504, 505 PRINT #IOUT, USING F604$; I GOTO 5 501 ALPHA = "A" GOTO 101 502 ALPHA = "B" GOTO 101 503 ALPHA = "C" GOTO 101 504 ALPHA = "D" GOTO 101 505 ALPHA = "E" 101 PRINT #IOUT, USING F601$; I; ALPHA; NHIGH(I, 1); NLOW(I, 1); NHIGH(I, 2); NLOW(I, 2); NHIGH(I, 3); NLOW(I, 3); NHIGH(I, 4); NLOW(I, 4); NHIGH(I, 5); NLOW(I, 5); NHIGH(I, 6); NLOW(I, 6); PP; PHI; RPBI; I 5 TDIFF(I) = PP TDISC(I) = PHI K = (I / 10) * 10 64 NEXT I ONQU = NQST% RTT = (ONQU / (ONQU - 1)) * ((SD * SD - PQ) / (SD * SD)) PRINT #IOUT, F9$ PRINT #IOUT, USING F159$; RTT RTT21 = (ONQU / (ONQU - 1)) * ((SD * SD - XBAR * (1 - XBAR / ONQU)) / (SD * SD)) PRINT #IOUT, USING F158$; RTT21 99 IF FLAG5% = 0 THEN 96 IF FLAG5% = 1 THEN 205 GOTO 203 205 IF IVER% - MAXVER% + 1 = 0 THEN 206 IF IVER% - MAXVER% + 1 < 0 THEN 202 IF FLAG4% = 1 THEN 603 GOTO 96 202 IVER% = IVER% + 1 GOTO 378 206 IF MAXVER% = 1 AND FLAG4% = 1 THEN 603 IF MAXVER% = 1 AND FLAG4% = 0 THEN 96 FLAG9% = 1 IVER% = IVER% + 1 GOTO 378 203 PRINT "Do you want to compile MICROSOC statistics?" 97 INPUT #6, JJANS IF LEFT$(JJANS, 1) = "Y" OR LEFT$(JJANS, 1) = "y" THEN 603 IF LEFT$(JJANS, 1) = "N" OR LEFT$(JJANS, 1) = "n" THEN 96 PRINT "Answer must be yes or no. Please retype." GOTO 97 603 IF FLAG4% = 1 THEN CALL SUBIT(NQST%, SCRFL$, RAWFL$) 96 CLOSE CHAIN "MICROSOC" END 121 PRINT "TESTFILE ", DSK$(3); SCRFL$, " NOT FOUND. JOB ABORTED." PRINT "ERROR NUMBER = "; ERR PRINT "THE ERROR OCCURRED AFTER LINE LABEL "; ERL 366 ZERR = ERR RESUME NEXT SUB NCSLOAD (IF1%, IF3%, IF4%, IF5%, IF9%, IF10%, IV%, MAXVER%, N6%, KSUM%, SCRFL$, RAWFL$) REM REM THIS SUBROUTINE READS FILE (TAPE2) CREATED FROM A TAPE WRITTEN REM BY AN NCS7000 SCANNER. IT WRITES ON TAPE1 THE "UPDATED FILE" REM THE FORMAT FOR WHICH IS AS FOLLOWS: 4I3 FOR THE FIRST LINE, REM I4,1X,I4,A5 FOR THE SECOND LINE. THE FIRST LINE CONTAINS THE REM NUMBER OF QUESTIONS PER LINE FOR UP TO 4 LINES. STANDARD APPEARANCE REM WOULD BE, FOR EXAMPLE, 40 40 8 0 , FOR AN EXECUTION REM INVOLVING 88 QUESTIONS. THE SECOND LINE IS TOTAL NUMBER OF REM QUESTIONS, A SPACE, NUMBER OF STUDENTS, 3 ZEROS (WHY? GOOD REM QUESTION), NUMBER OF LINES PER CASE AND NUMBER OF OPTIONS. REM THE LAST PARAMETER IS NOT USED BY THE PROGRAM. IT WILL BE REM SUBSTITUTED FOR A MORE SOPHISTICATED TREATMENT OF ITEM ANALYSIS REM SOMETIME IN THE FUTURE. REM DIM ICHAR(64) AS STRING * 1, AVER(160) AS STRING * 1, AZER(160) AS STRING * 1 DIM N6ST AS STRING * 1, N9ST AS STRING * 1, N8ST AS STRING * 1 DIM N4ST AS STRING * 1, N3ST AS STRING * 1, ISQ%(10) DIM ISQZ%(150), ISQV%(150), NQV%(150) F36$ = "## ## ## ##" F37$ = "#### ####\ \" F107$ = " &" F119$ = "\ \\ \ &" K = -1 FOR N = 1 TO 64 ICHAR(N) = "0" NEXT N ICHAR(1) = "1" ICHAR(2) = "2" ICHAR(3) = "3" ICHAR(4) = "4" ICHAR(5) = "5" NQUEST = 0 S = 40 CLOSE 2 OPEN "I", #2, DSK$(3) + "TAPE2" LINE INPUT #2, NARRA REM REM TRANSFER IF EXTERNAL KEY ZONE IS MARKED REM IF MID$(NARRA, 37, 1) = "1" THEN 124 IF5% = 1 IF IF10% = 0 THEN PRINT "INTERNAL KEY INDICATED" REM REM TRANSFER IF FILE ZONE IS NOT MARKED REM (INTERNAL KEY INDICATED, BUT NO FILE NAME MARKED) REM IF MID$(NARRA, 38, 1) = " " THEN 123 REM REM IF4=1 IF STATISTICS ARE TO BE ACCUMULATED REM IF MID$(NARRA, 45, 1) = "1" THEN IF4% = 1 REM REM STARTING HERE GET TEST FILE, CREATE TABLE OF KEYS, REM CREATE TABLE WHICH MAPS VERSIONS BACK TO VERSION 0. REM IF IF10% = 1 THEN 89 SCRFL$ = MID$(NARRA, 38, 6) CALL SETUP(IF4%, IF10%, MAXVER%, SCRFL$, N6%) GOTO 89 123 IF5% = 0 PRINT NARRA PRINT "INTERNAL KEY INDICATED, BUT NO FILE NAME." PRINT "TEST WILL BE SCORED USING FIRST SHEET AS KEY." STOP 124 IF1% = 1 PRINT "EXTERNAL KEY INDICATED" CLOSE 2 OPEN "I", #2, DSK$(3) + "TAPE2" FOR N = 1 TO 4 N2(N) = 0 NEXT N REM REM DETERMINE NUMBER OF QUESTIONS ON EXTERNAL KEY REM FOR N = 1 TO 4 LINE INPUT #2, INTERM(N) NARRA = INTERM(N) FOR M = 1 TO 40 IF MID$(NARRA, 88 - M + 1, 1) <> " " THEN 141 NEXT M N2(N) = 0 GOTO 88 141 N2(N) = 88 - M + 1 - 48 88 NEXT N REM REM TRANSFER ON LAST LINE HAVING A NON-ZERO NUMBER OF QUESTIONS REM FOR N = 1 TO 4 IF N2(4 - N + 1) <> 0 THEN 128 NEXT N PRINT "EXTERNAL KEY IS BLANK. JOB ABORTED." STOP 128 N6% = (4 - N) * 40 + N2(4 - N + 1) IF IF5% = 0 THEN 89 REM REM THIS READ STATEMENT GETS PAST FIRST LINE OF COPY OF RAW DATA REM 90 LINE INPUT #2, INTERM(1) NARRA = INTERM(1) REM REM THE NEXT STATEMENTS ENCODE THE KEY IF IT IS INTERNAL REM FOR N = 1 TO 150 NANS(N) = " " NEXT N IF IF9% = 1 THEN 126 PRINT #1, USING F119$; MID$(NARRA, 10, 20); MID$(NARRA, 1, 9); MID$(LANS(IV% + 1), 1, 40) IF N6% <= 40 THEN 129 NT% = INT((N6% - 40) / 40) + 1 IF NT% = 1 THEN 114 FOR M = 1 TO NT% - 1 PRINT #1, USING F107$; MID$(LANS(IV% + 1), M * 40 + 1, 40) NEXT M 114 PRINT #1, USING F107$; MID$(LANS(IV% + 1), NT% * 40 + 1, N6% - NT% * 40) 129 FOR N = 1 TO 3 LINE INPUT #2, NARRA NEXT N GOTO 142 126 PRINT #1, USING F119$; MID$(NARRA, 10, 20); MID$(NARRA, 1, 9); MID$(LANS(1), 1, 40) PRINT "Preparation of Master key on Version 0." K = K + 1 IF N6% <= 40 THEN 129 NT% = INT((N6% - 40) / 40) + 1 IF NT% = 1 THEN 125 FOR M = 1 TO NT% - 1 PRINT #1, USING F107$; MID$(LANS(1), M * 40 + 1, 40) NEXT M 125 PRINT #1, USING F107$; MID$(LANS(1), NT% * 40 + 1, N6% - NT% * 40) GOTO 129 REM REM FILE MANAGEMENT SECTION REM REM REM CONSTANTS DEFINITION REM 89 CLOSE 2 OPEN "I", #2, DSK$(3) + "TAPE2" IF IF5% = 0 THEN 26 IF IF9% = 1 THEN 45 DO WHILE NOT EOF(2) LINE INPUT #2, NARRA IDUM% = 10 IF MID$(NARRA, 34, 1) < "0" OR MID$(NARRA, 34, 1) > "9" THEN 134 IDUM% = VAL(MID$(NARRA, 34, 1)) 134 IF (MID$(NARRA, 89, 1) = "1" AND IDUM% = IV%) OR K = -1 OR IF9% = 1 THEN K = K + 1 GOTO 623 26 LINE INPUT #2, NARRA IF MID$(NARRA, 89, 1) = "1" THEN K = K + 1 623 LOOP CLOSE 2 OPEN "I", #2, DSK$(3) + "TAPE2" N6ST = "0" N9ST = "0" N8ST = "0" N3ST = "5" N7% = N6% FOR N = 1 TO 4 N2(N) = 0 NEXT N P = 1 1730 IF N7% <= S THEN 1781 N2(P) = S P = P + 1 N7% = N7% - S GOTO 1730 1781 B1 = N7% N4ST = RIGHT$(STR$(P), 1) N2(P) = N7% HST = N6ST + N9ST + N8ST + N4ST + N3ST REM REM DEFINE INPUT AND OUTPUT FILES REM CLOSE 1 OPEN "O", #1, DSK$(3) + "TAPE1" REM REM EDITING SECTION REM REM REM N2 ARRAY IS # OF QUESTIONS ON EACH SHEET FOR ONE CASE REM (WHOLE KEY IS ONE CASE ALSO) REM N6=TOTAL # OF QUESTIONS REM REM SEE TOP OF SUBROUTINE FOR EXPLANATION OF VARIABLES PUT AT REM TOP OF TAPE1 REM PRINT #1, USING F36$; N2(1); N2(2); N2(3); N2(4) PRINT #1, USING F37$; N6%; K; HST KSUM% = KSUM% + K IF IF5% = 1 THEN 90 GOTO 142 45 CLOSE 1 OPEN "O", #1, DSK$(3) + "TAPE1" PRINT #1, USING F36$; N2(1); N2(2); N2(3); N2(4) PRINT #1, USING F37$; N6%; KSUM%; HST GOTO 90 REM REM K=TOTAL # OF Q1 LINES READ. REM HST CONSISTS OF THREE ZEROS FOLLOWED BY NUMBER OF LINES (PAGES) REM PER CASE (N4ST) FOLLOWED BY NUMBER OF ALLOWED OPTIONS(5) REM 142 IF IF9% = 1 THEN 301 GOTO 33 REM REM THIS SECTION MAPS VERSIONS BACK TO VERSION 0 FOR CONSOLIDATED REM ITEM ANALYSIS REM 301 PRINT "Mapping all versions back to Version 0 sequence for consolidated item analysis." FOR N = 1 TO MAXVER% BACK$ = STRING$(N6%, 32) CLOSE 10 OPEN "I", #10, DSK$(3) + "TAPE10" FOR M = 1 TO MAXIT% FOR I = 1 TO MAXVER% LINE INPUT #10, TEMP$ REM REM SET SEQUENCE NUMBER OF MTH ITEM IN VERSION 0 REM IF I = 1 THEN ISQZ%(M) = VAL(MID$(TEMP$, 15, 3)) REM REM SET SEQUENCE NUMBER OF MTH ITEM IN VERSION N REM IF I = N THEN ISQV%(M) = VAL(MID$(TEMP$, 15, 3)) NEXT I REM REM SET NUMBER OF QUESTIONS IN MTH ITEM OF VERSION N REM NQV%(M) = VAL(MID$(TEMP$, 19, 1)) NEXT M CLOSE 10 CLOSE 2 OPEN "I", #2, DSK$(3) + "TAPE2" FOR I = 1 TO 4 LINE INPUT #2, NARRA NEXT I 222 DO WHILE NOT EOF(2) STUD$ = "" LINE INPUT #2, NARRA IF MID$(NARRA, 34, 1) < "0" OR MID$(NARRA, 34, 1) > "9" THEN 209 GOTO 231 209 FOR I = 1 TO 3 LINE INPUT #2, NARRA NEXT I GOTO 627 231 IF VAL(MID$(NARRA, 34, 1)) <> N - 1 THEN 209 STUD$ = MID$(NARRA, 49, 40) FOR I = 1 TO 3 LINE INPUT #2, NARRA STUD$ = STUD$ + MID$(NARRA, 49, 40) NEXT I 221 FOR I = 1 TO MAXIT% REM REM MAP ANSWERS BACK TO VERSION 0 REM BACK$ = LEFT$(BACK$, ISQZ%(I) - 1) + MID$(STUD$, ISQV%(I), NQV%(I)) + RIGHT$(BACK$, N6% - ISQZ%(I) + 1 - NQV%(I)) NEXT I REM REM CONVERT SPACE HOLDING STUDENT ID NUMBERS TO THE FOLLOWING: REM CAMPUS NUMBER, TEST NUMBER, VERSION NUMBER, COURSE LEVEL AND REM TWO SPACES REM FOR M = 1 TO 7 MID$(NARRA, M, 1) = MID$(NARRA, M + 29, 1) NEXT M MID$(NARRA, 8, 2) = " " IF N6% <= 40 THEN 625 PRINT #1, USING F119$; MID$(NARRA, 10, 20); MID$(NARRA, 1, 9); LEFT$(BACK$, 40) K = K + 1 GOTO 626 625 PRINT #1, USING F119$; MID$(NARRA, 10, 20); MID$(NARRA, 1, 9); BACK$ K = K + 1 GOTO 627 626 FOR KK = 1 TO INT((N6% - 40) / 40) + 1 IF KK = INT((N6% - 40) / 40) + 1 THEN 220 PRINT #1, USING F107$; MID$(BACK$, KK * 40 + 1, 40) GOTO 219 220 PRINT #1, USING F107$; RIGHT$(BACK$, N6% - KK * 40) 219 NEXT KK 627 LOOP 232 NEXT N GOTO 25 33 CLOSE 2 OPEN "I", #2, DSK$(3) + "TAPE2" DO UNTIL EOF(2) LINE INPUT #2, NARRA IF MID$(NARRA, 89, 1) = "1" THEN 416 NARRA = STRING$(29, " ") + RIGHT$(NARRA, LEN(NARRA) - 29) 416 IQ = 0 IDUM% = 10 IF IF5% = 0 THEN 304 REM REM THIS SECTION CHECKS VALIDITY OF VERSION INDICATOR THEN REM BRANCHES EITHER TO ADD ANOTHER CASE TO TAPE1 OR READS REM PAST IT ON TAPE2 REM IF MID$(NARRA, 34, 1) < "0" OR MID$(NARRA, 34, 1) > "9" THEN 215 IDUM% = VAL(MID$(NARRA, 34, 1)) IF IDUM% = IV% THEN 304 215 FOR N = 1 TO 3 LINE INPUT #2, NARRA NEXT N GOTO 200 304 LDUM = VAL(MID$(NARRA, 89, 1)) IFIN = N2(LDUM) + 48 TEMP$ = LEFT$(NARRA, 48) FOR N = 49 TO IFIN TEMP$ = TEMP$ + ICHAR(VAL(MID$(NARRA, N, 1))) NEXT N F20$ = "\ \\ \ &" PRINT #1, USING F20$; MID$(NARRA, 10, 20); MID$(NARRA, 1, 9); MID$(NARRA, 49, 40) IQ = IQ + 40 IF IQ >= N6% THEN 112 LINE INPUT #2, NARRA GOTO 304 112 IF IQ = 160 THEN 200 DO UNTIL EOF(2) LINE INPUT #2, NARRA IQ = IQ + 40 IF IQ < 160 THEN 112 GOTO 200 REM REM INNER LOOP REM LOOP GOTO 612 REM REM OUTER LOOP REM 200 LOOP 612 CLOSE 1 OPEN "I", #1, DSK$(3) + "TAPE1" CLOSE 2 OPEN "I", #2, DSK$(3) + "TAPE2" 25 IF IF3% = 1 THEN 194 PRINT "Where do you want your output to go? File or Printer? (F/P)"; INPUT A$ IF A$ <> "F" AND A$ <> "f" AND A$ <> "P" AND A$ <> "p" THEN 25 IF A$ = "F" OR A$ = "f" THEN 193 PRINT "Printer Output" PRINT " Indicate LPT1:,LPT2:,LPT3:,COM1:,or COM2: for your printer" INPUT PRTR$ OPEN PRTR$ FOR OUTPUT AS #IOUT GOTO 194 193 FOUT$ = DSK$(3) + RAWFL$ + "SC.OUT" PRINT "Your results will be routed to file "; FOUT$ PRINT "unless you choose another name" PRINT "If you wish to give it a different filename, do it now" PRINT "or press to continue"; INPUT GOUT$ IF GOUT$ <> "" THEN FOUT$ = DSK$(3) + GOUT$ OPEN FOUT$ FOR OUTPUT AS #IOUT 194 IF IF9% = 0 THEN PRINT "Starting scoring output for Version "; IV% IF IF9% = 1 THEN PRINT "Starting scoring output for Consolidated Versions." IF3% = 1 PRINT #IOUT, "*************************" PRINT #IOUT, "* *" F120$ = "* RESULTS FOR VERSION # *" IF IF9% = 0 THEN PRINT #IOUT, USING F120$; IV% IF IF9% = 1 THEN PRINT #IOUT, "* CONSOLIDATED VERSIONS *" PRINT #IOUT, "* *" PRINT #IOUT, "*************************" F44$ = "TOTAL NUMBER TAKING TEST = ####" PRINT #IOUT, USING F44$; K CLOSE 2 OPEN "I", #2, DSK$(3) + "TAPE2" CLOSE 1 OPEN "I", #1, DSK$(3) + "TAPE1" PRINT #IOUT, "STUDENT RESPONSES. 1ST LINE IS # OF QUEST. PER LINE," PRINT #IOUT, "FOR UP TO 4 LINES. 2ND LINE IS TOTAL # OF QUEST., TOTAL STUDENTS," PRINT #IOUT, " 3 ZEROS, NUMBER OF LINES PER CASE, NUMBER OF OPTIONS. ANSWERS" PRINT #IOUT, " ARE GIVEN AS BLANK FOR OMITS, A, B, C, D, AND E" F2611$ = " DATE: \ \ TIME: \ \" PRINT #IOUT, USING F2611$; DATE$; TIME$ PRINT #IOUT, "-----------------------------------------------------------" PRINT #IOUT, " " 2660 DO WHILE NOT EOF(1) LINE INPUT #1, TEMP$ FOR II = 1 TO 80 NANS(II) = MID$(TEMP$, II, 1) NEXT II TEMP$ = "" FOR JJJ = 1 TO 33 TEMP$ = TEMP$ + NANS(JJJ) NEXT JJJ FOR JJJ = 34 TO 73 IF NANS(JJJ) = "0" THEN NANS(JJJ) = " " TEMP$ = TEMP$ + NANS(JJJ) NEXT JJJ FOR JJJ = 74 TO 80 TEMP$ = TEMP$ + NANS(JJJ) NEXT JJJ PRINT #IOUT, TEMP$ LOOP CLOSE 1 CLOSE 2 PRINT #IOUT, "----------------------------------------------------------------" END SUB SUB SETUP (IF4%, IF10%, MAXV%, SCRFL$, MAXQ%) DIM JBANK AS STRING DIM IBANK AS STRING DIM ID AS STRING * 10, ILOC AS STRING * 24 DIM JID AS STRING * 7, SANS AS STRING, JEY AS STRING * 10 DIM LTMP(20) AS STRING * 1, MTMP(20) AS STRING * 1 ON ERROR GOTO 121 OPEN "I", #4, DSK$(3) + SCRFL$ NZER = 0 REM REM GET TEST FILES REM 152 IBANK = "" JBANK = "" OPEN "O", #10, DSK$(3) + "TAPE10" 65 FOR N = 1 TO 10 LANS(N) = STRING$(160, "-") NEXT N MAXV% = 0 MAXIT% = 0 MAXQ% = 0 DO WHILE NOT EOF(4) 98 LINE INPUT #4, IDUM$ IBANK = LEFT$(IDUM$, 5) ID = MID$(IDUM$, 7, 7) NQ% = VAL(MID$(IDUM$, 15, 2)) IF LEFT$(IDUM$, 7) <> "VERSION" THEN 133 MAXV% = MAXV% + 1 ISEQ% = 0 GOTO 98 133 MAXIT% = MAXIT% + 1 ISEQ% = ISEQ% + 1 IDUM% = MAXV% - 1 PRINT #10, USING "\ \\ \# ### #"; IBANK; ID; IDUM%; ISEQ%; NQ% ISEQ% = ISEQ% + NQ% - 1 LOOP MAXQ% = ISEQ% MAXIT% = MAXIT% / MAXV% CLOSE 4 CLOSE 10 REM REM SET UP MASTER ANSWER KEY FOR VERSION 0 REM REM ************************************************ REM DO SORT ON TAPE10 AND PUT IT HERE REM ************************************************ SPATH$ = "SORT /+1 <" + DSK$(3) + "TAPE10 >" + DSK$(3) + "TAPE15" SHELL SPATH$ DPATH$ = "DEL " + DSK$(3) + "TAPE10" SHELL DPATH$ RPATH$ = "REN " + DSK$(3) + "TAPE15 TAPE10" SHELL RPATH$ OPEN "I", #10, DSK$(3) + "TAPE10" IBANK = "" ISEQ% = 0 OPEN "I", #4, DSK$(3) + SCRFL$ DO WHILE NOT EOF(4) 192 LINE INPUT #4, IDUM$ JBANK = LEFT$(IDUM$, 10) IF JBANK = "VERSION 0" THEN 192 IF JBANK = "VERSION 1" THEN 164 JID = MID$(IDUM$, 7, 7) JQ% = VAL(MID$(IDUM$, 15, 2)) R2 = VAL(RIGHT$(IDUM$, LEN(IDUM$) - 17)) IF IBANK = "" THEN 136 IF IBANK = JBANK THEN 127 CLOSE 11 136 IBANK = JBANK CLOSE 11 OPEN "R", #11, DSK$(11) + LEFT$(JBANK, 5), 80 FIELD #11, 80 AS PKTXT$ REM REM THIS IS THE POINT WHERE A BANK IS OPENED SO AS TO FIND ANSWERS FOR REM MASTER KEY OF VERSION 0. REM REM TRANSFER IF THIS ITEM IS A MACRO REM 127 IF JQ% <> 1 THEN 118 GET #11, R2 IF LEFT$(PKTXT$, 7) = JID THEN 521 SANS = "0" PRINT "ITEM "; JID; " IN BANK "; LEFT$(JBANK, 5); " NOT FOUND. SCORING" PRINT "OF THIS ITEM WILL BE SUPPRESSED." GOTO 522 REM REM ENCODE LANS WITH SIMPLE ITEM ANSWER REM 521 SANS = RIGHT$(STR$(ASC(MID$(PKTXT$, 9, 1)) - 64), 1) ISEQ% = ISEQ% + 1 522 LANS(1) = LEFT$(LANS(1), ISEQ% - 1) + SANS + RIGHT$(LANS(1), LEN(LANS(1)) - ISEQ%) GOTO 1092 REM REM THIS SECTION ENCODES ANSWERS FOR A MACRO ITEM INTO LANS REM 118 GET #11, R2 ISEQ% = ISEQ% + JQ% IF LEFT$(PKTXT$, 7) = JID THEN 621 SANS = STRING$(JQ%, "0") PRINT "ITEM "; JID; "IN BANK "; IBANK; " NOT FOUND. SCORING" PRINT "OF THE "; JQ%; " QUESTIONS IN THIS ITEM WILL BE SUPPRESSED" GOTO 622 REM REM ENCODE LANS WITH MACRO ITEM ANSWERS REM 621 SANS = "" FOR N = 1 TO JQ% SANS = SANS + RIGHT$(STR$(ASC(MID$(PKTXT$, 9 + N - 1, 1)) - 64), 1) NEXT N 622 LANS(1) = LEFT$(LANS(1), ISEQ% - JQ%) + SANS + RIGHT$(LANS(1), LEN(LANS(1)) - ISEQ%) 1092 LOOP 164 CLOSE 2 OPEN "I", #2, DSK$(3) + "TAPE2" CLOSE 4 MAXQ% = ISEQ% ISEQ% = 0 REM REM SET VARIABLES FOR TAPE2 CREATED FROM NCSLOAD REM NCHAR% = 90 NUMB% = 49 NUME% = 88 REM REM THE FOLLOWING STATEMENTS MODIFY THE MASTER KEY TO REFLECT REM ANSWERS CHANGED AND QUESTIONS OMITTED BY THE TEACHER. REM PRINT "Checking for answers changed or omitted from scoring by teacher." FOR M% = 1 TO 4 LINE INPUT #2, NARRA FOR N% = NUMB% TO NUME% ISEQ% = ISEQ% + 1 IF ISEQ% > MAXQ% THEN 143 IF MID$(NARRA, N%, 1) = " " THEN 184 IF MID$(NARRA, N%, 1) = "*" THEN 191 SANS = MID$(NARRA, N%, 1) GOTO 212 191 SANS = "0" REM REM ENCODE LANS WITH MODIFIED ANSWERS OR OMITTED ANSWERS REM 212 MID$(LANS(1), ISEQ%, 1) = SANS 184 NEXT N% NEXT M% 143 CLOSE 2 FOR M% = 1 TO MAXIT% FOR N% = 1 TO MAXV% LINE INPUT #10, IDUM$ ISEQ% = VAL(MID$(IDUM$, 15, 3)) NQ% = VAL(MID$(IDUM$, 19, 1)) IF N% <> 1 THEN 137 IPLC% = ISEQ% GOTO 35 137 JPLC% = ISEQ% FOR I% = 1 TO NQ% LANS(N%) = LEFT$(LANS(N%), JPLC% - 2 + I%) + MID$(LANS(1), IPLC% + I% - 1, 1) + RIGHT$(LANS(N%), LEN(LANS(N%)) - JPLC% - I% + 1) NEXT I% 35 NEXT N% NEXT M% IF10% = 1 END SUB SUB SUBIT (NQST%, SCRFL$, RAWFL$) REM REM REM REM THIS PROGRAM DOES THE FOLLOWING THINGS: REM 1. COMPARES ITEMS ON ANSWER SHEETS WITH SOCRATES FILE REM 2. READS TABLE OF TEST ITEM IDENTIFICATION NUMBERS AND SOCRATES REM SEQUENCE NUMBERS REM 3. COMPARES ANSWERS ON ANSWER KEY SHEET WITH ANSWERS IN REM SOCRATES BANK FILE REM 4. COMPILES ITEM STATISTICS IN PERMANENT KEY FILE REM REM TAPE NUMBERS ARE ASSIGNED AS FOLLOWS REM REM DON'T FORGET TO PUT THESE IN. REM DIM TSTFIL AS STRING * 7, SOKID(160) AS STRING * 7 DIM DBRCH AS INTEGER, PN AS INTEGER, RES AS INTEGER DIM KB(160) AS STRING * 5, REC(160) DIM IPANS(6) AS INTEGER, NSUB(2) AS STRING * 1 DIM KBANK AS STRING * 10, IBANK AS STRING, JBANK AS STRING, KANS AS STRING * 1 DIM NFILE AS STRING * 8, AST AS STRING * 1, IFORM AS STRING, NMANS%(6) REM REM GET ITEM STATISTICS FILE REM PRINT "Beginning accumulation of MICROSOC statistics." PRINT "Type name (20 characters or less) which will identify" INPUT "this test administration: "; IFORM OPEN "O", #13, DSK$(3) + "TAPE13" F36$ = "ANSWER DISAGREEMENT. QUEST. ###, SOC. NO. \ \ KEY ANS ! BNK ANS !" F44$ = "SOCRATES STATISTICS UPDATE DATE: \ \ TIME: \ \" F53$ = "\ \ \ \!! ### ###! ###! ###! ###! ###! ###! ##### #.### #.###" F262$ = "\ \\ \\ \" F269$ = "\ \\ \ \ \ ! ##### ##### ##### ##### ##### ##### ##.### ##.###" F274$ = "### &" F390$ = "SOCRATES item number \ \ from bank \ \ not found." F398$ = "\ \\ \ ! ##### ##### ##### ##### ##### ##### ##.### ##.###" F414$ = "\ \!\ \#### #### #### #### #### #### #.#### #.####" OPEN "I", #4, DSK$(3) + SCRFL$ NZER = 0 NUMIT = 0 DBRCH = 0 PRSC = 0 LINE INPUT #4, IDUM$ ALFA(1) = "A" ALFA(2) = "B" ALFA(3) = "C" ALFA(4) = "D" ALFA(5) = "E" REM REM ENTER ITEM NUMBERS REM REM READ FROM DISC THOSE ITEMS ON TEST REM IBANK AND SOKSEQ ARE THE ITEM BANK AND THE REM SOCRATES ITEM NUMBERS RESPECTIVELY REM N = 0 DO UNTIL EOF(4) LINE INPUT #4, IDUM$ IF LEFT$(IDUM$, 7) = "VERSION" THEN 227 N = N + 1 KB(N) = LEFT$(IDUM$, 5) SOKID(N) = MID$(IDUM$, 7, 7) FOR M = 1 TO LEN(IDUM$) IF MID$(IDUM$, LEN(IDUM$) - M + 1, 1) = "," THEN 272 NEXT M 272 REC(N) = VAL(RIGHT$(IDUM$, M - 1)) LOOP REM REM CHECK TEST ANSWER KEY AGAINST SOCRATES KEY ON FILE REM 227 NMAX = N MMAX = N 704 PRINT "CHECKING ANSWERS AGAINST TEST FILE" ICHK = 0 REM REM READ THRU LIST OF TEST ITEMS TO GET UNIQUE REM SET OF ITEM BANKS USED (NBTEMP) REM 228 FOR NN = 1 TO 10 NBTEMP(NN) = "" NEXT NN MM = 1 NBTEMP(MM) = KB(1) FOR N = 1 TO NMAX FOR KK = 1 TO MM IF KB(N) = NBTEMP(KK) THEN 379 NEXT KK MM = MM + 1 NBTEMP(MM) = KB(N) 379 NEXT N NFLAG = 0 N = 0 M = 0 JBANK = "" AST = "*" REM REM N INDEXES ITEM NUMBER, M INDEXES BANK NUMBER REM 384 N = N + 1 M = M + 1 IF N > NMAX THEN 391 REM REM IF N=1 TRANSFER DIRECTLY TO CLOSE/OPEN SEQUENCE. REM IF N = 1 THEN 402 IF JBANK = KB(M) THEN 388 REM REM IF BANK ID CHANGES, CLOSE CURRENT BANK AND OPEN NEW BANK SO AS TO REM BE READY TO SEARCH FOR DESIRED ITEM. REM REM I THINK THAT THE FOLLOWING STATEMENT IS MISPLACED. REM 402 JBANK = KB(M) KFILE$ = JBANK + ".STT" CLOSE 15 OPEN "R", #15, DSK$(11) + JBANK, 80 FIELD #15, 80 AS PKTXT$ REM REM ALSO, CLOSE THE CURRENT STATISTICS FILE AND OPEN THE NEW STATISTICS FILE. REM CLOSE 11 OPEN "A", #11, DSK$(11) + KFILE$ GOTO 388 REM REM GET KEY LINES FROM BANKS USED ON TEST REM REM THIS STARTS THE PRINCIPAL DIFFERENCE BETWEEN TIMESHARING VERSION OF THE REM SCORING PROGRAM AND THE MICROCOMPUTER VERSION. THE BANK MUST BE OPENED REM TO FIND THE ANSWER FOR THE QUESTION. THEN AFTER CALCULATIONS ARE MADE, REM THE STATISTICS FILE IS OPENED IN APPEND MODE AND THE RESPONSE PROFILES, REM THE DIFFICULTY LEVEL AND THE DISCRIMINATION INDEX ARE ADDED. ALL REM RESPONSE PROFILES FOR A SINGLE QUESTION ARE NOT CONSOLIDATED IN THE REM MICROCOMPUTER VERSION, BUT LEFT AS SEPARATE ENTRIES, WITH AN APPROPRIATE REM DESCRIPTION OF THE PARTICULAR TEST ADMINISTRATION IN WHICH THE GIVEN REM QUESTION WAS A MEMBER. REM REM INSERTION OF RECORDS IS DONE BY SORTING THE FILE AFTER ALL CALCULATIONS REM HAVE BEEN COMPLETED. THE FOLLOWING STRATEGY GETS THE ANSWERS TO REM QUESTIONS FROM EACH BANK, CHECKS THE ANSWERS AGAINST THE KEY SHEET REM TO SEE IF THE TEACHER HAS CHANGED AND ANSWER OR DELETED A QUESTION FROM REM SCORING. REM 389 PRINT #IOUT, USING F390$; SOKID(M); KB(M) GOTO 1001 REM REM TRANSFER TO 413 IF THE ITEM IS A MACRO ITEM REM REM TRANSFER TO 389 IF KEY SHOWS AN ITEM ID DIFFERENT FROM THAT IN SOKID ARRAY REM 388 GET #15, REC(M) IF MID$(PKTXT$, 18, 1) <> "1" THEN 413 IF LEFT$(PKTXT$, 7) <> SOKID(M) THEN 389 REM REM DECODE ITEM WHICH IS NOT PART OF MACRO REM KANS = MID$(PKTXT$, 9, 1) NFILE = LEFT$(PKTXT$, 7) + "0" NSUB(1) = " " NSUB(2) = " " REM REM KDUM% IS THE NUMERIC VALUE OF THE ANSWER (1->5=A->E) FOR QUESTION N ON THE TEST REM KDUM% = VAL(MID$(LANS(1), N, 1)) IF KDUM% <> 0 THEN 210 ALFA(KDUM%) = " " GOTO 213 210 IF KANS = ALFA(KDUM%) THEN 396 NFLAG = 1 PRINT #IOUT, USING F36$; N; SOKID(M); ALFA(KDUM%); KANS GOTO 396 213 PRINT "QUESTION "; N; " OMITTED." REM REM NOTE ********* 396 SHOULD PROBABLY NOT FOLLOW 213 DIRECTLY REM REM NOTE NOTE: IT DOES IN ORIGINAL PROGRAM REM PREPARE RESPONSE PROFILE FOR SUBMISSION TO .STT FILE REM 396 NTOT% = 0 FOR J = 1 TO 6 NMANS%(J) = NLOW(N, J) + NHIGH(N, J) NTOT% = NTOT% + NLOW(N, J) + NHIGH(N, J) NEXT J NRT% = NLOW(N, KDUM%) + NHIGH(N, KDUM%) IF ICHK = 0 OR ALFA(KDUM%) = " " THEN 251 PRINT #11, USING F398$; NFILE; IFORM; KANS; NMANS%(1); NMANS%(2); NMANS%(3); NMANS%(4); NMANS%(5); NMANS%(6); TDIFF(N); TDISC(N) 251 NTOT% = 0 FOR J = 1 TO 6 RANS(J) = " " NEXT J REM REM PUT ASTERISK IN VARIABLE CORRESPONDING TO CORRECT ANSWER REM FOR J = 1 TO 6 IF J = KDUM% THEN RANS(J) = AST NTOT% = NTOT% + NMANS%(J) NEXT J IF NTOT% <> 0 THEN 157 FOR J = 1 TO 6 PANS(J) = 0 NEXT J GOTO 259 157 FOR J = 1 TO 6 PANS(J) = NMANS%(J) / NTOT% * 100 IPANS(J) = PANS(J) + .4999999 NEXT J 259 IQST% = N IF ICHK = 0 OR ALFA(KDUM%) = " " THEN 242 PRINT #IOUT, USING F53$; JBANK; LEFT$(NFILE, 7); NSUB(1); NSUB(2); IQST%; IPANS(1); RANS(1); IPANS(2); RANS(2); IPANS(3); RANS(3); IPANS(4); RANS(4); IPANS(5); RANS(5); IPANS(6); RANS(6); NTOT%; TDIFF(N); TDISC(N) SQST$ = RIGHT$(STR$(IQST%), LEN(STR$(IQST%)) - 1) SQST$ = STRING$(3 - LEN(SQST$), 48) + SQST$ PRINT #13, USING F262$; SQST$; JBANK; NFILE 242 IF KANS <> ALFA(KDUM%) THEN 384 NUMIT = NUMIT + 1 GOTO 384 391 CLOSE 11 IF ICHK = 0 THEN 106 GOTO 1001 106 IF ICHK = 0 THEN PRSC = 0 IF NFLAG <> 0 THEN 401 PRINT "ALL ANSWERS ARE OK" CLOSE 11 252 PRINT "Output of cumulative statistics beginning." ICHK = 1 W$ = DATE$ Y$ = TIME$ N$ = CHR$(13) + CHR$(10) PRINT #IOUT, USING F44$; W$; Y$ PRINT #IOUT, " " PRINT #IOUT, "CUMULATIVE STATISTICS FOR SOCRATES ITEMS ON YOUR TEST" PRINT #IOUT, " " PRINT #IOUT, "NUMBER UNDER OPTIONS AND 'OMIT' ARE PERCENTAGES" PRINT #IOUT, "NUMBER UNDER 'TOTL SMPL' IS SIZE OF SAMPLE" PRINT #IOUT, " " PRINT #IOUT, "BANK SOCRATES TEST %A %B %C %D %E % TOTL DIFF DISCR" PRINT #IOUT, " ITEM ITEM OMIT SMPL LEVEL INDEX" PRINT #IOUT, " NUMBER NMBR" NMAX = MMAX NUMIT = 0 GOTO 228 401 PRINT #IOUT, "PLEASE NOTE DISCREPANCIES BETWEEN ANSWERS AND " PRINT #IOUT, "CORRECT AT EARLIEST CONVENIENCE." PRINT "DO YOU STILL WISH TO ACCUMULATE SOCRATES STATISTICS", CALL YESNO(IBRCH%) IF IBRCH% = 2 THEN 167 GOTO 252 REM REM PLACE STATISTICS OVERRIDE HERE IN FUTURE REM 147 PRINT "JOB WILL NOW ABORT." GOTO 167 REM REM DECODE KEY LINE OF MACRO SUB ITEM REM 413 JJ = 0 NSUB(1) = "-" REM REM BE CAREFUL HERE: DEALING WITH MACRO REM MACN = VAL(MID$(PKTXT$, 18, 1)) KANS = MID$(PKTXT$, 9 + JJ, 1) NFILE = LEFT$(PKTXT$, 7) + "1" NMAX = NMAX + MACN - 1 REM REM BEGINNING OF LOOP TO CALCULATE STATISTICS ON ALL MACRO SUBITESM REM 399 IQST% = N KDUM% = KEYSYM(IQST%) IF KDUM% <> 0 THEN 211 ALFA(KDUM%) = " " GOTO 224 211 IF KANS = ALFA(KDUM%) THEN 39 GOTO 225 224 PRINT "QUESTION "; IQST%; " OMITTED." GOTO 39 225 NFLAG = 1 PRINT #IOUT, USING F36$; IQST%; SOKID(M); ALFA(KDUM%); KANS REM REM CALCULATE NEW TOTALS, DIFFICULTY, DISCRIMINATION AND OUTPUT REM ON TAPE4 REM 39 IQST% = N NTOT% = 0 FOR J = 1 TO 6 NMANS%(J) = NLOW(IQST%, J) + NHIGH(IQST%, J) NEXT J IF ICHK = 0 OR ALFA(KDUM%) = " " THEN 551 PRINT #11, USING F398$; NFILE; IFORM; KANS; NMANS%(1); NMANS%(2); NMANS%(3); NMANS%(4); NMANS%(5); NMANS%(6); TDIFF(N); TDISC(N) 551 NTOT% = 0 FOR J = 1 TO 6 RANS(J) = " " NEXT J REM REM PUT ASTERISK IN VARIABLE CORRESPONDING TO CORRECT ANSWER REM FOR J = 1 TO 6 IF J = KDUM% THEN RANS(J) = AST NTOT% = NTOT% + NMANS%(J) NEXT J IF NTOT% <> 0 THEN 557 FOR J = 1 TO 6 PANS(J) = 0 NEXT J GOTO 559 557 FOR J = 1 TO 6 PANS(J) = NMANS%(J) / NTOT% * 100 IPANS(J) = PANS(J) + .5 NEXT J REM REM NSUB(2) MUST VALUE OF MACROSUBITEM (1 THROUGH 9) REM NSUB(2) = RIGHT$(STR$(JJ + 1), 1) 559 IQST% = N IF ICHK = 0 OR ALFA(KDUM%) = " " THEN 500 PRINT #IOUT, USING F53$; JBANK; LEFT$(NFILE, 7); NSUB(1); NSUB(2); IQST%; IPANS(1); RANS(1); IPANS(2); RANS(2); IPANS(3); RANS(3); IPANS(4); RANS(4); IPANS(5); RANS(5); IPANS(6); RANS(6); NTOT%; TDIFF(N); TDISC(N) REM REM IS NSUB(2) A STRING? SEE NEXT STATEMENT. REM SQST$ = RIGHT$(STR$(IQST%), LEN(STR$(IQST%)) - 1) SQST$ = STRING$(3 - LEN(SQST$), 48) + SQST$ PRINT #13, USING F262$; SQST$; JBANK; NFILE + NSUB(2) 500 IF KANS <> ALFA(KDUM%) THEN 46 NUMIT = NUMIT + 1 46 N = N + 1 JJ = JJ + 1 IF JJ = MACN THEN 405 REM REM DECODE KEY LINES OF SUBSEQUENT MACRO SUBITEMS REM NFILE = LEFT$(PKTXT$, 7) + RIGHT$(STR$(JJ + 1), 1) KANS = MID$(PKTXT$, 9 + JJ, 1) GOTO 399 405 N = N - 1 GOTO 384 REM REM ESTABLISHMENT OF CUMULATIVE STATISTICS REM REM INCLUDES SORTING OF ALL NEW ENTRIES IN .STT FILES. REM REM STRATEGY: REM ALL BANK FILE NAMES USED IN TEST ARE USED TO SORT CONTENTS OF .STT FILES. REM THEN READ FROM SOCRATES TEST FILE (TAPE9) AND WRITE SEQUENCE OF ITEMS REM FROM VERSION 0 ONTO TAPE13. SORT TAPE13 BY MAJOR KEY OF BANK # AND REM MINOR KEY OF ITEM ID. OUTPUT THE SORT TO TAPE13. CLOSE TAPE13 AND REM RE-OPEN IT AS INPUT. OPEN TAPE14 FOR OUTPUT. READ ENTRIES ON TAPE13. REM IF BANK CHANGES, CLOSE OLD .STT FILE, OPEN NEW .STT FILE. READ THROUGH REM .STT FILE UNTIL ID IS FOUND. IF ANS = " " ON TAPE13, WRITE RECORD WITH REM ZEROS ON TAPE14. IF ID IS NOT FOUND, THEN READ NEXT ENTRY ON TAPE13 AND REM REPEAT PROCESS IF ID IS FOUND THEN IT MAY OCCUR SEVERAL TIMES BECAUSE OF REM THE VARIOUS FORMS USED. ADD UP RESPONSE PROFILES, CALCULATE OVERALL REM DIFFICULTY AND OVERALL DISCRIMINATION INDEX WEIGHTED BY THE NUMBEROF REM STUDENTS HAVING HAD EACH FORM. WRITE RESULTS ON TAPE14. THEN, SORT REM TAPE14 ON TEST SEQUENCE #. OPEN TAPE5 FOR OUTPUT ON STANDARD PRINTER REM DEVICE. IF A SEQUENCE # IS MISSING OR THE GIVEN ANSWER = " ", WRITE REM APPROPRIATE MESSAGES TO PRINTER (TAPE5). OTHERWISE, ADD TO CALCULATED REM PREDICTED SCORE BASED UPON RESULTS OF ALL STUDENTS PREVIOUSLY EXPOSED REM TO THESE ITEMS. AFTER ALL ITEMS HAVE BENN TALLIED, WRITE PREDICTED MEAN REM SCORE FOR THIS GROUP OF ITEMS. REM 1001 PRINT "Sorting of all statistics files by item number now beginning." FOR N = 1 TO MM SPATH$ = "SORT /+1 <" + DSK$(11) + NBTEMP(N) + ".STT >" + DSK$(11) + "INTFILE1" SHELL SPATH$ DPATH$ = "DEL " + DSK$(11) + NBTEMP(N) + ".STT" SHELL DPATH$ RPATH$ = "REN " + DSK$(11) + "INTFILE1 " + NBTEMP(N) + ".STT" SHELL RPATH$ PRINT "Sorting of statistics file "; NBTEMP(N); ".STT now complete." NEXT N REM REM KB(N)=BANK NAME OF NTH ITEM REM SOKSEQ(N)=SOCRATES ITEM NUMBER REM MM=NUMBER OF UNIQUE BANKS USED REM NMAX=TOTAL # OF ITEMS REM 167 CLOSE 13 CLOSE 14 REM REM SORT TAPE13: MAJOR, BANK; MINOR,ID REM SPATH$ = "SORT /+4 <" + DSK$(3) + "TAPE13 >" + DSK$(3) + "TAPE15" SHELL SPATH$ DPATH$ = "DEL " + DSK$(3) + "TAPE13" SHELL DPATH$ RPATH$ = "REN " + DSK$(3) + "TAPE15 TAPE13" SHELL RPATH$ REM REM ASSUMPTION: ALL ENTRIES ON TAPE13 EXIST AS SOCRATES ITEMS REM THIS ASSUMPTION SHOULD BE O.K. BECAUSE THE ENTRIES SHOULD NOT REM OCCUR IN TAPE13 UNLESS THE ITEMS HAVE CLEARLY BEEN FOUND IN REM EARLIER PROCESSING OF THIS PROGRAM. REM REM READ ENTRY ON TAPE13 REM REM NOTES WHICH WERE MADE WHILE WRITING THIS PART: REM TWO PROCESSES HAVE TO BE CARRIED OUT. REM ONE FOR ALL THE ENTRIES OF A SINGLE ITEM. REM ONE FOR ALL QUESTIONS WHOSE STATISTICS HAVE BEEN RECORDED REM HERE ARE SOME VARIABLES REM NMANS%(1-->6) NUMBER OF PEOPLE WHO HAVE ANSWERED A-->E OR OMITTED IN ONE QUESTION REM TMANS(1-->6) # OF PEOPLE WHO HAVE (unreadable) FOR ALL ENTRIES OF A QUESTION REM ****** NOTE ******** TMANS IS NOT CURRENTLY USED IN THIS PROGRAM. WHY? REM TDIFF() DIFFICULTY LEVEL FOR SUM OF FORMS FOR A QUESTION REM DISC: INSTANTANEOUS DISCRIMINIATION INDEX REM TDISC(): WEIGHTED DISC. INDEX REM NRT%: # OF STUDENT-RIGHT ANSWERS REM NTOT%: # OF STUDENT ANSWERS ON THIS QUEST. REM NGTOT%: # OF STUDENT (UNREADABLE) ON THIS TEST REM NSTAT% # OF QUESTIONS FOR WHICH THERE ARE STATISTICS REM NQST%: TOTAL # OF QUESTIONS ON TEST REM REM HERE WE GO REM FLAG6% = 0 NRT% = 0 NGRT% = 0 NGTOT% = 0 NSTAT% = 0 PRSC = 0 JBANK = "" OPEN "I", #13, DSK$(3) + "TAPE13" OPEN "O", #14, DSK$(3) + "TAPE14" DO UNTIL EOF(13) REM REM BEGINNING OF LOOP WHICH ENDS AT 290 REM 264 LINE INPUT #13, IDUM$ NSTAT% = NSTAT% + 1 FOR N = 1 TO 6 NMANS%(N) = 0 NEXT N NRT% = 0 NTOT% = 0 TDIFF = 0 TDISC = 0 IBANK = MID$(IDUM$, 4, 5) NFILE = MID$(IDUM$, 9, 8) N$ = LEFT$(IDUM$, 3) IF IBANK = JBANK THEN 280 FLAG6% = 0 CLOSE 11 JBANK = IBANK OPEN "I", #11, DSK$(11) + LEFT$(JBANK, 5) + ".STT" 280 IF FLAG6% <> 1 THEN 263 FLAG6% = 0 GOTO 269 263 ON ERROR GOTO 366 LINE INPUT #11, K$ IF ZERR = 0 THEN 269 ZERR = 0 GOTO 268 269 IF LEFT$(K$, 8) > NFILE THEN 275 ELSE 278 275 FLAG6% = 1 IF NTOT% = 0 THEN 265 ELSE 268 265 PRINT #IOUT, "MICROSOC QUESTION"; NFILE; " NOT FOUND IN FILE "; IBANK + ".STT"; "SEQUENCE" GOTO 290 278 IF LEFT$(K$, 8) < NFILE GOTO 263 266 FOR N = 1 TO 6 NMANS%(N) = NMANS%(N) + VAL(MID$(K$, 31 + (N - 1) * 6, 6)) NTOT% = NTOT% + NMANS%(N) NGTOT% = NGTOT% + NMANS%(N) NEXT N DISC = VAL(MID$(K$, 75, 6)) TDISC = TDISC + DISC * NTOT% KANS = MID$(K$, 30, 1) FOR N = 1 TO 5 IF KANS = CHR$(65 + N - 1) THEN 267 NEXT N REM REM SUM UP # OF RIGHT ANSWERS FOR THIS ONE QUESTION REM 267 NRT% = NRT% + NMANS%(N) NGRT% = NGRT% + NMANS%(N) GOTO 263 268 TDISC = TDISC / NTOT% TDIFF = (NTOT% - NRT%) / NTOT% PRSC = PRSC + TDIFF PRINT #14, USING F269$; N$; JBANK; NFILE; KANS; NMANS%(1); NMANS%(2); NMANS%(3); NMANS%(4); NMANS%(5); NMANS%(6); TDIFF; TDISC REM REM END OF LOOP WHICH STARTED BEFORE STATEMENT 264 REM 290 LOOP REM REM CLOSE CURRENT BANK STATISTICS FILE (11) REM CLOSE LIST OF ITEMS IN FORMAT: QST #, BANK #, 8-DIGIT ITEM NUMBER (13) REM CLOSE FILE HOLDING ACCUMULATED STATISTICS NOT YET SORTED BY QST # (14) REM CLOSE 11 CLOSE 13 CLOSE 14 REM REM CALCULATE PREDICTED MEAN SCORE REM PRSC = (1 - PRSC / NSTAT%) * NQST% REM REM DOS COMMANDS FOR SORTING TAPE14 WITH OUTPUT ON TAPE14. REM USE TEST QUESTION SEQUENCE # AS KEY REM SPATH$ = "SORT /+1 <" + DSK$(3) + "TAPE14 >" + DSK$(3) + "TAPE15" SHELL SPATH$ DPATH$ = "DEL " + DSK$(3) + "TAPE14" SHELL DPATH$ RPATH$ = "REN " + DSK$(3) + "TAPE15 TAPE14" SHELL RPATH$ PRINT #IOUT, " " PRINT #IOUT, "Cumulative statistics for MICROSOC questions on your test:" PRINT #IOUT, " " OPEN "I", #14, DSK$(3) + "TAPE14" ISEQ% = 0 DO UNTIL EOF(14) LINE INPUT #14, K$ NSEQ% = VAL(MID$(K$, 1, 3)) 273 IF NSEQ% <= ISEQ% + 1 THEN 270 ISEQ% = ISEQ% + 1 PRINT #IOUT, "TEST QUESTION OF SEQUENCE # "; ISEQ%; "DID NOT HAVE STATISTICS CALCULATED" GOTO 273 270 ISEQ% = ISEQ% + 1 PRINT #IOUT, USING F274$; NSEQ%; RIGHT$(K$, LEN(K$) - 3) 271 LOOP PRINT #IOUT, " " PRINT #IOUT, "PREDICTED MEAN SCORE BASED ON STATISTICS CALCULATED FOR" PRINT #IOUT, NSTAT%; " QUESTIONS, EXTRAPOLATED TO RAW SCORE BASED ON "; NQST% PRINT #IOUT, "QUESTIONS ON TEST = "; PRSC PRINT #IOUT, " " CLOSE END SUB SUB YESNO (JS%) DIM IR AS STRING * 4 48 INPUT IR IF LEFT$(IR, 1) = "N" OR LEFT$(IR, 1) = "n" THEN 66 IF LEFT$(IR, 1) = "Y" OR LEFT$(IR, 1) = "y" THEN 67 IF LEFT$(IR, 1) = "S" OR LEFT$(IR, 1) = "s" THEN 395 PRINT "YES, NO OR STOP ONLY ALLOWED HERE. PLEASE RETYPE" GOTO 48 66 JS% = 2 EXIT SUB 67 JS% = 1 EXIT SUB 395 JS% = 3 EXIT SUB END SUB

Disclaimer: The views and opinions expressed on unofficial pages of California State University, Dominguez Hills faculty, staff or students are strictly those of the page authors. The content of these pages has not been reviewed or approved by California State University, Dominguez Hills.