Бамбук, помогите осилить функцию
Function MAZA_P(ByRef rah As Range, ByRef nmaza As Range, ByRef mi As Range, Optional VolatileOn As Boolean = True) As Variant
На вход подается три переменных:
rah - это коэффициент матча
nmaza - число матчей до окончания последовательности
mi - число необходимых выигрышей до закрытия последовательности (в двух вариантах)
Application.Volatile VolatileOn
Dim VOZ As Range
Dim N As Range
Dim M As Range
Dim i, j As Long
Dim smas() As Single
Dim P1, S1, PUM1, SUM1, VER1 As Double
Здесь определяем переменные.
Set N = nmaza
Set M = mi
Set VOZ = rah
ReDim smas(N.Value)
i = 0
Do Until i > N.Value
smas(i) = VOZ.Offset(rowOffset:=i, columnOffset:=0).Value
i = i + 1
Loop
Здесь присваиваем переменным значения.
Только непонятно, зачем мы пишем кэфы наперед? Мы же не можем знать какой будет кэф на 10-м шагу, находясь на первом. А если не вводишь кэфы, то N само изменяется в меньшую сторону.
А еще получается так, что когда мы вводим следующие кэфы, то значения предыдущих ячеек изменятся. Так должно быть?
VER1 = 0
i = 1
j = 0
For j = 0 To 2 ^ N.Value - 1 Step 1
S1 = j
PUM1 = 1
SUM1 = 0
For i = 1 To N.Value Step 1
P1 = S1 Mod 2
If P1 = 1 Then
PUM1 = PUM1 / smas(i - 1)
SUM1 = SUM1 + P1
S1 = S1 \ 2
Else
PUM1 = PUM1 * (1 - 1 / smas(i - 1))
SUM1 = SUM1 + P1
S1 = S1 \ 2
End If
Next i
If SUM1 >= M.Value Then
VER1 = VER1 + PUM1
Else
VER1 = VER1
End If
Next j
MAZA_P = VER1
End Function
Этот кусок кода какую роль исполняет? Что значат эти переменные и что здесь считается?
Может нам не надо все значения от 0 до 2^N-1?
И что за число эта функция дает на выходе?
Если не сложно, то проясните данные моменты.
Отредактировано tester.nt, 28 May 2015 - 21:37.