Страница: 1 |
|
Вопрос: как передать функцию в качестве параметра?
|
Добавлено: 16.05.07 20:45
|
|
Автор вопроса: Floyd
|
подскажите, есть ли реализация в VB этого вопроса?
есть процедура подсчета интегралов. эта процедура считает
интеграл ессно по численному методу. в нее нужно передать извне
вид функции, которую обсчитывать. спасибо!
Ответить
|
Номер ответа: 2 Автор ответа: Floyd
Вопросов: 6 Ответов: 12
|
Профиль | | #2
|
Добавлено: 16.05.07 21:30
|
а можно чуть подробнее? я не могу чё-то разобраться как лучше сделать.
вот кусок кода. процедура счета интеграла:
Private Sub Integral(a, b, f)
Dim i, n As Integer
Dim chet, nechet, delta, Result As Double
n = 10 'tochnost
If n Mod 2 <> 0 Then n = n - 1
delta = (b - a) / n
chet = 0
nechet = 0
For i = 1 To n - 1
If i Mod 2 = 0 Then
chet = chet + (f(a + (delta * i)))
Else
nechet = nechet + (f(a + (delta * i)))
End If
Next i
Result = (delta / 3) * (f + f(b) + (2 * chet) + (4 * nechet))
'MsgBox result, vbInformation, "Результат"
End Sub
как видно, в нее передается граница a, граница b,
и надо передать вид функции f.
сейчас функция определяется, как
Function f(x) As Double
f = x*x + 3*x
End Function
и т.к. она глобальная, процедура ее знает без передачи.
как сделать, чтобы можно было вызывать счет интеграла в такой форме:
Function func(x) As Double
func = x*x + 3*x
End Function
...
Call Integral(0, 5, func)
или еще лучше
func(x) = x*x + 3*x
Call Integral(0, 5, func)
спасибо!
Ответить
|
Номер ответа: 3 Автор ответа: EUGY
Вопросов: 0 Ответов: 454
|
Профиль | | #3
|
Добавлено: 16.05.07 23:50
|
Option Explicit
Private Declare Function Signatura Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal prm1 As Long, ByVal prm2 As Long, ByVal prm3 As Long, ByVal prm4 As Long) As Long
Private Sub Proba()
Dim adr As Long
adr = GetFncAdr(AddressOf func)
Signatura adr, 55, 0, 0, 0
End Sub
Private Function GetFncAdr(adr As Long) As Long
GetFncAdr = adr
End Function
'в модуле
Public Function func(ByVal x As Long, ByVal dumm2 As Long, ByVal dumm3 As Long, ByVal dumm4 As Long) As Double
func = x * x + 3 * x
End Function
Приблизительно так
Ответить
|
Страница: 1 |
Поиск по форуму