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



         

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


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




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