5 MODE0 10 REM MOON: Program adapted by D. Ambrose from that given in 20 REM Microsoft QuickBasic 4.5 in Chapter 1 of 30 REM Numerical Recipes in Basic by J. C. Sprott, CUP 1991 40 REM Initial month (IM%), initial day (ID%) and year (IY%) are 50 REM entered in line 140. Program then calculates table. 100 DIM phase$(4) 110 phase$(1)="new moon":phase$(2)="first quarter" 120 phase$(3)="full moon":phase$(4)="last quarter" 130 tzone=0:VDU15 140 IM%=1:ID%=7:IY%=1996 150 PRINT"Date of the next few phases of the moon" 160 PRINT 170 timzon=-tzone/24 180 N%=INT(12.37*(IY%-1900+(IM%-.5)/12)) 190 nphase%=2 200 PROCjulday(IM%,ID%,IY%) 210 J1%=JD% 220 PROCflmoon(N%,nphase%) 230 N%=INT(N%+(J1%-JD%)/28) 240 REM N% is approximate no. of full moons since january 1900 250 PRINT" Date Time(EST) phase" 260 PRINT" day month year hr min" 270 PRINT 280 FOR J%=1 TO 20 290 PROCflmoon(N%,nphase%) 300 ifrac%=INT(24*(frac+timzon)) 310 min%=INT((24*(frac+timzon)-ifrac%)*60) 330 IF ifrac%<0 JD%=JD%-1:ifrac%=ifrac%+24 340 IF ifrac%>=12 JD%=JD%+1:ifrac%=ifrac%-12 ELSE ifrac%=ifrac%+12 350 PROCcaldat(JD%) 360 PRINT OD%,OM%,OY%,ifrac%,min%; 370 PRINT" "phase$(nphase%+1) 380 IF nphase%=3 nphase%=0:N%=N%+1 ELSE nphase%=nphase%+1 390 NEXT J% 400 VDU14:END 410 1000 DEF PROCflmoon(N%,nphase%) 1010 C=N%+nphase%/4 1020 T=C/1236.85 1030 T2=T^2 1040 AQ=359.2242+29.105366*C:REM You aren't really intended to understand 1050 AM=306.0253+385.816918*C+.01073*T2:REM this algorithm but it works 1060 JD%=2415020+28*N%+7*nphase% 1070 xtra=.75933+1.53058868*C+(.0001178-1.55E-7*T)*T2 1080 IF nphase%=0 OR nphase%=2 xtra=xtra+(.1734-.000393*T)*SIN(RAD(AQ))-.4068*SIN(RAD(AM)) 1090 IF nphase%=1 OR nphase%=3 xtra=xtra+(.1721-.0004*T)*SIN(RAD(AQ))-.628*SIN(RAD(AM)) 1100 IF xtra>=0 I%=INT(xtra) ELSE I%=INT(xtra-1) 1110 JD%=JD%+I% 1120 frac=xtra-I% 1130 ENDPROC 1140 1150 DEF PROCjulday(MM%,ID%,IY%) 1160 igreg%=588829 1170 IF IY%<0 IY%=IY%+1 1180 IF MM%>2 JY%=IY%:JM%=MM%+1:ELSE JY%=IY%-1:JM%=MM%+13 1190 JD%=INT(365.25*JY%)+INT(30.6001*JM%)+ID%+1720995 1200 IF ID%+31*(MM%+12*IY%)>=igreg% JA%=INT(.01*JY%):JD%=JD%+2-JA%+INT(.25*JA%) 1210 ENDPROC 1220 1230 DEF PROCcaldat(JD%) 1240 igreg%=2299161 1250 IF JD%>=igreg% jalpha%=INT(((JD%-1867216)-.25)/36524.25): JA%=JD%+1+jalpha%-INT(.25*jalpha%) ELSE JA%=JD% 1260 JB%=JA%+1524 1270 JC%=INT(6680+((JB%-2439870)-122.1)/365.25) 1280 JD%=365*JC%+INT(.25*JC%) 1290 JE%=INT((JB%-JD%)/30.6001) 1300 OD%=JB%-JD%-INT(30.6001*JE%) 1310 OM%=JE%-1 1320 IF OM%>12 OM%=OM%-12 1330 OY%=JC%-4715 1340 IF OM%>2 OY%=OY%-1 1350 IF OY%<=0 OY%=OY%-1 1360 ENDPROC 1370 1380 DEF FNN="MOON"