Здесь приведена программа расчёта времени восхода и захода солнца в зависимости от географических координат по московскому времени.Погрешность может составлять одну-две минуты для момента восхода или захода от приведённых в календаре для Москвы. Впрочем и в календарях за разные годы могут быть отличия на минуту.Но в целом моменты восхода и захода так мало отличаются от года к году,кроме високосных лет,что не имеют смысла вопросы когда восход и заход в такую-то дату в таком-то году.Если вас не волнуют отличия в 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
|