IMPLICIT REAL(A-Z) INTEGER IDIGIT WRITE(1,1000) 1000 FORMAT('0LUNAR LANDER PROGRAM'/'$DO YOU NEED INSTRUCTIONS (Y/N)?') READ(1,1100) IANS 1100 FORMAT(A1) IF (IANS.NE.1HY) GO TO 250 WRITE(1,1200) 1200 FORMAT('0INPUT FUEL RATE TO BE USED FOR THE NEXT 10 SECOND', 1 /' INTERVAL. IT CAN BE ZERO OR ANY VALUE BETWEEN 8 AND 200', 2 /' LBS/SECOND. A NEGATIVE VALUE WILL IMPLODE THE BOOSTER', 3 /' AND ABORT THE MISSION. CTRL-Z WILL TERMINAL THE PROGRAM.', 4 /' STATUS AT THE END OF EACH 10 SECOND INTERVAL WILL BE', 5 /' PRINTED AT THE TERMINAL.', 6 /'0TOTAL LANDER WEIGHT (INCLUDING 16000 LBS OF FUEL)', 7 /' IS 32500 LBS.', 8 /'0GOOD LUCK!!') 250 L=0. A=120. V=1. M=32500. N=16500. 320 G=.001 Z=1.8 WRITE(1,2500) 2500 FORMAT('0TIME HEIGHT VELOCITY FUEL LEFT FUEL RATE') 350 IF (A.LT.1.) GO TO 355 C HIGH ALTITUDE PRINT OUT V2=V*3600. M2=M-N WRITE(1,3000) L,A,V2,M2,K 3000 FORMAT('$'F4.0,F8.1,' MI',F8.1,' MPH',F8.0,' LBS',F7.1,' LB/S'5X) GO TO 360 C LOW ALTITUDE PRINT OUT 355 V2=V*5280. M2=M-N A2=A*5280. WRITE(1,3500) L,A2,V2,M2,K 3500 FORMAT('$'F4.0,F8.1,' FT',F8.1,' FT/S',F7.0,' LBS',F7.1,' LB/S'5X) C READ NEXT FUEL RATE 360 READ(1,5000,ERR=360,END=9999) K 5000 FORMAT(F10.0) T=10. IF (K.LT.0.) GO TO 250 IF (K.EQ.0.) GO TO 470 IF (K.LT.8.) GO TO 430 IF (K.LE.200.) GO TO 470 430 WRITE(1,6000) K 6000 FORMAT('0',E15.5,' NOT POSSIBLE') GO TO 360 470 IF (M.LE.N) GO TO 590 IF (T.LT.001) GO TO 350 S=T IF (N+S*K.GT.M) S=(M-N)/J IO=1 GO TO 1080 540 IF (I.LE.0.) GO TO 950 IF (V.LE.0.) GO TO 570 IF (J.LT.0.) GO TO 990 570 IO=1 GO TO 880 C OUT OF FUEL 590 WRITE(1,7000) L 7000 FORMAT('0FUEL OUT AT ',E15.5,' SECONDS') S=(-V+SQRT(V*V+2.*A*G))/G V=V+G*S L=L+S C ON THE MOON 630 WRITE(1,8000) L 8000 FORMAT('0ON THE MOON AT ',E15.5,' SECONDS') W=3600.*V WRITE(1,9000) W 9000 FORMAT('0IMPACT VELOCITY OF 'E15.5,' MPH') X=AINT(M-N) WRITE(1,9100) X 9100 FORMAT('0FUEL LEFT = ',E15.5,' LBS') IF (W.GE.1.) GO TO 700 WRITE(1,9200) 9200 FORMAT('0PERFECT LANDING! CONGRATULATIONS, COMMANDER!') GO TO 250 700 IF (W.GE.10.) GO TO 730 WRITE(1,9300) 9300 FORMAT('0VERY GOOD LANDING, NOT PERFECT YET.') GO TO 250 730 IF (W.GE.25.) GO TO 760 WRITE(1,9400) 9400 FORMAT('0FAIR LANDING, NO CRAFT DAMAGE.') GO TO 250 760 IF (W.GE.60.) GO TO 790 WRITE(1,9500) 9500 FORMAT('0CRAFT DAMAGE -- BETTER LUCK NEXT TIME.') GO TO 250 790 X=.277*W IDIGIT=0 IF (X.LT.1000.) IDIGIT=1 IF (X.LT.100.) IDIGIT=2 WRITE(1,9600) X 9600 FORMAT('0YOU HAVE JUST CREATED A NEW LUNAR CRATER ', + F5.,' FEET DEEP') GO TO 250 C 880 L=L+S T=T-S M=M-S*K A=I V=J IF (IO.EQ.1.) GO TO 470 IF (IO.EQ.3.) GO TO 1050 950 IF (S.LT..005) GO TO 630 S=2.*A/(V+SQRT(V*V+2.*A*(G-Z*K/M))) IO=2 GO TO 1080 990 W=(1.-M*G/(Z*K))/2. S=M*V/(Z*K*(W+SQRT(W*W+V/Z)))+.05 IO=3 GO TO 1080 1030 IF (I.LE.0.) GO TO 950 GO TO 880 1050 IF (J.GE.0.) GO TO 470 IF (V.LE.0.) GO TO 470 GO TO 990 1080 Q=S*K/M IF (Q.LT..000001) GO TO 1150 J=V+G*S+Z*(-Q-Q**2/2.-Q**3/3.-Q**4/4.-Q**5/5.) I=A-G*S*S/2.-V*S+Z*S*(Q/2.+Q**2/6.+Q**3/12.+Q**4/20.+Q**5/30.) 1120 IF (IO.EQ.1.) GO TO 540 IF (IO.EQ.2.) GO TO 880 IF (IO.EQ.3.) GO TO 1030 1150 J=V+G*S I=A-G*S*S/2.-V*S GO TO 1120 9999 STOP END