1  REM  ****  HP BASIC PROGRAM LIBRARY  *******************************
2  REM
3  REM        DRAG:   SIMULATES A DRAG RACE
4  REM
5  REM        36601 REV  B   10/73
6  REM
7  REM  ****  CONTRIBUTED PROGRAM  ************************************
10  DIM I$[3],P[2],E[2],W[2],S[2],X[2],M[2],C[2],B[2],Y[2]
20  DIM Q[2]
30  PRINT "WELCOME TO THE DRAG STRIP."
40  PRINT "WOULD YOU LIKE INSTRUCTIONS",
50  INPUT I$
60  IF I$="NO" THEN 110
70  PRINT "YOU MAY RACE AGAINST ONE OF YOUR FRIENDS OR YOU MAY RACE"
80  PRINT "AGAINST MY DRAGSTER.  YOU WILL BE ASKED TO DESIGN YOUR"
90  PRINT "OWN MACHINE, SPECIFYING HORSEPOWER, REAR END RATIO (X:1),"
100  PRINT "TIRE WIDTH IN INCHES AND TIRE DIAMETER IN FEET."
110  PRINT "DO YOU WANT TO RACE AGAINST ME",
120  INPUT I$
130  IF I$="NO" THEN 200
140  PRINT "I WILL HAVE CAR#1."
150  P[1]=600
160  E[1]=5.9
170  W[1]=22
180  D[1]=3.9
190  GOTO 290
200  PRINT "DESIGN CAR#1:"
210  PRINT "HORSEPOWER=",
220  INPUT P[1]
230  PRINT "REAR END RATIO=",
240  INPUT E[1]
250  PRINT "TIRE WIDTH=",
260  INPUT W[1]
270  PRINT "TIRE DIAMETER=",
280  INPUT D[1]
290  PRINT "DESIGN CAR#2:"
300  PRINT "HORSEPOWER=",
310  INPUT P[2]
320  PRINT "REAR END RATIO=",
330  INPUT E[2]
340  PRINT "TIRE WIDTH=",
350  INPUT W[2]
360  PRINT "TIRE DIAMETER=",
370  INPUT D[2]
380  PRINT 
390  PRINT "GO!"
400  K1=500
410  K2=1.6
420  K3=2
430  K4=.0006
440  K5=.00006
450  K6=.2
460  K7=4
470  K8=.00015
480  Q[1]=Q[2]=0
490  S[1]=S[2]=0
500  X[1]=X[2]=0
510  REM:M IS MASS
520  FOR J=1 TO 2
530  M[J]=(K1+K2*P[J]+K3*W[J]*D[J]+K7*D[J]^2)/32.2
540  REM:C IS DRAG FROM WIND
550  C[J]=K4*M[J]^(2/3)+K8*W[J]*D[J]
560  REM:B IS tHE MAX ACCELERATION WITHOUT BURNING
570  B[J]=15+28*W[J]*D[J]/((W[J]+6)*(D[J]+1))
580  REM:Y IS THE SCALE FACTOR FOR RPM VS POWER
590  Y[J]=3.7-.0033*P[J]
600  NEXT J
610  PRINT 
620  PRINT 
630  PRINT "ELAPSED";TAB(15);"CAR#1";TAB(39);"CAR#2"
640  PRINT "TIME   SPEED      DISTANCE     SPEED      DISTANCE"
650  PRINT "(SEC)  (MPH)        (FT)       (MPH)        (FT)"
660  PRINT 
670  FOR T=0 TO 100 STEP 1
680  FOR T1=1 TO 100 STEP 1
690  FOR J=1 TO 2
700  REM:R IS RPM
710  R=60*S[J]*E[J]/(3.14159*D[J])
720  REM:L0 IS ENGINE TORQUE
730  L0=(P[J]/42.5)*(50+.0078*(R/Y[J])-4.E-10*(R/Y[J])^3)
740  REM:L1 IS TORQUE FROM FRICTION
750  L1=P[J]*(K5*R+K6)
760  REM:L2 IS REAR AXEL TORQUE
770  L2=E[J]*(L0-L1)
780  REM F IS FORCE ON ROAD FROM TIRES
790  F=2*L2/D[J]
800  REM:TEST FOR BURN
810  IF F>M[J]*B[J] THEN 880
820  REM:A=ACCELERATION
830  IF Q[J] <> 0 THEN 860
840  PRINT "CAR#";J;"STOPS BURNING RUBBER"
850  Q[J]=1
860  A=(F-C[J]*S[J]^2)/M[J]
870  GOTO 900
880  A=B[J]-C[J]*S[J]^2/M[J]
890  REM:S=SPEED IN FT/SEC
900  S[J]=S[J]+A*.01
910  REM:x=DISTANCE IN FT
920  X[J]=X[J]+S[J]*.01
930  NEXT J
940  REM:TEST FOR FINISH
950  IF X[1]<5280/4 AND X[2]<5280/4 THEN 1160
960  IF X[1]>X[2] THEN 1080
970  T3=(X[2]-5280/4)/S[2]
980  T=T+T1/100-T3
990  X[2]=5280/4
1000  X[1]=X[1]-S[1]*T3
1010  PRINT T;S[1]*3600/5280;X[1];S[2]*3600/5280;X[2]
1020  PRINT TAB(40);"WINNER"
1030  PRINT 
1040  PRINT "DO YOU WANT TO TRY AGAIN",
1050  INPUT I$
1060  IF I$="YES" THEN 110
1070  STOP 
1080  T3=(X[1]-5280/4)/S[1]
1090  T=T+T1/100-T3
1100  X[1]=5280/4
1110  X[2]=X[2]-S[2]*T3
1120  PRINT T;S[1]*3600/5280;X[1];S[2]*3600/5280;X[2]
1130  PRINT TAB(10);"WINNER"
1140  PRINT 
1150  GOTO 1040
1160  NEXT T1
1170  PRINT T+1;S[1]*3600/5280;X[1];S[2]*3600/5280;X[2]
1180  NEXT T
1190  STOP 
1200  END 
