Факториал в Pascal
Пример для версий
Free Pascal 1.0.6,
Free Pascal 2.0.4,
Free Pascal 2.2.0,
Free Pascal 2.2.4,
Turbo Pascal 4.0,
Turbo Pascal 5.0,
Turbo Pascal 5.5,
Turbo Pascal 6.0,
Turbo Pascal 7.0,
gpc 20070904
Используется рекурсивное определение факториала.
Этот пример работает как в Turbo Pascal, так и в Free Pascal, но с несколько разным результатом. В обеих реализациях возникает арифметическое переполнение при вычислении факториалов 13-16, но Free Pascal сообщает об ошибке:
13! = Runtime error 215 at $004013C7
$004013C7
$00401449
$004063E0
в то время как Turbo Pascal не обнаруживает ошибку и просто выводит неправильные значения:
13! = 1932053504
14! = 1278945280
15! = 2004310016
16! = 2004189184
Следует отметить, что в версиях Turbo Pascal 3.0 и младше этот пример не работает из-за отсутствия типа данных longint.
В GNU Pascal пример работает без переполнения.
program factorial;
function fact(n: integer): longint;
begin
if (n = 0) then
fact := 1
else
fact := n * fact(n - 1);
end;
var
n: integer;
begin
for n := 0 to 16 do
writeln(n, '! = ', fact(n));
end.
Комментарии
]]>blog comments powered by Disqus
]]>