type day=1..31; month=1..12; year=1.2000; mydate=record; d:day; m:month; y:year; end; проверить семантическую правильность ввода даты — Pascal(Паскаль)

uses crt;
type day=1..31;
     month=1..12;
     year=1..2000;
var d:day;
    m:month;
    g:year;
    fd,fm,fg:byte;
begin
clrscr;
writeln('Введите номер дня(1-31), месяца(1-12) и года(1-2100):');
readln(d,m,g);
fd:=0;fm:=0;fg:=0;
if (g<1)or(g>2100)then fg:=1; {если год вне пределов}
if (m<1)or(m>12)then fm:=1;  {или месяц}
if (d<1)or (d>31) then fd:=1;{или день}
if(m in [4,6,9,11])and(d=31)then fd:=1;{или месяц короткий, а день=31}
if(m=2)and(((g mod 100<>0)and(g mod 4=0))or(g mod 400=0))
and(d>29) then fd:=1; {если февраль високосного года, а день больше 29}
if(m=2)and((g mod 4<>0)or((g mod 100=0)and(g mod 400<>0)))and(d>28)
then fd:=1; {если февраль невисокосного года, а день больше 28}
if fd+fm+fg=0 then write('Дата введена верно!')
else
 begin
  if fd=1 then writeln('Неверно введен день');
  if fm=1 then writeln('Неверно введен месяц');
  if fg=1 then writeln('Неверно введен год');
 end;
readln
end.

Leave a Comment

55 + = 64