Вычислить определитель произвольного размера - VB

Узнай цену своей работы

Формулировка задачи:

На форме стоит кнопка и текстовое поле. В поле вводится число от 2 до 10 (для данной программы). Программа задает рандомно определитель и вычисляет его. Результат выводит на форму. примечание: Время работы программы при n=10 равно 4 сек. Поскольку время работы пропорционально n!, то использовать программу при n>10 неразумно (Для n=11 время будет 40 сек. Но скорее вы получите переполнение и надо использовать другой тип чисел)
Листинг программы
  1. Option Explicit
  2. Option Base 1
  3. Dim a() As Integer, b() As Integer
  4. Dim i%, j%
  5. Private Sub cmdD_Click()
  6. Dim n As Integer
  7. Cls
  8. n = Val(txtN.Text)
  9. ReDim a(n, n) As Integer
  10. ReDim b(n, n) As Integer
  11. Randomize Timer
  12. For i = 1 To n
  13. For j = 1 To n
  14. a(i, j) = 9 * Rnd
  15. Print a(i, j);
  16. Next j: Print
  17. Next i
  18. Print "|A| = "; DET(n, a())
  19. End Sub
  20. Sub ALG(j As Integer, n As Integer, a() As Integer, c() As Integer)
  21. Dim k As Long
  22. Dim l As Long
  23. For k = 1 To n - 1
  24. For l = 1 To n - 1
  25. If l < j Then
  26. c(k, l) = a(k + 1, l)
  27. Else
  28. c(k, l) = a(k + 1, l + 1)
  29. End If
  30. Next l
  31. Next k
  32. End Sub
  33. Function DET(n As Integer, a() As Integer) As Long
  34. Dim D As Long
  35. Dim m As Integer
  36. If n = 1 Then
  37. DET = a(1, 1)
  38. Else
  39. D = 0
  40. For m = 1 To n
  41. Call ALG(m, n, a(), b())
  42. D = D - (-1) ^ m * a(1, m) * DET(n - 1, b())
  43. Next m
  44. DET = D
  45. End If
  46. End Function

Решение задачи: «Вычислить определитель произвольного размера»

textual
Листинг программы
  1. Function Det(A() As Double) As Double
  2.      n% = UBound(A, 1)
  3.      If n% = 2 Then
  4.         Det = A(1, 1) * A(2, 2) - A(1, 2) * A(2, 1)
  5.      Else
  6.         S# = 1
  7.         For j% = 1 To n%
  8.             Det = Det + A(1, j%) * Det(Minor(A(), 1, j%)) * S#
  9.             S# = -S#
  10.         Next j%
  11.      End If
  12. End Function
  13.  
  14. Function Minor(A() As Double, m As Integer, k As Integer) As Double()
  15. Dim B() As Double
  16.     nn% = UBound(A, 1)
  17.     ReDim B(1 To nn% - 1, 1 To nn% - 1) As Double
  18.     ii% = 1
  19.     jj% = 1
  20.     For i% = 1 To nn%
  21.         For j% = 1 To nn%
  22.             If i% <> m And j% <> k Then
  23.                B(ii%, jj%) = A(i%, j%)
  24.                jj% = jj% + 1
  25.                If jj% > nn% - 1 Then
  26.                   ii% = ii% + 1
  27.                   jj% = 1
  28.                End If
  29.             End If
  30.         Next j%
  31.      Next i%
  32.      Minor = B
  33. End Function

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.429 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы