Факториал факториала. Написать программу для вычисления - Free Pascal
Формулировка задачи:
Всем привет. В общем, необходимо написать программу для вычисления данного выражения. Написал уже на многих форумах, ответов почти не было. Буду премного благодарен за любую помощь, ибо спросить больше не у кого. Заранее благодарю!
Решение задачи: «Факториал факториала. Написать программу для вычисления»
textual
Листинг программы
var overflow: boolean = false; //глобальная переменная!
procedure read_q(s: string; var x: extended);
begin
repeat
write(s, ' - неотрицательное целое; ', s, ' = ');
readln(x)
until x >= 0
end;
function f(n: extended; k: integer): extended;
var p: extended;
begin
Result := 1;
overflow := overflow or (n > 1750);
if not overflow
then while n > 1 do
begin
Result *= n;
n -= k
end;
end;
function fact(n: extended): extended;
begin Result := f(n, 1) end;
function dfact(n: extended): extended;
begin Result := f(n, 2) end;
var m, n, y: extended;
begin
read_q('m', m);
read_q('n', n);
y := fact(m);
if not overflow
then if n < y
then writeln('Выражение не определено')
else begin
y := fact(n - y) / (fact(m) + dfact(n)) + dfact(m);
if not overflow then writeln('y = ', y)
end;
if overflow then writeln('Переполнение');
readln
end.
Объяснение кода листинга программы
- Глобальная переменная
overflowинициализируется значением false. - В функции
read_qпроисходит чтение входных данных, пока они не станут отрицательными, и выводится сообщение об ошибке, если число отрицательное. - В функции
fиспользуется цикл, который продолжает умножать число на n, пока n больше 1. Если n становится равным 1, цикл завершается. Переменнаяoverflowустанавливается в true, если n больше 1750. - Функция
factвызывает функциюfс аргументом 1, чтобы вычислить факториал числа. - Функция
dfactвызывает функциюfс аргументом 2, чтобы вычислить двойной факториал числа. - В основной программе вводятся значения для переменных m и n, используя функцию
read_q. - Вычисляется факториал числа m и сохраняется в переменной
y. - Если n меньше, чем y, выводится сообщение об ошибке.
- Иначе вычисляется новое значение y, используя функции
factиdfact, и выводится на экран. - Если произошло переполнение, выводится сообщение об ошибке.
- Программа завершается чтением строки.