1 Сентябрь 2008

Нахождение факториала

Арифметика |  Таги: ,

Думаю что среди посетителей и читателей блога много учащихся, студентов и школьников, поэтому считаю, что многим будет интересно узнать, как возможно реализовать то или иное математическое действие.

В свое время мне понадобилось написать программу для расчета факториала числа, что я собственно и сделал.

Для реализации нам понадобиться всего лишь 1 кнопка и 1 метка для вывода результата.

Очень просто нажали на кнопку, ввели число, для которого необходимо рассчитать факториал и программа уже вывела результат.

Option Explicit

Очень важно чтобы каждый программный код, написанный Вами начинался инструкцией Option Explicit. Это поможет избежать различных ошибок при работе с переменными.

Что она делает?

Она заставляет Вас обязательно перед работой объявить переменную, т.е. рассказать компилятору, что Вы резервируете переменную и присваиваете ей какой либо тип, выделяя при этом память.

Работать без объявления переменных можно, но в разы увеличивается вероятность простейшей ошибки, которая отнимет у Вас гораздо больше времени, чем сам момент объявления.

Так что это полезно делать, и мы это будем делать.

Объявим две переменные:

Dim Buffer As String
Dim bytN As Double

А вот сама функция для нахождения факториала:

Function Fact(bytA As Double) As Double
Dim bytI As Double
Dim intFact As Double
intFact = 1
For bytI = 1 To bytA
   intFact = intFact * bytI
Next
Fact = intFact
End Function

Здесь, внутри функции тоже объявлены переменные необходимые для работы самой функции.

С помощью функции InputBox мы получаем от пользователя данные

strInput = InputBox("Ввод значения:", "Ввод")

И наша функция Fact выводит результат в метку Label1.

Максимальное число для ввода – 170, иначе произойдет переполнение.

Полный код программы:

Option Explicit
Dim Buffer As String
Dim bytN As Double

Private Sub Form_Load()
Label1.Caption = "Факториал = "
End Sub

Function Fact(bytA As Double) As Double
Dim bytI As Double
Dim intFact As Double
intFact = 1
For bytI = 1 To bytA
   intFact = intFact * bytI
Next
Fact = intFact
End Function

Private Sub Command1_Click()
On Error GoTo Error
Dim strInput As String
strInput = InputBox("Ввод значения:", "Ввод")
bytN = CDbl(strInput)
Label1.Caption = "Факториал = " & Fact(bytN)
Exit Sub
Error:
   Label1.Caption = "Ошибка!"
End Sub

PS Если Вы хотите показать свои варианты решения данного вопроса, оставляйте комментарии, мне, так же как и остальным читателям будет интересно посмотреть и Ваш код.



У нас куча комментариев (2) на запись “Нахождение факториала”

Почему бы Вам не высказать свое мнение! Позвольте нам узнать, что Вы думаете...

  1. 1 On 03.07.2008, Nerey said:

    Интересно? Тогда банальная рекурсия

    *не знаю, есть ли здесь теги…

    Function Fact(bytA As Long) As Long
    On Error Resume Next
    If bytA > 2 Then

    ElseIf bytA = 2 Then
    Fact = 2
    ElseIf bytA = 1 Or bytA = 0 Then
    Fact = 1
    Else
    Err.Raise 777, , «Низзя»
    End If
    End Function

    Немного и с проверками 8)

    Кстати, совсем не понимаю с какой радости можно найти факториал дробного числа и тем более получить дробный результат.

  2. 2 On 12.07.2008, Nerey said:

    Ооо блин я ступииил…
    И модератор тоже кто допустил собщение :(

    [code]Public Function Fact(bytA As Long) As Long
    On Error Resume Next
    If bytA > 2 Then
    Fact = Fact(bytA - 1) * bytA
    ElseIf bytA = 2 Then
    Fact = 2
    ElseIf bytA = 1 Or bytA = 0 Then
    Fact = 1
    Else
    Err.Raise 777, , "Низзя"
    End If
    End Function[/code]

Оставить комментарий

Я не робот.