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



         

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


' у% - год

' m% - месяц

' dt - день (целая часть) и время дня (дробная часть)

DIM A AS LONG, В AS LONG, С AS LONG, D AS LONG, Z AS LONG

DIM aa AS LONG, E AS INTEGER, F AS DOUBLE

Z=INT(jd+.5)

F=jd+.5-Z

A=Z

IF Z>=2299161 THEN

aa=INT((Z-1867216.25#)/36524.25) A=A+l+aa-(aa\4)

END IF B=A+1524

C=INT((B-122.1)/365.25) D=INT(365.25*C) E=INT((B-D)/30.6001)

DT=B-D-INT(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 SUB

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

#include <stdio.h>

#include <conio.h>

void GD(double jd,int *y,int *m,double *dt);

main () (

int Y,M;

double DT,jd;

clrscr () ;

printf("\n Задайте юлианскую дату : ");

scanf("%lf",&jd);

GD(jd, &Y, &M, &DT) ;

printf("\n годl=%d месяц=%d день и время=%-15.51f",Y,M,DT);

getch();

}

/*--------------------------------------*/

void GD(double jd,int *y,int *m,double *dt)

/* Восстановление даты григорианского */

/* календаря по юлианской дате jd */

/* у - год, m - месяц */

/* dt - день (целая часть) */

/* и время дня (дробная часть) */

/**************************************/

{

long a,A,B,C,D,E, Z;

double F;

Z=jd+0.5;

F=jd+0.5-Z; A=Z;

if(Z>=2299161)

{

a=(Z-1867216.25)/36524.25;

A += l+a-a/4; }

B=A+1524;

C=(B-122.1)/365.25;

D=365.25*C; E=(B-D)/30.6001;

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

if(E<13.5) *m=E-l;

else *m=E-13;

if(*m>2.5) *y=C-4716;

else *y=C-4715; }

Программа 9_02.pas

program jd_to_gd;

{ Преобразование юлианской даты JD в дату григорианского календаря - Y (год), М (месяц), DT (день и часть времени, прошедшую от начала суток }

uses crt; var

Y,M:integer;

DT,jd:double;

procedure GD(jd:double;

var y,m:integer; var dtrdouble);

{ Восстановление даты григорианского }

{ календаря по юлианской дате jd }

{ у - год, m - месяц }

{ dt - день (целая часть) }

( и время дня (дробная часть) }

var

aa,A,B,C,D,E,Z:longint;

F:double; begin




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