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 (общий)
Вычислим :
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