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.