Заданы type chisl=1..31; mes=1..12; god 1..2100; data record ch:csisl; m:mes; g:god; dayned=(mo,tu,we,th,fr,sa,su); Определить, будет ли дата d верной — Pascal(Паскаль)

type
  chis = 1 .. 31;
  mes = 1 .. 12;
  god = 1 .. 2100;
  ned = 0 .. 6; { день недели 0-пн...6-вс }

var
  d: chis;
  m: mes;
  g: god;
  f: byte;
  n: ned;

function intdow(yyyy, mm, dd: integer): integer;
var
  Addval: shortint;
begin
  if mm < 3 then
    Addval := 1
  else
    Addval := 0;
  intdow := (((3 * yyyy - (7 * (yyyy + (mm + 9) div 12)) div 4 + (23 * mm) div 9
    + dd + 2 + ((yyyy - Addval) div 100 + 1) * 3 div 4 - 16) mod 7));
end;

begin
  writeln('Введите номер дня(1-31), месяца(1-12) и года(1-2100):');
  readln(d, m, g);
  f := 0;
  if (g < 1) or (g > 2100) then
    f := 1; { если год вне пределов }
  if (m < 1) or (m > 12) then
    f := 1; { или месяц }
  if (d < 1) or (d > 31) then
    f := 1; { или день }
  if (m in [4, 6, 9, 11]) and (d = 31) then
    f := 1; { или месяц короткий, а день=31 }
  if (m = 2) and (((g mod 100 <> 0) and (g mod 4 = 0)) or (g mod 400 = 0)) and
    (d > 29) then
    f := 1; { если февраль високосного года, а день больше 29 }
  if (m = 2) and ((g mod 4 <> 0) or ((g mod 100 = 0) and (g mod 400 <> 0))) and
    (d > 28) then
    f := 1; { если февраль невисокосного года, а день больше 28 }
  if f = 0 then
    write('Дата введена верно!')
  else
    write('Дата введена не верно!');
  n := intdow(g, m, d);
  writeln('День недели ', n);

  readln

end.

Leave a Comment

− 2 = 6