Форум программистов, компьютерный форум, киберфорум
Free Pascal
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 30.09.2016
Сообщений: 6

Факториал факториала. Написать программу для вычисления

20.11.2016, 20:39. Показов 1795. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет. В общем, необходимо написать программу для вычисления данного выражения. Написал уже на многих форумах, ответов почти не было. Буду премного благодарен за любую помощь, ибо спросить больше не у кого. Заранее благодарю!

https://www.cyberforum.ru/cgi-bin/latex.cgi?<br />
\frac{(n-m!)!}{m!+n!!}+m!!<br />
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.11.2016, 20:39
Ответы с готовыми решениями:

написать программу для вычисления факториала используя цикл со счетчиком и оператор с предусловием.
помогите пожалуйста!!

Написать функцию вычисления факториала и программу, иллюстрирующую её использование
Написать функцию вычисления факториала и программу, иллюстрирующую её использование на примере вычисления суммы ряда где x и n вводятся с...

Написать программу вычисления факториала с использованием рекурсивной подпрограммы
Написать программу вычисления факториала с использованием рекурсивной подпрограммы.

4
27 / 27 / 29
Регистрация: 04.01.2015
Сообщений: 120
20.11.2016, 22:51
Можно попробовать так:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
type 
  long = int64;
 
function fact(n:long):long;
begin
  if (n = 2) then
    fact:= n
  else
    fact:= n * fact(n - 1);
end;
 
var 
  n, m:long;
  f:real;
  
begin
  writeln('Введите n и m:');
  read(n, m);
  f:= (fact(n - fact(m))) / (fact(m) + fact(fact(n))) + fact(fact(m));
  writeln('Значение выражения: ', f);
end.
Но ООЧЕЕНЬ рискуем нарваться на StackOverFlow...
1
Модератор
10432 / 5720 / 3404
Регистрация: 17.08.2012
Сообщений: 17,403
20.11.2016, 23:56
Решение неверное. В выражении записаны n!! и m!!, в программе они ошибочно вычисляются как n! и m!.

Добавлено через 25 минут
Да, и функция факториала неверная. При попытке вычислить 0! или 1! возникнет то самое Stack overflow.

А вообще, формула страшненькая, и без длинной арифметики для чисел с плавающей точкой навряд ли можно создать сколь-нибудь вразумительную программу. Допустим, от переполнения стека можно избавиться, убрав из программы явно лишнюю рекурсию, но от переполнения разрядной сетки это не избавит, какой бы стандартный тип данных не применялся... Задачу никто не решает, потому как хлопотно это. Я вообще удивлён, что ответов "почти не было", а не просто "не было".
1
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
21.11.2016, 09:19
n!! это не факториал факториала, а двойной факториал и он меньше чем обычный. Для нечетного n это 1*3*5*7.., для четного 2*4*6*8...

Добавлено через 2 минуты
А в числителе точно (n-m!)!, a не (n-m)!! ?
Просто если как написано n-m! чаще всего будет отрицательным.
1
Модератор
10432 / 5720 / 3404
Регистрация: 17.08.2012
Сообщений: 17,403
21.11.2016, 14:58
Лучший ответ Сообщение было отмечено Inftech как решение

Решение

Это даже хорошо, что будет отрицательным. Тогда можно ничего не вычислять, и выдать ответ, что при данных n и m выражение не определено.

Думал насчёт частичного сокращения дроби, но так ничего и не придумал, кроме длинной арифметики, естественно.

Добавлено через 5 часов 9 минут
Наивное решение, может быть, и подойдёт:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
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.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.11.2016, 14:58
Помогаю со студенческими работами здесь

Написать программу вычисления факториала с использованием рекурсивной подпрограммы
3. Написать программу вычисления факториала с использованием рекурсивной подпрограммы.

Написать программу для вычисления факториала
Помогите! заранее спасибо!

Написать программу для вычисления факториала числа
1) написать программу для вычисления факториала числа n!=1*2*3...*n. Число n вводится с клавиатуры

Написать программу, которая выводит значения факториалов чисел от 0 до N. Для вычисления факториала числа написать функцию пользователя
Написать программу, которая выводит значения факториалов чисел от 0 до N. Для вычисления факториала числа написать функцию пользователя.

Написать программу для вычисления двойного факториала числа
2) написать программу для вычисления двойного факториала числа n!!=n*(n-2)*(n-4)*(n-6)... Число n вводится с клавиатуры.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия SDL 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual. . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru