Можно в одной программе безо всяких дополнительных функций посчитать три значения факториала n! в трёх различных циклах. Если все три значения одинаковые, тогда это совпадающее значение и выводится: uses crt;
var i, n: integer;
ffor, frepeat, fwhile: int64;
begin
clrscr();
while true do
begin
write('n = ');
readln

;
if n = 0 then writeln(1)
else
begin
ffor := 1;
for i := 1 to n do ffor := ffor * i;
i := n; frepeat := 1;
repeat
frepeat := frepeat * i;
i := i - 1
until i = 0;
i := 0; fwhile := 1;
while i < n do
begin
i := i + 1;
fwhile := fwhile * i
end;
if (ffor = frepeat) and (frepeat = fwhile)
then writeln(n, '! = ', ffor)
end
end
end. Это FreePascal, в нём при помощи использования стандартного целочисленного типа int64 можно получить точное значение n! для n из диапазона 0 ≤ n ≤ 20 (или приближённое вещественное значение для чуть большего диапазона аргументов факториала). В PascalABC.NET, в котором есть специальный тип больших целых чисел, таких ограничений нет, но я на этом псевдо-паскале не пишу...