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



         

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


Z:=trunc(jd+0.5);

F:=jd+0.5-Z;

A:=Z;

if Z>=2299161 then begin

aa:=trunc((Z-1867216.25)/36524.25);

A:=A+l+aa-(aa div 4);

end;

B:=A+1524;

C:=trunc( (B-122.D/365.25) ;

D:=trunc(365.25*C);

E:=trunc((B-D)/30.6001);

dt:=B-D-trunc(30.6001*E)+F;

if E<13.5 then m:=E-l

else m:=E-13;

if m>2.5 then y:=C-4716

else y:=C-4715;

end;

begin

clrscr;

write('Задайте юлианскую дату : ');

readln(jd);

GD(jd,Y,M,DT);

writeln('год = ',Y:4,' месяц = ',M:2,' день и время = ',DT:4:1);

readln; end.

Задание 9.03. Интервал времени между двумя датами

Составить функцию dif_time, вычисляющую интервал между двумя датами григорианского календаря.

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

Преобразуйте даты григорианского календаря и найдите разницу между соответствующими юлианскими датами. Чтобы не выяснять, какая из дат является предшествующей, можно найти модуль разности.

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

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

DECLARE FUNCTION DifTime! (Yl%, Ml%, DTI!, Y2%, M2%, DT2!)

REM Определение интервала времени между двумя датами

REM григорианского календаря : (Y1,M1,DT1) и (Y2,M2,DT2)

CLS

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

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

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

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

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

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

PRINT "Интервал =",DifTime(Y1%,M1%,DTI,Y2%,M2%,DT2)

END

FUNCTION DifTime (Y1%,M1%,DTI,Y2%,M2%,DT2)

' Определение интервала времени между

' двумя григорианскими датами

' Y1,Y2 - годы М1,М2 - месяцы

' целые части DTI, DT2 - дни

' дробные части DTI, DT2 - время дня

jdl=JD(Y1%,M1%,DT1)

jd2=JD(Y2%,M2%,DT2)

DifTime=ABS(jdl-jd2) END FUNCTION

FUNCTION JD(Y%,M%,DT)

DIM a AS INTEGER, b AS INTEGER, mm AS INTEGER, yy AS INTEGER

DIM с AS LONG

b=0

yy=Y%

mm=M%

IF M%<3 THEN yy=yy-l: mm=mm+12




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