uses crt;
type data=record
d:1..31;
m:1..12;
g:1..2100;
end;
fail=file of data;
var f:fail;
dt:data;
n,i,k:byte;
begin
clrscr;
assign(f,'file1');
rewrite(f);
write('Сколько дат ввести в файл n=');
readln(n);
for i:=1 to n do
with dt do
begin
repeat
write('Год 1-2100: ');readln(g);
if (g<0)or(g>2100) then writeln('Неверно, повторите ввод.');
until(g>0)and(g<=2100);
repeat
write('Месяц: ');readln(m);
if not(m in [1..12])then writeln('Неверно, повторите ввод.');
until m in [1..12];
repeat
k:=0;
write('День:');readln(d);
if(m in [4,6,9,11])and(d=31)then k:=1;{или месяц короткий, а день=31}
if(m=2)and(((g mod 100<>0)and(g mod 4=0))or(g mod 400=0))
and(d>29) then k:=1; {если февраль високосного года, а день больше 29}
if(m=2)and((g mod 4<>0)or((g mod 100=0)and(g mod 400<>0)))and(d>28)
then k:=1; {если февраль невисокосного года, а день больше 28}
if k=1 then write('Неверно, повторите ввод.');
until k=0;
write(f,dt);
end;
reset(f);
writeln('Все весенние даты:');
k:=0;
while not eof(f) do
begin
read(f,dt);
if dt.m in [3..5] then
begin
k:=1;
with dt do writeln(d,'.',m,'.',g);
end;
end;
close(f);
if k=0 then write('Весенних дат нет!');
readln
end.