Самый наверное простой пример - с вычислением факториала
Вот - простая пользовательская функция в несколько строчек
Function factori(n)
If n=0 Then factori=1
If n=1 Then factori=1
If n>1 Then factori=factori(n-1)*n
End Function
Тут следовало бы добавить условие n<=170, потому как на 171 уже вылетает ошибка, в связи с лимитом максимальной величины. Вообще каждую функцию по возможности следует обрамлять обработчиком ошибок, чего тут не сделано.
Другой пример - функция массива, которая в процессе выполнения генерирует другую функцию, а затем вычисляет значение по ней. В данном случае делается это для того, чтобы программа "понимала" формулу, введенную как текстовая строка, как формулу.
Function TableOfResults( formula As String , LowerPoint As Double, UpperPoint As Double, NumOfValues As Integer)
'Create UserFunction in the New Module
oBLibs = BasicLibraries
oBL = oBLibs.getByName("Standard")
'Text of new Function
Dim TextOfFunction As String
TextOfFunction = "Function results_by_formula(x)" & CHR(10) & "results_by_formula="& Str(formula) & CHR(10) & "End Function" & CHR(10)
'Write the test of new function into the new module
If oBL.hasByName("New_Module") Then oBL.removeByName("New_Module")
oBL.insertByName("New_Module", TextOfFunction)
Dim ResArray(1 To NumOfValues+1 , 1 To 2) As Double
For i=1 To NumOfValues+1
ResArray(i,1)=LowerPoint+(i-1)*(UpperPoint-LowerPoint)/(NumOfValues)
ResArray(i,2)=results_by_formula(ResArray(i,1))
Next i
TableOfResults=ResArray
End Function
Функция массива означает то, что при вводе нужно пользоваться сочетанием клавиш CTRL+SHIFT+ENTER. А при последующей правке следует выделить весь диапазон, занятый вычисленными значениями.
Вообще функции массива - это замечательное преимущество OpenOffice Basic перед VBA. Но удобно пользоваться ими далеко не всегда.
<Скачать пример тут>
Вот - простая пользовательская функция в несколько строчек
Function factori(n)
If n=0 Then factori=1
If n=1 Then factori=1
If n>1 Then factori=factori(n-1)*n
End Function
Тут следовало бы добавить условие n<=170, потому как на 171 уже вылетает ошибка, в связи с лимитом максимальной величины. Вообще каждую функцию по возможности следует обрамлять обработчиком ошибок, чего тут не сделано.
Другой пример - функция массива, которая в процессе выполнения генерирует другую функцию, а затем вычисляет значение по ней. В данном случае делается это для того, чтобы программа "понимала" формулу, введенную как текстовая строка, как формулу.
Function TableOfResults( formula As String , LowerPoint As Double, UpperPoint As Double, NumOfValues As Integer)
'Create UserFunction in the New Module
oBLibs = BasicLibraries
oBL = oBLibs.getByName("Standard")
'Text of new Function
Dim TextOfFunction As String
TextOfFunction = "Function results_by_formula(x)" & CHR(10) & "results_by_formula="& Str(formula) & CHR(10) & "End Function" & CHR(10)
'Write the test of new function into the new module
If oBL.hasByName("New_Module") Then oBL.removeByName("New_Module")
oBL.insertByName("New_Module", TextOfFunction)
Dim ResArray(1 To NumOfValues+1 , 1 To 2) As Double
For i=1 To NumOfValues+1
ResArray(i,1)=LowerPoint+(i-1)*(UpperPoint-LowerPoint)/(NumOfValues)
ResArray(i,2)=results_by_formula(ResArray(i,1))
Next i
TableOfResults=ResArray
End Function
Функция массива означает то, что при вводе нужно пользоваться сочетанием клавиш CTRL+SHIFT+ENTER. А при последующей правке следует выделить весь диапазон, занятый вычисленными значениями.
Вообще функции массива - это замечательное преимущество OpenOffice Basic перед VBA. Но удобно пользоваться ими далеко не всегда.
<Скачать пример тут>
No comments:
Post a Comment