home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CP/M
/
CPM_CDROM.iso
/
cpm
/
basic
/
astrmenu.lbr
/
MOONS.BZS
/
MOONS.BAS
Wrap
BASIC Source File
|
1987-04-26
|
2KB
|
83 lines
1 PRINT "From the March 1985 SKY & TELESCOPE, pp. 254-5."
2 PRINT
3 PRINT "This program calculates the times of new and full Moons in a given"
5 PRINT "year. The Julian calendar is used for years 1582 and earlier, and"
6 PRINT "the Gregorian calendar thereafter."
7 PRINT
8 PRINT "INPUT: Year." : PRINT
9 PRINT "OUTPUT: List of new and full moons (UT)." : PRINT
10 REM NEW AND FULL MOONS
12 REM
14 REM
16 R1=3.14159265#/180: U=0
18 INPUT "YEAR ";Y
19 G=1 : IF Y<1583 THEN G=0
20 PRINT
22 K0=INT((Y-1900)*12.3685)
24 T=(Y-1899.5)/100
26 T2=T*T: T3=T*T*T
28 J0=2415020!+29*K0
30 F0=.0001178*T2-1.55E-07*T3
32 F0=F0+.75933+.53058868#*K0
34 F0=F0-8.370001E-04*T-.000335*T2
36 J=J+INT(F): F=F-INT(F)
38 M0=K0*.08084821133#
40 M0=360*(M0-INT(M0))+359.2242
42 M0=M0-.0000333*T2
44 M0=M0-3.47E-06*T3
46 M1=K0*.07171366128#
48 M1=360*(M1-INT(M1))+306.0253
50 M1=M1+.0107306*T2
52 M1=M1+1.236E-05*T3
54 B1=K0*.08519585128#
56 B1=360*(B1-INT(B1))+21.2964
58 B1=B1-.0016528*T2
60 B1=B1-2.39E-06*T3
62 FOR K9=0 TO 28
64 J=J0+14*K9: F=F0+.765294*K9
66 K=K9/2
68 M5=(M0+K*29.10535608#)*R1
69 M6=(M1+K*385.81691806#)*R1
70 B6=(B1+K*390.67050646#)*R1
71 F=F-.4068*SIN(M6)
72 F=F+(.1734-.000393*T)*SIN(M5)
73 F=F+.0161*SIN(2*M6)
74 F=F+.0104*SIN(2*B6)
75 F=F-.0074*SIN(M5-M6)
76 F=F-.0051*SIN(M5+M6)
77 F=F+.0021*SIN(2*M5)
78 F=F+.001*SIN(2*B6-M6)
81 F=F+.5/1440
82 J=J+INT(F): F=F-INT(F)
84 IF U=0 THEN PRINT " NEW MOON ";
86 IF U=1 THEN PRINT "FULL MOON ";
88 GOSUB 920
90 U=U+1: IF U=2 THEN U=0
92 NEXT
94 RUN"ASTRMENU.BAS"
900 REM JD --> CALENDAR
905 REM
910 INPUT "J,F ";J,F
915 INPUT "JC (0) OR GC (1) ";G
920 F=F+.5
925 IF F<1 THEN 935
930 F=F-1 : J=J+1
935 IF G=1 THEN 945
940 A=J : GOTO 955
945 A1=INT((J/36524.25)-51.12264)
950 A=J+1+A1-INT(A1/4)
955 B=A+1524
960 C=INT((B/365.25)-.3343)
965 D=INT(365.25*C)
970 E=INT((B-D)/30.61)
975 D=B-D-INT(30.61*E)+F
980 M=E-1 : Y=C-4716
985 IF E>13.5 THEN M=M-12
990 IF M<2.5 THEN Y=Y+1
993 D1=INT(D) : H=24*(D-D1)
994 H1=INT(H) : M9=INT(60*(H-H1))
995 PRINT USING "####_ ";Y; : PRINT USING "##_ ";M; : PRINT USING "##";D1;
996 PRINT TAB(25) USING "##";H1; :PRINT "h "; :PRINT USING "##";M9; :PRINT "m"
997 RETURN
"##_ ";M; : PRINT USING "##";D1;
996 PRINT TAB(25) USING "##";H1; :P