- 01
 - 02
 - 03
 - 04
 - 05
 - 06
 - 07
 - 08
 - 09
 - 10
 - 11
 - 12
 - 13
 - 14
 - 15
 - 16
 - 17
 - 18
 - 19
 - 20
 - 21
 - 22
 - 23
 - 24
 - 25
 - 26
 - 27
 - 28
 - 29
 - 30
 - 31
 - 32
 - 33
 - 34
 - 35
 - 36
 - 37
 - 38
 - 39
 - 40
 - 41
 - 42
 - 43
 - 44
 - 45
 - 46
 - 47
 - 48
 - 49
 - 50
 - 51
 - 52
 - 53
 - 54
 - 55
 - 56
 - 57
 - 58
 - 59
 - 60
 - 61
 - 62
 - 63
 - 64
 - 65
 - 66
 - 67
 - 68
 - 69
 - 70
 - 71
 - 72
 - 73
 - 74
 - 75
 - 76
 - 77
 - 78
 - 79
 - 80
 - 81
 - 82
 - 83
 - 84
 - 85
 - 86
 - 87
 - 88
 - 89
 - 90
 - 91
 - 92
 - 93
 - 94
 - 95
 - 96
 - 97
 - 98
 - 99
 
                        10 GOSUB 300
30 INPUT "Долгота (град)";B5,L5: INPUT "Часовая зона (час)";H
50 L5=L5/360: Z0=H/24
60 GOSUB 1170: T=(J-2451545)+F
70 TT=T/36525+1: ' TT = столетия, начиная с 1900.0
90 GOSUB 410: T=T+Z0
120 GOSUB 910: A(1)=A5: D(1)=D5 '  Получаем положение солнца
130 T=T+1
140 GOSUB 910: A(2)=A5: D(2)=D5
150 IF A(2)<A(1) THEN A(2)=A(2)+P2
160 Z1=DR*90.833: ' Вычисление зенита
170 S=SIN(B5*DR): C=COS(B5*DR)
180 Z=COS(Z1): M8=0: W8=0: PRINT
190 A0=A(1): D0=D(1)
200 DA=A(2)-A(1): DD=D(2)-D(1)
210 FOR C0=0 TO 23
220 P=(C0+1)/24
230 A2=A(1)+P*DA: D2=D(1)+P*DD
240 GOSUB 490
250 A0=A2: D0=D2: V0=V2
260 NEXT
270 GOSUB 820: ' Вывод информации
280 END
300 DIM A(2),D(2)      ' Константы
320 P1=3.14159265: P2=2*P1: DR=P1/180: K1=15*DR*1.0027379: S$="Заход солнца в "
330 R$="Восход солнца в ": M1$="В этот день солнце не восходит"     
370 M2$="В этот день солнце не заходит": M3$="Солнце заходит весь день"           
390 M4$="Солнце восходит весь день"          
400 RETURN                                   
410 T0=T/36525 '     Получение часового пояса
430 S=24110.5+8640184.813*T0
440 S=S+86636.6*Z0+86400*L5
450 S=S/86400: S=S-INT(S)
460 T0=S*360*DR
470 RETURN
490 L0=T0+C0*K1: L2=L0+K1  '  Просматриваем возможные события на полученный час
510 H0=L0-A0: H2=L2-A2
520 H1=(H2+H0)/2: '  Часовой угол,
530 D1=(D2+D0)/2: '  наклон в получасе
550 IF C0>0 THEN 570
560 V0=S*SIN(D0)+C*COS(D0)*COS(H0)-Z
570 V2=S*SIN(D2)+C*COS(D2)*COS(H2)-Z
580 IF SGN(V0)=SGN(V2) THEN 800
590 V1=S*SIN(D1)+C*COS(D1)*COS(H1)-Z
600 A=2*V2-4*V1+2*V0: B=4*V1-3*V0-V2
610 D=B*B-4*A*V0: IF D<0 THEN 800
620 D=SQR(D)
630 IF V0<0 AND V2>0 THEN PRINT R$;
640 IF V0<0 AND V2>0 THEN M8=1
650 IF V0>0 AND V2<0 THEN PRINT S$;
660 IF V0>0 AND V2<0 THEN W8=1
670 E=(-B+D)/(2*A)
680 IF E>1 OR E<0 THEN E=(-B-D)/(2*A)
690 T3=C0+E+1/120: ' Округление
700 H3=INT(T3): M3=INT((T3-H3)*60)
710 PRINT USING "##:##";H3;M3;
720 H7=H0+E*(H2-H0)
730 N7=-COS(D1)*SIN(H7)
740 D7=C*SIN(D1)-S*COS(D1)*COS(H7)
750 AZ=ATN(N7/D7)/DR
760 IF D7<0 THEN AZ=AZ+180
770 IF AZ<0 THEN AZ=AZ+360
780 IF AZ>360 THEN AZ=AZ-360
790 PRINT USING ",  азимут ###.#";AZ
800 RETURN
820 IF M8=0 AND W8=0 THEN 870 ' Процедура вывода информации
840 IF M8=0 THEN PRINT M1$
850 IF W8=0 THEN PRINT M2$
860 GOTO 890
870 IF V2<0 THEN PRINT M3$
880 IF V2>0 THEN PRINT M4$
890 RETURN
910 L=.779072+.00273790931*T ' Фундаментальные константы (Van Flandern & Pulkkinen, 1979)
950 G=.993126+.0027377785*T
960 L=L-INT(L): G=G-INT(G): L=L*P2: G=G*P2
980 V=.39785*SIN(L): V=V-.01000*SIN(L-G)
1000 V=V+.00333*SIN(L+G): V=V-.00021*TT*SIN(L)
1020 U=1-.03349*COS(G): U=U-.00014*COS(2*L)
1040 U=U+.00008*COS(L): W=-.00010-.04129*SIN(2*L)
1060 W=W+.03211*SIN(G): W=W+.00104*SIN(2*L-G)
1080 W=W-.00035*SIN(2*L+G): W=W-.00008*TT*SIN(G)
1120 S=W/SQR(U-V*V) '    Вычисление солнечных координат
1130 A5=L+ATN(S/SQR(1-S*S))
1140 S=V/SQR(U):D5=ATN(S/SQR(1-S*S))
1150 R5=1.00021*SQR(U)
1160 RETURN
1170 INPUT "Год, Месяц, День";Y,M,D ' Календарь --> JD
1190 G=1: IF Y<1583 THEN G=0
1200 D1=INT(D): F=D-D1-.5
1210 J=-INT(7*(INT((M+9)/12)+Y)/4)
1220 IF G=0 THEN 1260
1230 S=SGN(M-9): A=ABS(M-9)
1240 J3=INT(Y+S*INT(A/7))
1250 J3=-INT((INT(J3/100)+1)*3/4)
1260 J=J+INT(275*M/9)+D1+G*J3
1270 J=J+1721027+2*G+367*Y
1280 IF F>=0 THEN 1300
1290 F=F+1: J=J-1
1300 RETURN
                                     
        
            Вот такой вот реликт. Вы всё ещё пользуетесь GOTO? Тогда мы идём к вам.
Программа вычисляет время восхода и захода солнца по дате (с точностью до минуты) в пределах нескольких текущих столетий. Производит корректировку, если географическая точка находится в арктичиском или антарктическом регионе, где заход или восход солнца на текущую дату может не состояться. Вводимые данные: положительная северная широта и отрицательная западная долгота. Часовой пояс указывается относительно Гринвича (например, 5 для EST и 4 для EDT). Алгоритм обсуждался в "Sky & Telescope" за август 1994, страница 84.
P. S. VisualBasic такой Visual...