Вычисление факториала натуральных (неотрицательных целых) чисел с помощью пользовательской функции Factorial. Ограничение для VBA Excel по типу данных.
Вычисление факториала
Формула, по которой вычисляется факториал, записывается следующим образом:
n! = 1 · 2 · ... · n
Пример: 3! = 1 · 2 · 3 = 6
В соответствии с формулой факториала, будет верным следующее соотношение:
(n-1)! = n! : n
Если принять для этого равенства n = 1, тогда получим:
0! = 1
Функция Factorial
Для вычисления факториала натуральных чисел можно использовать следующую пользовательскую функцию:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Public Function Factorial(n) Dim i, p If Not IsNumeric(n) Or n = Empty Then Factorial = "Аргумент не является числом" Exit Function ElseIf n < 0 Then Factorial = "Аргумент отрицательный" Exit Function End If p = 1 n = Format(n, 0) If n > 1 Then For i = 2 To n p = p * i Next End If Factorial = p End Function |
Первое условие функции Factorial (If Not IsNumeric(n) Or n = Empty
) проверяет, не является ли значение ячейки не числом. Второе условие (ElseIf n < 0
) проверяет, не является ли число в ячейке отрицательным.
Если значение ячейки окажется не числом или числом отрицательным, функция возвратит соответствующее сообщение и завершит работу (Exit Function
).
Далее, если функция Factorial не завершила работу, переменной p присваивается значение 1, которое возвратит функция, если значение переменной n будет равно нулю или единице.
Значение ячейки (переменная n) округляется до целого и, если оно окажется больше единицы, вычисляется факториал с помощью цикла For… Next.
Пользовательская функция Factorial возвратит значение, присвоенное ей из переменной p.
Ограничение по типу данных
Максимальное значение пользовательской функции Factorial будет ограничено максимальным значением типа данных Double (1,79769313486232Е+308).
Максимально возможное значение будет превышено при вычислении факториала при n > 170. В этом случае, в ячейку с функцией Factorial, Excel возвратит сообщение об ошибке: #ЗНАЧ!.
При желании, можно в код функции Factorial добавить еще одно условие, проверяющее, не содержит ли переменная n значение больше 170. Если n > 170, тогда вывод сообщения об этом и выход из функции.