Программа вылетает т.к. много значений перебирает, если не хочется подобного просто смените ограничение.
var i,a,b,c,d:integer;
begin
for i:=1000 to 9999 do begin
a:=i mod 10;
b:=(i div 10) mod 10;
c:=(i div 100) mod 10;
d:=(i div 1000) mod 10;
if (a=b) and (b=c) and (c=d) then writeln ('odinakovie cifri - ',i);
if (a<>b) and (a<>c) and (a<>d) and (b<>c) and (b<>d) and (c<>d) then writeln('ne odinakovie cifri - ',i);
end;