Uses
System;
var
d1:DateTime;
d2,d3,d4,d5:real;
begin
d1:=Datetime.Now;
Writeln('Введите год вашего рождения');
Readln (d2);
Writeln('Введите день вашего рождения');
Readln (d4);
Writeln('Введите месяц вашего рождения');
Readln (d5);
if (d5=d1.Month) then;
begin
if (d4-d1.day>0) then;
Writeln ('Сегодня' , d1.Day, '.', d1.Month, '.', d1.Year);
d3:=d1.Year-d2;
Writeln ('Ваш возраст', d3 );
halt
end;
if (d5>d1.Month) then
begin
Writeln ('Сегодня' , d1.Day, '.', d1.Month, '.', d1.Year);
d3:=d1.Year-d2;
Writeln ('Ваш возраст', d3 );
halt
end;
Writeln ('Сегодня' , d1.Day, '.', d1.Month, '.', d1.Year);
d3:=(d1.Year-d2)-1;
Writeln ('Ваш возраст', d3 );
end.

вот в этой части неправильно считаешь
/*
if (d5=d1.Month) then;
begin
if (d4-d1.day>0) then;
Writeln ('Сегодня' , d1.Day, '.', d1.Month, '.', d1.Year);
d3:=d1.Year-d2;
Writeln ('Ваш возраст', d3 );
*/
по твоим рассуждениям, если месяц рождения равен месяцу нынешней даты, а день рождения больше нынешнего дня, то ты просто вычитаешь из нынешнего годы год рождения, соответственно, неправильный результат будет.
попробуй так
/*
Uses
System;
var
d1:DateTime;
d2,d3,d4,d5:real;
begin
d1:=Datetime.Now;
Writeln('Введите год вашего рождения');
Readln (d2);
Writeln('Введите день вашего рождения');
Readln (d4);
Writeln('Введите месяц вашего рождения');
Readln (d5);
if (d5=d1.Month) then
begin
if (d4-d1.day>0) then
begin
Writeln ('Сегодня' , d1.Day, '.', d1.Month, '.', d1.Year);
d3:=d1.Year-d2-1;
Writeln ('Ваш возраст', d3 );
end
else
Writeln ('Сегодня' , d1.Day, '.', d1.Month, '.', d1.Year);
d3:=d1.Year-d2;
Writeln ('Ваш возраст', d3 );
halt
end;
if (d5>d1.Month) then
begin
Writeln ('Сегодня' , d1.Day, '.', d1.Month, '.', d1.Year);
d3:=d1.Year-d2;
Writeln ('Ваш возраст', d3 );
halt
end;
if (d5<d1.Month) then
Writeln ('Сегодня' , d1.Day, '.', d1.Month, '.', d1.Year);
d3:=d1.Year-d2;
Writeln ('Ваш возраст', d3 );
end.
*/
После then точка с запятой не нужна. Это означает "ничего не делать".
Мало того, что ; - -вообще ерунда. Вас просят определить разницу по большому счету между датами. DateTime присутствует далеко не в каждом "Паскале". Уточняйте диалект. Определить возраст в годах? в днях? в чем?
Н-р зачем сравнивать номер месяца? ( if (d5=d1.Month) then ...
Pascal ABC.NET
uses System;
begin
var d1:DateTime := DateTime.Now;
var d2:DateTime := new System.DateTime(2003, 1, 31);
WriteLn('d1 (', d1.ToString(), ') - d2 (', d2.ToString(), ') = ', (d1-d2).Days, ' days');
end.
Выведет разницу между текущей датой и 31 января 2003 года в днях. На данный момент это 5059 дней (округляя). "Цитата"
d1 (07.12.2016 2:41:33) - d2 (31.01.2003 0:00:00) = 5059 days
Можете проверить с датой 2016,12,1 =)