' REACTION TIME CONST FMT$ = "&##.##", MaxPts = 100 EV$(1) = "DISAPPEARANCE": EV$(2) = "REAPPEARANCE" DIM F AS INTEGER, I AS INTEGER, J AS INTEGER, N AS INTEGER DIM CNT(2) AS INTEGER: CNT(1) = 0: CNT(2) = 0 DIM R(2, MaxPts), Sorted(2, MaxPts) RANDOMIZE TIMER CLS PRINT " STELLAR OCCULTATION REACTION TIME TESTER" PRINT PRINT "Star(s) will be displayed in the center of the screen." PRINT "The star at the center will flash on and off at random intervals." PRINT "When the star blinks, press a key as soon as possible." PRINT "Statistics on your reaction time will be accumulated." PRINT "To stop and view the statistics press the Space Bar." PRINT PRINT ' Determine computer speed. T0 = TIMER FOR L = 1 TO 5000: NEXT L T = TIMER - T0 M = 50000 / T ' Select options. PRINT "Flash at Random or Fixed Positions (R/F)" DO: Flash$ = UCASE$(INKEY$): LOOP UNTIL Flash$ = "R" OR Flash$ = "F" DO ' Process. ' Display flashing star and get reaction time. X = 0: Y = 0 ' Star initially at center. SCREEN 9: WINDOW (-100, -73)-(100, 73) ' Center of screen = (0,0). CLS : CIRCLE (0, 0), 50, 1 IF Flash$ = "F" THEN ' Insert some field stars. FOR I = 1 TO 7 R = 49.7 * RND + .3: A = 6.283 * RND PSET (R * COS(A), R * SIN(A)), FIX(RND + .2) * 8 + 7 NEXT I FOR I = 1 TO 15 R = 50! * RND: A = 6.283 * RND PSET (R * COS(A), R * SIN(A)), 8 NEXT I END IF F = 1: PSET (X, Y), 7 ' Turn on test star. DO ' Turn star on or off. T = M * RND + .1 * M FOR D = 0 TO T: NEXT D ' Time delay before next event IF F = 1 THEN PRESET (X, Y) ' Turn off star. ELSE IF Flash$ = "R" THEN ' Calculate next random position. R = 40! * RND: A = 6.283 * RND: X = R * COS(A): Y = R * SIN(A) END IF PSET (X, Y), 7 ' Turn on star. END IF ' Get reaction time. T0 = TIMER DO: P$ = INKEY$: LOOP UNTIL P$ <> "" RT = TIMER - T0 IF P$ = " " THEN EXIT DO ELSEIF RT = 0! OR RT > 2! THEN PRINT "*** OUT OF SYNCH ***": SLEEP 1 EXIT DO ELSEIF CNT(F) = MaxPts THEN PRINT "*** OUT OF SPACE ***": SLEEP 2 EXIT DO ELSE CNT(F) = CNT(F) + 1: R(F, CNT(F)) = RT: Sorted(F, CNT(F)) = RT F = F + 1: IF F > 2 THEN F = 1 END IF LOOP ' End Turn star on or off. ' Calculate and print statistics. SCREEN 0 FOR F = 1 TO 2 PRINT EV$(F) N = CNT(F) S = 0!: S2 = 0! FOR I = 1 TO N PRINT USING "#.## "; R(F, I); S = S + R(F, I) NEXT I PRINT : PRINT IF N < 2 THEN GOTO StatsEnd PRINT "Number of Data Points = "; N ' Sort Reaction Times FOR I = 2 TO N FOR J = N TO I STEP -1 IF Sorted(F, J) < Sorted(F, J - 1) THEN SWAP Sorted(F, J), Sorted(F, J - 1) END IF NEXT J NEXT I PRINT USING FMT$; "Min. = "; Sorted(F, 1) PRINT USING FMT$; "Max. = "; Sorted(F, N) MidPt = (N + 1) / 2 Median = (Sorted(F, MidPt - .1) + Sorted(F, MidPt + .1)) / 2 PRINT USING FMT$; "Median = "; Median PRINT USING FMT$; "Mean = "; S / N FOR I = 1 TO N S2 = S2 + (R(F, I) - S / N) ^ 2 NEXT I S2 = SQR(S2 / (N - 1)) PRINT USING FMT$; "Std.Dev. = "; S2 PRINT StatsEnd: NEXT F IF CNT(1) = MaxPts THEN SYSTEM PRINT "Continue to Add Data (Y/N)", DO: A$ = UCASE$(INKEY$): LOOP UNTIL A$ = "Y" OR A$ = "N" LOOP UNTIL A$ = "N" ' End Process. SYSTEM ' ========================================== ' Based on a program published in ' SKY & TELESCOPE, AUGUST, 1986, PAGE 174 ' Rewritten by Gary Goodman ' email: 76012,3675@compuserve.com ' ==========================================