Private Function Det1(ByRef Matrix() As Double, ByVal N As Byte) As Double
Dim StrNum As Long, I As Long, I1 As Long, J As Long, J1 As Long, Coeff As Double, _
K As Double, Flag As Boolean, Mtx() As Double, Temp As Double
ReDim Mtx(0 To N - 1, 0 To N - 1)
For I = 0 To N - 1
For J = 0 To N - 1
Mtx(I, J) = Matrix(I, J)
Next J
Next I
J = 0: Coeff = 1
For I = 0 To N - 1
If StrNum = 0 Then
If Mtx(I, J) <> 0 Then
If Mtx(I, J) < 0 Then
For J1 = 0 To N - 1
Mtx(I, J1) = -Mtx(I, J1)
Next J1
Coeff = -Coeff
End If
StrNum = I
K = Mtx(I, J)
Coeff = Coeff * K
For J1 = 0 To N - 1
Mtx(I, J1) = Mtx(I, J1) / K
Next J1
J1 = J: I1 = I + 1
While I1 < N
K = Mtx(I1, J1)
For J1 = J1 To N - 1
Mtx(I1, J1) = Mtx(I1, J1) - K * Mtx(I, J1)
Next J1
I1 = I1 + 1: J1 = J
Wend
StrNum = 0: J = I + 1: Flag = False
Else
For J1 = 0 To N - 1
Temp = Mtx(I, J1): Mtx(I, J1) = Mtx(N - 1, J1)
Next J1
I = I - 1: Coeff = -Coeff
If Flag = True Then
I = I + 1: Coeff = 0
End If
Flag = True
End If
End If
Next I
Det1 = Coeff
End Function
Перевод с C++ на VB
отсюда.После переписывания на VB получилось вот что:
Но он работает неправильно.Если убрать J=0(в самом начале),получается ерунда,ибо после цикла J≠0
Где я мог допустить ошибку?
P.S.Т.к. исходный код меняет матрицу,я её предварительно копирую
Upd:следует добавить,что VB6
Имеется код на C++,взятый
Код:
Где я мог допустить ошибку?
P.S.Т.к. исходный код меняет матрицу,я её предварительно копирую
Upd:следует добавить,что VB6