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



         

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


END

FUNCTION DatToOrd(y%,M%,D%)

DIM a1 AS INTEGER, a2 AS INTEGER

al=(M%+9)\12

a2=INT(275!*M%/9!}-a1+D%

IF (y% MOD 400=0) OR ( (y MOD 4=0) AND (y MOD 100<>0) ) THEN DatToOrd=a2-30

ELSE DatToOrd=a2-al-30

END IF

END FUNCTION

Программа 9_05.c

#include <stdio.h>

#include <conio.h>

int dat_to_ord(int y,int m,int d) ;

main() {

int Y,M,D;

clrscr();

printf("\nЗадайте год : ");

scanf("%d",&Y);

printf("\nЗадайте месяц : ");

scanf("%d",&M);

printf("\nЗадайте день : ");

scanf("%d",&D) ;:

printf("\nПорядковый номер дня в году = %d", dat_to_ord(Y,M,D));

getch();

}

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

int dat_to_ord(int y,int m,int d)

{

int a1,a2;

al=(m+9.0)/12.0;

a2=(275.0*m/9.0)-a1+d-30;

if((y%400==0)||((y%4==0)&&(y%100!=0)))

return a2;

return a2-a1; }

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

program ord day;

изез Crt; var

Y,M,D:integer;

function dat_to_ord(y,m,d:integer):integer; {

Определение порядкового дня в году по текущей дате (у - год, m - месяц, d - день) } var

al,a2:integer; begin

al:=(m+9) div 12;

a2:=trunc(275.0*m/9.0)-al+d-30;

if((y mod 400 = 0) OR {(y mod 4=0) AND (y mod 100 <>0))) then dat_to__ord: =a2

else dat_to_ord:=a2-al;

end;

begin

clrscr;

write('Задайте год : ');

readln(Y);

write('Задайте месяц : ');

readln(M);

write('Задайте день : ');

readln(D);

writeln('Порядковый номер дня в году = ', dat_to_ord(Y,M,D));

readln;

end.

Задание 9.06. Восстановление даты

Составить процедуру month_day, вычисляющую номера месяца (M) и дня (D) по порядковому номеру (N) дня в году.

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

Воспользуемся алгоритмом, описанным в книге Меёса. Положим, что А = 1889 для обычного года и А = 1523—для високосного.

Вычислим :

B=int((N+A-122.1)/365.25)

C=N+A-int(365.25*B)

E=int(C/30.6001)

M=E-1 при Е<13.5

M=E-13 при Е>13.5

D=C-int(30.6001*E)

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




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