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



         

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


Функция week_day1.с

int week_dayl(int Y, int M, int D)

{

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

/* Вычисление дня недели */

/* Возвращаемые значения: */

/* 1 - пон., 2 - вторник,..., 7 -воскр */

int q,m;

q=M+10;

m=(M-14)/12+Y;

return ((13*(q-(q/13)*12)-1)/5+D+77+5* (m%100) /4 +

m/400-(m/100)*2)%7; }

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

program WeekDay;

{ Определение дня недели }

uses Crt;

var

Y,M,D,day:integer;

function JD(Y,M:integer; DT:double):double; var

a,b,mm,yy:integer;

с:longint; begin

b:=0;

yy:=Y;

mm:=M;

if M<3 then begin yy:=yy-l;

mm:=mm+12; end;

a:=yy div 100;

if (Y+M/100.+DT/10000)>1582.1015 then b:=b+2-a+(a div 4);

c:=trunc(365.25*yy);

if yy<0 then c:=trunc(365.25*yy-0.75) ;

JD:=c+trunc(30.6001*(mm+l))+DT+1720994.5+b;

end;

function week_day(Y,M,D:integer):integer;

{ Определение дня недели }

{ Y - григорианский год }

{ М - григорианский месяц (1-12) }

{ D - день (1 - 31) }

{ Возвращаемое значение : }

{ 0 - воскр., 1 - понед., 2 - вторник,... }

begin

week_day:=trunc(JD(Y,M,D+1.5)) mod 7; end;

begin

clrscr;

write(' Задайте год григорианского календаря : ') ;

readln(Y);

write(' Задайте месяц григорианского календаря : ') ;

readln(M);

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

readln(D);

day:=week_day(Y,M,D);

writeln('день недели = ',day);

readln; end.

Задание 9.05. Порядковый день в году

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

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

Воспользуемся алгоритмом, описанным в книге Меёса. Для обычного года:

N=int(275*M/9)-2*int((М+9)/12)+D-30

Для високосного года:

N=int(275*M/9)-int((М+9)/12)+D-30

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

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

REM Определение порядкового дня в году по

REM текущей дате (у - год, m -месяц, d - день)

CLS

INPUT "Задайте год : ",у%

INPUT "Задайте месяц : ",М%

INPUT "Задайте день : ",D%

PRINT "Порядковый номер дня в году = ";

DatToOrd(у%,M%,D%)




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