Определение дня недели по дате (версия 1.2)
var
m: array [1..10] of char;
d1, m1, i, d: byte; {d1 - day_1; m1 - month_1; d - day}
y1, ys, yt, yf, dsNY: integer; {y1 - year_1; ys - years_between_4_and_1; yt - number_of_true_years_between_4_and_1; yf - number_of_false_years_between_4_and_1; dsNY - days_in_year_1_to_NY (NY - новый год)}
ds: longint; {ds - days_between_4_and_1}
ty: boolean;{ty - type_of_year_1}
begin
writeln('Данная программа определяет в какой день недели родился человек по заданной дате рождения. Введите дату рождения в формате ДД.ММ.ГГГГ (обозначения формата: Д - день, М - месяц, Г - год): ');
for i := 1 to 10 do read(m[i]);
d1 := (ord(m[1]) - 48) * 10 + (ord(m[2]) - 48);
m1 := (ord(m[4]) - 48) * 10 + (ord(m[5]) - 48);
y1 := (ord(m[7]) - 48) * 1000 + (ord(m[8]) - 48) * 100 + (ord(m[9]) - 48) * 10 + (ord(m[10]) - 48);
if ((d1 > 31) or (d1 < 1)) and ((m1 > 12) or (m1 < 1)) then begin writeln('Вы неправильно ввели день и месяц.'); halt end;
if (d1 > 31) or (d1 < 1) then begin writeln('Вы неправильно ввели день.'); halt end;
if (m1 > 12) or (m1 < 1) then begin writeln('Вы неправильно ввели месяц.'); halt end;
ty := false; {False - невисокосный, true - високосный}
if (y1 mod 4 = 0) then ty := true;
if (d1 > 29) and (m1 = 2) then begin writeln('Вы неправильно ввели день и/или месяц.'); halt end;
if (d1 > 28) and (m1 = 2) and (not ty) then begin writeln('Вы неправильно ввели и/или день, и/или месяц, и/или год.'); halt end;
ys := y1 - 4;
yt := ys div 4;
yf := ys - yt;
ds := yt * 366 + yf * 365; {Включая все дни в последнем году, то есть в нашем}
case m1 of 01: dsNY := 365 - d1;
02: dsNY := 365 - (d1 + 31);
03: begin if ty then dsNY := 365 - (d1 + 60) else dsNY := 365 - (d1 + 59) end;
04: begin if ty then dsNY := 365 - (d1 + 91) else dsNY := 365 - (d1 + 90) end;
05: begin if ty then dsNY := 365 - (d1 + 121) else dsNY := 365 - (d1 + 120) end;
06: begin if ty then dsNY := 365 - (d1 + 152) else dsNY := 365 - (d1 + 151) end;
07: begin if ty then dsNY := 365 - (d1 + 182) else dsNY := 365 - (d1 + 181) end;
08: begin if ty then dsNY := 365 - (d1 + 213) else dsNY := 365 - (d1 + 212) end;
09: begin if ty then dsNY := 365 - (d1 + 244) else dsNY := 365 - (d1 + 243) end;
10: begin if ty then dsNY := 365 - (d1 + 274) else dsNY := 365 - (d1 + 273) end;
11: begin if ty then dsNY := 365 - (d1 + 305) else dsNY := 365 - (d1 + 304) end;
12: begin if ty then dsNY := 365 - (d1 + 60) else dsNY := 365 - (d1 + 59) end;
else begin writeln( 'Вы ввели неправильно месяц.'); halt end end;
ds := ds - (dsNY + 4); {Включая только нужное количество дней в последнем году, то есть в нашем}
d := ds mod 7;
case d of 0: writeln('Данный день является понедельником.');
1: writeln('Данный день является вторником.');
2: writeln('Данный день является средой.');
3: writeln('Данный день является четвергом.');
4: writeln('Данный день является пятницей.');
5: writeln('Данный день является субботой.');
6: writeln('Данный день является воскресеньем.')
end
end.
Комментарии:
Нету комментариев для вывода...