Практика программирования (Бейсик, Си, Паскаль)



         

Задачи, советы и ответы


Задание 9.01. Вычисления юлианских дат

Составить функцию JD, вычисляющую юлианскую дату по году (Y), номеру месяца (м), номеру дня и значению времени, заданным в виде вещественного числа от (целая часть от — порядковый номер дня в месяце, дробная часть от — часть суток, прошедшая после полуночи). Проверки на правильность задания исходной информации исключены, чтобы не загромождать текст программы.

Совет 1 (общий)

По результатам довольно обширного численного эксперимента мы выяснили, что наиболее точный алгоритм представлен формулами Меёса. Поэтому тексты приводимых ниже программ используют алгоритм JD2. Если ваши задачи относятся к более узким временным интервалам, то текст функции JD можно заменить, используя один из выше описанных алгоритмов.

Программа 9_01.bas

DECLARE FUNCTION JD! (Y%, M%, DT!)

REM Перевод даты григорианского календаря

REM в юлианскую дату (алгоритм Меёса)

CLS

INPUT "Задайте год григорианского календаря : ",Y%

INPUT "Задайте месяц григорианского календаря : ",М%

INPUT "Задайте день и время : ",DT

PRINT USING "##### ### ###.#";Y%;M%;DT;

jdl=JD(Y%,M%,DT)

PRINT USING " JD =#########.#####";jdl

END

FUNCTION JD(Y%,M%,DT)

' Y - григорианский год [-4713,9999]

' М - григорианский месяц [1,12]

' целая часть DT - день [1,31]

' дробная часть DT - время, прошедшее

' от начала текущего дня [.0,.99999]

' Возвращаемое значение - юлианская дата

' Целая часть JD - число дней, прошедших

' от 1 января 4713 года до новой эры

' Дробная часть JD - время, прошедшее

' после 12 часов полудня дня JD

b%=0: yy%=Y%: mm%=M%

IF M%<3 THEN уу%=уу%-1: mm%=mm%+12

а%=уу% \ 100

IF Y%+M% / 1001+DT/10000 > 1582.10151 THEN

b%=b%+2-a%+(a% \ 4} END IF

c&=INT(365.25*yy%)

IF yy%<0 THEN c&=INT(365.25*yy%-.75)

JD=c&+INT(30.6001*(mm%+l))+DT+1720994.5#+b%

END FUNCTION

Программа 9_01.с

#include <stdio.h>

#include <conio.h>

#include <math.h>




Содержание  Назад  Вперед