Вычислить определитель произвольного размера - VB
Формулировка задачи:
На форме стоит кнопка и текстовое поле. В поле вводится число от 2 до 10 (для данной программы). Программа задает рандомно определитель и вычисляет его. Результат выводит на форму.
примечание:
Время работы программы при n=10 равно 4 сек.
Поскольку время работы пропорционально n!, то
использовать программу при n>10 неразумно
(Для n=11 время будет 40 сек. Но скорее вы получите
переполнение и надо использовать другой тип чисел)
Листинг программы
- Option Explicit
- Option Base 1
- Dim a() As Integer, b() As Integer
- Dim i%, j%
- Private Sub cmdD_Click()
- Dim n As Integer
- Cls
- n = Val(txtN.Text)
- ReDim a(n, n) As Integer
- ReDim b(n, n) As Integer
- Randomize Timer
- For i = 1 To n
- For j = 1 To n
- a(i, j) = 9 * Rnd
- Print a(i, j);
- Next j: Print
- Next i
- Print "|A| = "; DET(n, a())
- End Sub
- Sub ALG(j As Integer, n As Integer, a() As Integer, c() As Integer)
- Dim k As Long
- Dim l As Long
- For k = 1 To n - 1
- For l = 1 To n - 1
- If l < j Then
- c(k, l) = a(k + 1, l)
- Else
- c(k, l) = a(k + 1, l + 1)
- End If
- Next l
- Next k
- End Sub
- Function DET(n As Integer, a() As Integer) As Long
- Dim D As Long
- Dim m As Integer
- If n = 1 Then
- DET = a(1, 1)
- Else
- D = 0
- For m = 1 To n
- Call ALG(m, n, a(), b())
- D = D - (-1) ^ m * a(1, m) * DET(n - 1, b())
- Next m
- DET = D
- End If
- End Function
Решение задачи: «Вычислить определитель произвольного размера»
textual
Листинг программы
- Function Det(A() As Double) As Double
- n% = UBound(A, 1)
- If n% = 2 Then
- Det = A(1, 1) * A(2, 2) - A(1, 2) * A(2, 1)
- Else
- S# = 1
- For j% = 1 To n%
- Det = Det + A(1, j%) * Det(Minor(A(), 1, j%)) * S#
- S# = -S#
- Next j%
- End If
- End Function
- Function Minor(A() As Double, m As Integer, k As Integer) As Double()
- Dim B() As Double
- nn% = UBound(A, 1)
- ReDim B(1 To nn% - 1, 1 To nn% - 1) As Double
- ii% = 1
- jj% = 1
- For i% = 1 To nn%
- For j% = 1 To nn%
- If i% <> m And j% <> k Then
- B(ii%, jj%) = A(i%, j%)
- jj% = jj% + 1
- If jj% > nn% - 1 Then
- ii% = ii% + 1
- jj% = 1
- End If
- End If
- Next j%
- Next i%
- Minor = B
- End Function
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д