t Календарь на Id месяц
char *b[7]={"понедельник",
"вторник ",
"среда ",
"четверг ",
"пятница ",
"суббота ",
"воскресенье"}; clrscr();
printf("\ t Календарь на Id месяц %d года",М,У);
i=week_day(Y,M,1); /* определение дня недели для 1.M.Y */
if(i==0)i=7;
q=max day(Y,M); /* определение количества дней в месяце */
for(j=0; j<42; j++) a[j]=0;
for(j=i-l,k=l;
j<q+i-l; j++,k++) a[j]=k;
for(j=0; j<7; j++) {
gotoxy{10,j+3);
printf("%s",b[j]);
for(k=0; k<=35; k+=7)
if(a[k+j] != 0) printf("%4d",a[k+j]);
else printf("%4c",' '); }
return;
}
/*----------------------------------------*/
double JD(int Y,int M,double DT)
int a,b=0,m,y;
long c;
y=Y;
m=M;
if (M<3) { y--; m += 12; }
a = y/100;
if(Y+M/100.+DT/10000 > 1582.1015} b += 2-a+(int)(a/4.);
c=365.25*y; if(y<0)c=365.25*y-0.75;
return c+(long)(30.6001*(m+1))+DT+1720994.5+b;
}
/*---------------------------------*/
int week_day(int Y,int M,int D)
{
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;
}
/*-----------------------------------*/
int max_day(int Y,int M)
{ int days[]={31,28,31,30,31,31,30,31,30,31,30,31};
if(M != 2) return days[M-l];
begin
max_day:=days[M];
if (M=2)and((Y mod 400=0) or ( (Y mod 4=0) and (Y mod 100<>0) ) ) then
max_day:=2 9; end;
procedure calendar(Y,M:integer);
var
i,j,k,q:integer; a:array [0..41] of byte;
const
b:array [0..6] of string=('понедельник',
'вторник ', 'среда ',
'четверг ',
'пятница ',
'суббота ', 'воскресенье '};
begin clrscr;
write(' Календарь на ',М, ' месяц ',Y, ' года');
i:=week_day(Y,M,1);
if 1=0 then i:=7;
q:=max_day(Y,M);
for j:=0 to 41 do
a[j]:=0; k:=l;
for j:=i-l to q+i-2 do begin
a[j]:=k;
inc(k);
end;
for j:=0 to 6 do begin
gotoxy(10, j+3) ;
write(b[j]); k:=0;
while k<= 35 do begin;
if a[k+j] о 0 then
Содержание Назад Вперед