uses crt;
type date=record//тип запись даты
gd:1000..2010;
ms:1..12;
dn:1..31;
end;
var m:array[1..100] of date;//массив записей
n,i,j,im,k:byte;
begin
clrscr;
write('Размер массива n=');
readln(n);
writeln('Введите ',n,' дат:');
for i:=1 to n do
begin
repeat
write(' Год (1000-2010):');readln(m[i].gd);//можно изменить диапазон
until (m[i].gd>=1000)and(m[i].gd<=2010);//проверяем
repeat
write(' Месяц (1-12): ');readln(m[i].ms);
until m[i].ms in [1..12];
repeat
k:=0;
write(' День: ');readln(m[i].dn);
if ((m[i].ms in [1,3,5,7,8,10,12])and not(m[i].dn in [1..31]))//длинные месяцы
or ((m[i].ms in [4,6,9,11])and not(m[i].dn in [1..30]))//короткие месяцы
or ((m[i].ms=2)and(m[i].gd mod 4=0)and not(m[i].dn in [1..29]))//високосный - февраль
or ((m[i].ms=2)and(m[i].gd mod 4<>0)and not(m[i].dn in [1..28]))then k:=1;//невисокосный февраль
until k=0;
end;
clrscr;
im:=1;
for i:=1 to n do
if (m[i].gd<m[im].gd)or((m[i].gd=m[im].gd)and(m[i].ms<m[im].ms))// если год меньше, или годы равны, но месяц меньше
or((m[i].gd=m[im].gd)and(m[i].ms=m[im].ms)and(m[i].dn<m[im].dn)) then im:=i;//если равны год и месяц, то по дням
write('Самая ранняя дата: ');
if m[im].dn<10 then write('0',m[im].dn,'.')else write(m[im].dn,'.');//вывод с нолями, если день или месяц меньше 10
if m[im].ms<10 then write('0',m[im].ms,'.')else write(m[im].ms,'.');
write(m[im].gd);
writeln;
writeln;
k:=0;
writeln('Даты месяца декабрь:');
writeln;
for i:=1 to n do
if m[i].ms=12 then//если поле месяц = 12
begin
k:=1;
if m[i].dn<10 then write('0',m[im].dn,'.')else write(m[i].dn,'.');
if m[i].ms<10 then write('0',m[im].ms,'.')else write(m[i].ms,'.');
write(m[i].gd);
writeln;
end;
if k=0 then write('Дат декабря нет!');
readln
end.