Здесь приведена программа расчёта времени восхода и захода солнца в зависимости от географических координат по московскому времени.Погрешность может составлять одну-две минуты для момента восхода или захода от приведённых в календаре для Москвы. Впрочем и в календарях за разные годы могут быть отличия на минуту.Но в целом моменты восхода и захода так мало отличаются от года к году,кроме високосных лет,что не имеют смысла вопросы когда восход и заход в такую-то дату в таком-то году.Если вас не волнуют отличия в 1 минуту,то эти моменты не изменяются для конкретной даты от года к году(если не иметь ввиду переход на летнее время-сдвиг на час вперёд).Если продолжительность дня,полученная данной программой,отрицательна или 1 минута,то на данной широте полярная ночь,а если время восхода и захода не выдаётся, то полярный день.Тогда надо выходить ctrl-break.Перевод с московского на местное время условный – 1час соответствует 15 градусов долготы,что для часовых поясов далеко не всегда соблюдается.
Для високосных годов погрешность больше.
Пример для Чикаго(ещё по летнему времени).
Если вы хотите связаться on-line с одноклассником живущим сейчас в Чикаго(41.9 гр. с.ш.,87.65 гр. з.д.),то вы можете ориентируясь на результат работы программы выбрать время для звонка.Конечно корректно вычесть 2 часа из полученных значений для местного времени ,учитывая наше летнее и декретное время.Впрочем информация о различии времени с Москвой любых больших городов в мире есть в интернете.
Так как в QB нет встроенных функций arcsin и arccos они вычисляются методом подекадного приближения и через arctg.
' Программа рассчитывает время восхода и захода солнца в зависимости от
'географических координат по московскому времени.
1 CLS
INPUT " Широта:(МОСКВА-55.75;Петербург-60):", F
INPUT " Долгота: (МОСКВА-37.62;Петербург-30.5):",LM
2 INPUT" МЕСЯЦ:", M
MN = M
INPUT " ЧИСЛО:", CH
IF M = 1 THEN N0 = 0
IF M = 2 THEN N0 = 31
IF M = 3 THEN N0 = 59
IF M = 4 THEN N0 = 90
IF M = 5 THEN N0 = 120
IF M = 6 THEN N0 = 151
IF M = 7 THEN N0 = 181
IF M = 8 THEN N0 = 212
IF M = 9 THEN N0 = 243
IF M = 10 THEN N0 = 273
IF M = 11 THEN N0 = 304
IF M = 12 THEN N0 = 334
N = CH + N0
PRINT " N="; N
NN = N
Y = .0153276#
A = .9856 * (N - .75)
A1 = A * 3.14159 / 180
B = A - 2.257
c = SIN(A1) * 1.91 + A - 79.957
AR = SIN(c * 3.14159 / 180) * .3978
DR = ATN(AR / SQR(1 - AR ^ 2))
ZP = SIN(2 * c * 3.1415926# / 180) / 6
E = -(SIN(B * 3.1415926# / 180) * .128 - ZP)
W = SIN(DR) * SIN(F * 3.1415926# / 180) + Y
F1 = F * 3.1415926# / 180
G = (1 / COS(F1))
U = W * G
P = -1 / COS(DR) * U
X = 0 'вычисление арккосинуса методом подекадного приближения
D = .1
N = 6
110 X = X + D
Y = COS(X) - P
IF Y > 0 THEN 110
X = X - D
D = D / 10
N = N - 1
IF N > 0 THEN 110
X = X * 180 / 3.1415926#
H = (225 - LM - X) / 15 - E
H1 = INT(H)
H2 = H1
M = (H - H1) * 60
H1V = H1
PRINT " ВОСХОД СОЛНЦА:"; H1; "час.";INT(M); "мин."
M2 = INT(M)
N = CH + N0
Y = .0153276#
A = .9856 * (N - .25)
A1 = A * 3.14159 / 180
B = A - 2.257
c = SIN(A1) * 1.91 + A - 79.957
AR = SIN(c * 3.1415926# / 180) * .3978
DR = ATN(AR / SQR(1 - AR ^ 2))
ZP = SIN(2 * c * 3.1415926# / 180) / 6
E = -(SIN(B * 3.14159 / 180) * .128 - ZP)
W = SIN(DR) * SIN(F * 3.1415926# / 180) + Y
F1 = F * 3.1415926# / 180
G = (1 / COS(F1))
U = W * G
P = -1 / COS(DR) * U
X = 0
D = .1
N = 6
1100 X = X + D
Y = COS(X) - P
IF Y > 0 THEN 1100
X = X - D
D = D / 10
N = N - 1
IF N > 0 THEN 1100
X = X * 180 / 3.1415926#
H = (225 - LM + X) / 15 - E
H1 = INT(H)
H1N = H1
M = (H - H1) * 60
PRINT" ЗАХОД СОЛНЦА:"; H1; "час."; INT(M);"мин."
PR = (H1N + INT(M) / 60 - H2 - M2 / 60)
PRINT" ПРОДОЛЖИТЕЛЬНОСТЬ ДНЯ"
Min = INT((PR -INT(PR)) * 60 + .005)
PRINT" "; INT(PR); "час."; Min; "мин."
SLEEP
CLS
IF MN = 1 THEN P = 31: M$ = "ЯНВАРЬ"
IF MN = 3 THEN P = 31: M$ = "МАРТ"
IF MN = 4 THEN P = 30: M$ = "АПРЕЛЬ"
IF MN = 5 THEN P = 31: M$ = "МАЙ"
IF MN = 6 THEN P = 30: M$ = "ИЮНЬ"
IF MN = 7 THEN P = 31: M$ = "ИЮЛЬ"
IF MN = 8 THEN P = 31: M$ = "АВГУСТ"
IF MN = 9 THEN P = 30: M$ = "СЕНТЯБРЬ"
IF MN = 10 THEN P = 31: M$ = "ОКТЯБРЬ"
IF MN = 11 THEN P = 30: M$ = "НОЯБРЬ"
IF MN = 12 THEN P = 31: M$ = "ДЕКАБРЬ"
IF MN = 2 THEN M$ = "ФЕВРАЛЬ"
PRINT " "
PRINT CH; M$
PRINT " Широта", F
PRINT " Долгота", LM
IF H1 > 24 THEN H1 = H1 - 24
IF H1V < 0 THEN H1V = H1V + 24
PRINT " ВОСХОД СОЛНЦА:"; H1V; "час.";M2; "мин."
PRINT " ЗАХОД СОЛНЦА:"; H1; "час.";INT(M); "мин."
PRINT " ПРОДОЛЖИТЕЛЬНОСТЬ ДНЯ:"; INT(PR);"час."; Min; "мин."
PRINT " (Время московское)"
TMV = H1V - 2 +INT(LM / 15)
TMZ = H1 - 2 + INT(LM / 15)
IF TMZ < 0 THEN TMZ = TMZ + 24
IF TMV > 24 THEN TMV = TMV - 24
PRINT " ВОСХОД:"; TMV; "час."; M2;"мин."
PRINT " ЗАХОД:"; TMZ; "час."; INT(M);"мин."
PRINT " (Время местное)"
END