92 REM SUNSET 93 REM TRANSLATED TO BASIC-PLUS BY PROJECT DELTA 99 REM 100 REM SUNRISE AND SUNSET COMPUTED FOR ANY STATION 105 REM DATA (DAY,MONTH) MAY BE PUT AT 900+ 106 REM END DATA BLOCK WITH PAIR 99,99 110 DATA 317.5,348.5,377.5,408.5,438.5,469.5 120 DATA 499.5,530.5,561.5,591.5,622.5,652.5 130 DATA 6.65028,8.6875,10.5931,12.63,14.6011,16.6383 140 DATA 18.6097,20.6467,22.6836,.655,2.69194,4.66306 160 DATA 108,102,96,90.8333,108,102,96,90.8333 170 DIM J(12),V(8),U(8),S(12),B(2) 172 C=3.14159/180 174 READ J(K9) FOR K9=1 TO 12 180 READ S(K9) FOR K9=1 TO 12 186 FOR K9=1 TO 8 188 READ V(K9) 190 V(K9)=V(K9)*C 192 NEXT K9 193 Z=5 194 L3=39.1849 195 L4=84.329 200 READ D,M 201 IF D<>99 THEN 204 202 GOTO 9999 204 IF D<>9999 THEN213 208 INPUT 'DAY AND MONTH';D,M 210 PRINT 212 PRINT 213 PRINT ' TWILIGHT PHENOMENA FOR WEEK OF '; 216 ON M GOTO 217,219,221,223,225,227,229,231,233,235,237,239 217 PRINT 'JAN';:GOTO240 219 PRINT 'FEB';:GOTO240 221 PRINT 'MAR';:GOTO240 223 PRINT 'APR';:GOTO240 225 PRINT 'MAY';:GOTO240 227 PRINT 'JUN';:GOTO240 229 PRINT 'JUL';:GOTO240 231 PRINT 'AUG';:GOTO240 233 PRINT 'SEP';:GOTO240 235 PRINT 'OCT';:GOTO240 237 PRINT 'NOV';:GOTO240 239 PRINT 'DEC'; 240 PRINT D;'TO';D+6 241 PRINT 242 PRINT 'FOR STATION LATITUDE ';L3;'AND LONGITUDE ';L4;'DEGREES' 243 PRINT 'IN TIME ZONE ';Z 245 PRINT 250 PRINT TAB(9);'ASTRONOMICAL NAUTICAL CIVIL '; 260 PRINT 'RISE/SET AZIMUTH' 300 PRINT TAB(11);'HR MIN HR MIN HR MIN HR MIN'; 310 PRINT ' DEGREES' 1000 DEF FNB(X)=ATN(SQR(1-X^2)/X) 1010 DEF FNA(X)=ATN(X/SQR(1-X^2)) 1049 P=3.14159 1052 L1=L3*C 1054 L2=L4*C 1056 S3=236.55/3600*15*C 1060 G=282.442+180 1080 R=.985647 1085 E=1.67213E-02 1090 E2=E^2/2 1115 T=319.679 1132 PRINT 'SUN' 1134 GOSUB 1170 1136 PRINT 'MON' 1138 GOSUB 1170 1140 PRINT 'TUE' 1142 GOSUB 1170 1144 PRINT 'WED' 1146 GOSUB 1170 1148 PRINT 'THUR' 1150 GOSUB 1170 1152 PRINT 'FRI' 1154 GOSUB 1170 1156 PRINT 'SAT' 1158 GOSUB 1170 1160 PRINT:PRINT 1164 READ D,M 1165 IF D<>9999 THEN 201 1166 RESTORE 1167 GOTO 100 1169 REM DETERMINE TIME FOR CHOSEN ZENITH ANGLE 1170 J1=J(M)+D-1 1172 S0=S(M)*15*C+(D-1)*S3 1173 J2=J1 1176 K1=1 1178 GOSUB 4010 1179 R4=A 1180 FOR N=1 TO 8 1190 FOR M1=1 TO 3 1200 C2=-TAN(L1)*TAN(D2)+1/COS(L1)/COS(D2)*COS(V(N)) 1202 IF ABS(C2)<1 THEN 1222 1204 U(N)=99 1206 GOTO 1350 1222 IF C2>=0 THEN 1230 1224 H=FNB(C2)+P 1226 GOTO 1240 1230 H=FNB(C2) 1240 IF N>4 THEN 1270 1250 H=-1*ABS(H) 1260 GOTO 1290 1270 H=ABS(H) 1290 S4=H+R4 1300 T3=(S4-S0+L2)/(1+S3/6.28319) 1310 J1=J2+T3/24 1320 GOSUB 4010 1322 R4=A 1330 NEXT M1 1340 U(N)=T3/C/15-42/3600 1350 IF N=4 OR N=8 THEN 1356 1355 GOTO 1450 1356 IF U(N)<>99 THEN 1360 1357 B(K1)=999 1358 GOTO 1395 1360 Y=-COS(D2)*SIN(H)/COS(P/2-V(N)) 1370 X=(SIN(D2)*COS(L1)-COS(D2)*COS(H)*SIN(L1))/COS(P/2-V(N)) 1380 GOSUB 8000 1390 B(K1)=A/C 1395 K1=K1+1 1450 NEXT N 1455 D=D+1 1465 GOSUB 6000 1470 RETURN 4000 REM SOLVE KEPLER'S EQN 4010 R1=R*(J1-T)*C 4020 E3=R1+E*SIN(R1)+E2*SIN(2*R1) 4030 R2=E3-E*SIN(E3) 4040 D1=(R1-R2)/(1-E*COS(E3)) 4050 E3=E3+D1 4060 IF ABS(D1)<=.00001 THEN 4080 4070 GOTO 4030 4080 R3=1-E*COS(E3) 4090 T2=SQR((1+E)/(1-E))*TAN(E3/2) 4100 F=2*ATN(T2)/C 4110 L=G+F+180+.01719*(J1-T)/365.25 4120 IF L<=360 THEN 4160 4130 L=L-360 4140 GOTO 4120 4160 L=L*C 4170 S1=SIN(L)*.397835 4180 D3=SQR(1-S1^2) 4210 D2=FNA(S1) 4220 X=COS(L)/D3 4230 Y=SIN(L)*.917457/D3 4240 GOSUB 8000 4250 RETURN 5000 REM GOSUB FOR UNPACKING 5010 IF W<0 THEN Q8=-1 ELSE IF W=0 THEN Q8=0 ELSE Q8=1 5011 W1=Q8*INT(ABS(W)) 5020 W2=ABS(W-W1)*60 5030 W3=INT(W2+.5) 5040 IF W3<60 THEN 5050 5042 W3=0 5044 W1=W1+1 5050 RETURN 6000 PRINT 'MORNING'; 6020 K3=1 6025 B1=1 6030 PRINT TAB(10); 6035 FOR K1=K3 TO K3+3 6036 IF U(K1)<> 99 THEN 6040 6037 PRINT ' ******** '; 6038 GOTO 6080 6040 W=U(K1)-Z 6042 IF W>=0 THEN 6046 6044 W=W+24 6045 GOTO 6050 6046 IF W<24 THEN 6050 6048 W=W-24 6050 GOSUB 5000 6060 PRINT USING '##',W1;:PRINT' ';:PRINT USING '##',W3;: PRINT' '; 6080 NEXT K1 6085 IF B(B1)<>999 THEN 6090 6086 PRINT '*****' 6087 GOTO 6095 6090 PRINT INT((B(B1)+.05)*10)/10 6095 IF K1>=8 THEN 6150 6100 PRINT 'EVENING'; 6110 B1=2 6120 K3=5 6130 GOTO 6030 6150 PRINT 6160 RETURN 8000 REM FOUR-QUAD ARCTAN 8020 A=ATN(Y/X) 8030 IF X<0 OR Y<0 THEN 8050 8040 RETURN 8050 IF X>0 AND Y<0 THEN 8080 8060 A=A+P 8070 RETURN 8080 A=A+2*P 8090 RETURN 9000 DATA 19,3,99,99 9988 DATA 9999,9999,9999,9999 9999 END