10  REM  ****  HP BASIC PROGRAM LIBRARY  ******************************
20  REM
30  REM        SLITS:  YOUNG'S DOUBLE SLIT EXPERIMENT
40  REM
50  REM        36351  REV B  --  10/73
60  REM
70  REM  ****  CONTRIBUTED PROGRAM  **********************************
80  REM SLITS--COPYRIGHT 1971, STATE UNIVERSITY OF NEW YORK
90  REM LATEST REVISION 8-27-72
100  REM YOUNG'S DOUBLE SLIT EXPERIMENT 
110  REM A.C. CAGGIANO
120  REM REVISED 7/28/70 (L. BRAUN, D. PESSEL)
130  REM IMPORTANT VARIABLES:  L-DISTANCE BETWEEN SLITS+SCREEN; 
140  REM W-WAVELENGTH; D-SLIT SEPARATION(CENTER TO CENTER)
150  REM  
160  REM U:  PRINT PARAMETER FOR UNKNOWN WAVELENGTH 
170  LET U=0
180  PRINT " ","YOUNG'S DOUBLE SLIT EXPERIMENT"
190  PRINT 
200  REM ILLUSTRATIVE RUN 
210  LET L=2
220  LET W=6000
230  LET D=.5
240  REM PLOT ROUTINE 
250  GOSUB 1110
260  PRINT 
270  PRINT "ABOVE IS AN ILLUSTRATIVE RUN WITH PRE-DETERMINED"
280  PRINT "VALUES FOR WAVELENGTH (W), DISTANCE BETWEEN SLITS"
290  PRINT "AND SCREEN (L), AND SLIT SEPARATION - CENTER TO"
300  PRINT "CENTER (D).  NOW YOU MAY VARY THESE PARAMETERS,"
310  PRINT "ONE AT A TIME."
320  PRINT 
330  PRINT "*****"
340  PRINT 
350  REM D INPUT SUBROUTINE 
360  GOSUB 1570
370  REM PLOT ROUTINE 
380  GOSUB 1110
390  PRINT 
400  PRINT "WOULD YOU LIKE TO TRY ANOTHER VALUE OF D (1-YES, 0-NO)";
410  INPUT Q1
420  IF Q1>0 THEN 360
430  PRINT 
440  PRINT "*****"
450  PRINT 
460  REM RESET D
470  LET D=.5
480  REM W INPUT SUBROUTINE 
490  GOSUB 1710
500  REM PLOT SUBROUTINE
510  GOSUB 1110
520  PRINT 
530  PRINT "WOULD YOU LIKE TO TRY ANOTHER VALUE OF W (1-YES, 0-N0)";
540  INPUT Q2
550  IF Q2>0 THEN 490
560  PRINT 
570  PRINT "*****"
580  PRINT 
590  REM RESET W
600  LET W=6000
610  REM L INPUT SUBROUTINE 
620  GOSUB 1410
630  REM PLOT SUBROUTINE
640  GOSUB 1110
650  PRINT 
660  PRINT "WOULD YOU LIKE TO TRY ANOTHER VALUE OF L (1-YES, 0-NO)";
670  INPUT Q3
680  IF Q3>0 THEN 620
690  PRINT 
700  PRINT "*****"
710  PRINT 
720  REM RESET L
730  LET L=2
740  PRINT "YOU WILL NOW BE GIVEN A LIGHT SOURCE OF UNKNOWN"
750  PRINT "WAVELENGTH.  YOU WILL SPECIFY THE SLIT SEPARATION (D),"
760  PRINT "AND THE DISTANCE FROM SLITS TO SCREEN (L)."
770  REM Q5 DETERMINES IF W IS TO BE CHANGED
780  LET Q5=0
790  REM D INPUT SUBROUTINE 
800  GOSUB 1570
810  REM L INPUT SUBROUTINE 
820  GOSUB 1410
830  REM CHANGE W?
840  IF Q5>0 THEN 880
850  REM RANDOMLY DETERMINE WAVELENGTH
860  LET W=1000*INT(3*RND(X)+4.5)
870  REM PLOT SUBROUTINE (UNKNOWN W)
880  LET U=1
890  GOSUB 1110
900  PRINT 
910  PRINT "WOULD YOU LIKE A PLOT FOR OTHER VALUES OF D AND L ";
920  PRINT "(1-YES, 0-NO)";
930  INPUT Q5
940  IF Q5>0 THEN 800
950  PRINT "WHAT DO YOU THINK THE UNKNOWN WAVELENGTH (W) IS";
960  INPUT W1
970  IF ABS(W1-W)<.1*W THEN 1010
980  PRINT "YOU ARE MORE THEN 10% OFF.  TO HELP YOU, YOU MAY ";
990  PRINT "OBTAIN MORE PLOTS."
1000  GOTO 910
1010  PRINT "PRETTY GOOD!  THE WAVELENGTH WAS "W" ANGSTROMS."
1020  PRINT "WOULD YOU LIKE TO TRY ANOTHER UNKNOWN WAVELENGTH";
1030  PRINT "(1-YES, 0-NO)";
1040  INPUT Q6
1050  IF Q6<1 THEN 1860
1060  PRINT "YOU MAY SPECIFY A NEW SLIT SEPARATION (D) AND DISTANCE"
1070  PRINT "FROM SLITS TO SCREEN (L)."
1080  GOTO 780
1090  REM
1100  REM PLOT ROUTINE 
1110  PRINT 
1120  PRINT 
1130  REM U>0 DO NOT PRINT WAVELENGTH
1140  IF U>0 THEN 1180
1150  PRINT "L ="L"METERS    W ="W"ANGSTROMS    D ="D"MILLIMETERS"
1160  PRINT 
1170  GOTO 1200
1180  PRINT "L ="L"METERS    W = ? ANGSTROMS    D ="D"MILLIMETERS"
1190  PRINT 
1200  PRINT "DISTANCE (MM'S FROM CENTER)"
1210  REM A:PLOT LOWER LIMIT (MM'S); B:UPPER LIMIT (MM'S)
1220  LET A=-.26
1230  LET B=.26
1240  REM R:PRELIMINARY CALC. FOR INTENSITY; 10E4:CONVERSION FACTOR
1250  LET R=(3.1416*D*100000.)/(W*L)
1260  REM LOOP TO CALCULATE PATTERN AND PLOT IT
1270  FOR X=A TO B STEP .02
1280  REM Y:INTENSITY
1290  REM 20:SCALE FACTOR FOR PLOT; X:DISTANCE (MM'S)
1300  LET Y=20*COS(R*X)*COS(R*X)
1310  IF ABS(X)<.0001 THEN 1340
1311  IF INT(Y+20.5)#20 THEN 1320
1312  PRINT TAB(8);INT(X*100+.5)/100;TAB(20);"*"
1313  GOTO 1350
1320  PRINT TAB(8);INT(X*100+.5)/100;TAB(20);".";TAB(INT(Y+20.5));"*"
1330  GOTO 1350
1340  PRINT "....................O....INTENSITY......*"
1350  NEXT X
1360  LET U=0
1370  PRINT 
1380  RETURN 
1390  REM
1400  REM L INPUT SUBROUTINE 
1410  PRINT "WHAT IS THE NEW DISTANCE FROM SLITS TO SCREEN (L) ";
1420  PRINT "IN METERS";
1430  INPUT L
1440  REM 1000:  CONVERT L(METERS) TO L(MILLIMETERS) 
1450  IF 1000*L >= 10*D THEN 1490
1460  PRINT "THIS DISTANCE IS TOO SMALL FOR GOOD INTERFERENCE PATTERNS."
1470  PRINT "TRY ANOTHER VALUE."
1480  GOTO 1410
1490  IF L <= 5 THEN 1540
1500  PRINT "ALTHOUGH ANY DISTANCE LARGER THAN "10*D/1000" METERS"
1510  PRINT "IS VALID, ABOVE 5 METERS BECOMES HARD TO SEE.";
1520  PRINT "  TRY ANOTHER VALUE."
1530  GOTO 1410
1540  RETURN 
1550  REM
1560  REM D INPUT SUBROUTINE 
1570  PRINT "WHAT IS THE NEW SLIT SEPARATION (D) IN MILLIMETERS";
1580  INPUT D
1590  IF D >= .1 THEN 1630
1600  PRINT "SLITS ARE SO CLOSE THEY APPROXIMATE A SINGLE SLIT."
1610  PRINT "TRY ANOTHER VALUE."
1620  GOTO 1570
1630  IF D <= .1*1000*L THEN 1680
1640  PRINT "FOR A VALID INTERFERENCE PATTERN, THE SLIT SEPARATION"
1650  PRINT "SHOULD BE LESS THAN ".1*1000*L" MILLIMETERS.  TRY";
1660  PRINT " ANOTHER VALUE."
1670  GOTO 1570
1680  RETURN 
1690  REM
1700  REM W INPUT SUBROUTINE 
1710  PRINT "WHAT IS THE NEW WAVELENGTH (W) IN ANGSTROMS";
1720  INPUT W
1730  IF W >= 3000 THEN 1770
1740  IF W<1000 THEN 1820
1750  PRINT "A WAVELENGTH OF "W" IS ULTRAVIOLET LIGHT AND NOT VISIBLE."
1760  GOTO 1790
1770  IF W <= 8000 THEN 1840
1780  PRINT "A WAVELENGTH OF "W" IS INFRARED LIGHT AND NOT VISIBLE."
1790  PRINT "THE INTERFERENCE PATTERN WILL BE VISIBLE USING DETECTORS"
1800  PRINT "ONLY.  TRY ANOTHER WAVELENGTH."
1810  GOTO 1710
1820  PRINT "A WAVELENGTH OF "W" IS X-RAYS AND NOT VISIBLE."
1830  GOTO 1790
1840  RETURN 
1850  REM
1860  PRINT 
1870  PRINT "*****"
1880  PRINT 
1890  REM MISCELLANEOUS RUNS 
1900  PRINT "WOULD YOU LIKE A PLOT WITH YOUR OWN VALUES FOR WAVELENGTH"
1910  PRINT " (W), SLIT SEPARATION (D), AND DISTANCE FROM SLITS TO"
1920  PRINT "SCREEN (L) (1-YES, 0-NO)";
1930  INPUT Q9
1940  IF Q9<1 THEN 2030
1950  GOSUB 1710
1960  GOSUB 1570
1970  GOSUB 1410
1980  GOSUB 1110
1990  PRINT "ANOTHER ONE (1-YES, 0-NO)"
2000  INPUT Q8
2010  IF Q8>0 THEN 1950
2020  REM
2030  PRINT 
2040  PRINT "**********"
2050  PRINT 
2060  PRINT "HOPE YOU HAD FUN!"
2070  END 
