1  REM  ****  HP BASIC PROGRAM LIBRARY  *******************************
2  REM
3  REM        REFLEC:   COMPUTER-AUGMENTED PHYSICS TOPICS (OPTICS)
4  REM
5  REM        36672 REV  A   10/73
6  REM
7  REM  ****  CONTRIBUTED PROGRAM  ************************************
100  PRINT "THIS PROGRAM WILL DEAL WITH THE PHYSICS OF CURVED MIRRORS."
110  PRINT "THE FORMULAS WHICH YOU WILL NEED MAY BE FOUND IN THE MODULE."
120  PRINT "REMEMBER -- TYPE 999999 FOR CALCULATOR MODE."
130  PRINT 
140  PRINT 
145  I=0
150  LET F=INT(100*RND(1))/10+1
160  LET H0=INT(100*RND(1))/10+1
170  LET D0=INT(100*RND(1))/10+1
180  PRINT "THE FOCAL LENGTH OF A CURVED MIRROR IS FOUND TO BE";F;"CM."
190  PRINT "AN OBJECT ";H0;"CM HIGH IS PLACED ";D0;"CM AWAY FROM"
200  PRINT "THE MIRROR. TYPE IN THE IMAGE DISTANCE FROM THE MIRROR IN CM."
210  PRINT "DISTANCE=";
220  INPUT D1
230  IF D1 <> 999999. THEN 260
240  GOSUB 9000
250  GOTO 210
260  IF ABS(1/(1/F-1/D0)-D1)<ABS(D1/50) THEN 300
270  PRINT "NOPE. THE ANSWER IS 1/(1/F-1/D0) = ";1/(1/F-1/D0)
280  PRINT "SEE HOW THAT FORMULA WORKS?"
290  GOTO 310
300  PRINT "GOOD FOR YOU."
310  PRINT "NOW TYPE IN THE HEIGHT OF THE IMAGE (H1) IN CM."
320  PRINT "HEIGHT=";
330  INPUT H1
340  IF H1 <> 999999. THEN 370
350  GOSUB 9000
360  GOTO 320
370  IF ABS(H0*F/(D0-F)-H1)<ABS(H1/50) THEN 420
380  PRINT "NOT QUITE. THE ANSWER IS H0*F/(D0-F) = ";H0*F/(D0-F)
390  PRINT "THIS FORMULA CAN BE DERIVED FROM FORMULAS (1) AND (3)"
400  PRINT "IN THE MODULE, USING A LITTLE ALGEBRA."
410  GOTO 430
420  PRINT "GOOD. YOU'RE RIGHT."
430  GOSUB 800
460  IF L=1 THEN 140
470  PRINT 
480  PRINT "OK, THEN, HOW ABOUT THIS ONE?"
490  PRINT 
500  PRINT 
505  I=1
510  LET D0=INT(1000*RND(1))/100
520  LET D1=INT(1000*RND(1))/100
530  PRINT "THE IMAGE OF AN OBJECT PLACED";D0;"CM AWAY FROM A CURVED"
540  PRINT "MIRROR IS FOUND TO BE LOCATED ";D1;"CM AWAY FROM THE"
550  PRINT "MIRROR.  INPUT THE FOCAL LENGTH OF THE MIRROR."
560  PRINT "FOCAL LENGTH = ";
570  INPUT F
580  IF F <> 999999. THEN 610
590  GOSUB 9000
600  GOTO 560
610  IF ABS(D1*D0/(D1+D0)-F)<ABS(F/50) THEN 670
620  LET F=D1*D0/(D1+D0)
630  PRINT "SORRY, THE ANSWER IS D1*D0/(D1+D0) = ";F
640  PRINT "THIS FORMULA IS JUST ANOTHER WAY TO STATE FORMULA (3)"
650  PRINT "IN THE MODULE.  "
660  GOTO 680
670  PRINT "RIGHT.. GOOD"
680  GOSUB 800
760  IF L=1 THEN 500
770  PRINT "SO LONG, THEN.  TRY THE NEXT PROGRAM, REFRAC."
780  PRINT "AU REVOIR"
790  STOP 
800  PRINT "IS THE IMAGE REAL OR VIRTUAL (1=REAL, 0=VIRTUAL)";
810  INPUT V
820  IF (V=1 AND D0>F) OR (V=0 AND D0<F) THEN 870
830  PRINT "NO, IT IS THE OTHER WAY AROUND."
840  IF I=1 THEN 880
850  PRINT "CLUE: IS THE IMAGE HEIGHT POSITIVE OR NEGATIVE?"
860  GOTO 880
870  PRINT "RIGHT ON!"
880  PRINT 
890  PRINT "DO YOU WANT TO TRY ANOTHER PROBLEM LIKE THIS ONE"
900  PRINT "(0=NO, 1=YES)";
910  INPUT L
920  RETURN 
