Факториал факториала. Написать программу для вычисления - 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.

Объяснение кода листинга программы

  1. Глобальная переменная overflow инициализируется значением false.
  2. В функции read_q происходит чтение входных данных, пока они не станут отрицательными, и выводится сообщение об ошибке, если число отрицательное.
  3. В функции f используется цикл, который продолжает умножать число на n, пока n больше 1. Если n становится равным 1, цикл завершается. Переменная overflow устанавливается в true, если n больше 1750.
  4. Функция fact вызывает функцию f с аргументом 1, чтобы вычислить факториал числа.
  5. Функция dfact вызывает функцию f с аргументом 2, чтобы вычислить двойной факториал числа.
  6. В основной программе вводятся значения для переменных m и n, используя функцию read_q.
  7. Вычисляется факториал числа m и сохраняется в переменной y.
  8. Если n меньше, чем y, выводится сообщение об ошибке.
  9. Иначе вычисляется новое значение y, используя функции fact и dfact, и выводится на экран.
  10. Если произошло переполнение, выводится сообщение об ошибке.
  11. Программа завершается чтением строки.

Оцени полезность:

6   голосов , оценка 4.333 из 5
Похожие ответы