Нахождение наибольшего по модулю элемента и выбрасывание из исходной матрицы строчку и столбец этого элемента - VB
Формулировка задачи:
В данной действительной квадратной матрице порядка n найти наибольший по модулю элемент. Получить квадратную матрицу порядка n-1 путём выбрасывания из исходной матрицы какой-нибудь строки и столбца, на пересечении которых расположен элемент с найденным значением.
Не могу разобраться с выбрасыванием.
Вот мой код:
Процедура формирования массива с рандомными значениями
Процедура нахождения наибольшего по модулю элемента
Решение задачи: «Нахождение наибольшего по модулю элемента и выбрасывание из исходной матрицы строчку и столбец этого элемента»
textual
Листинг программы
Option Explicit
Private Sub Form_Load()
Dim Mtx() As Double, Tmp() As Double
Dim Fi As Long, Fj As Long, v As Double
Dim i As Long, j As Long
Dim cI As Long, cJ As Long
NewArray Mtx, 5
Print "Исходная ";
PrintMatrix Mtx
v = Max(Mtx, Fi, Fj)
Print "Максимальный элемент = " & v & " (" & Fi & " x " & Fj & ")"
ReDim Tmp(UBound(Mtx, 1) - 1, UBound(Mtx, 2) - 1)
cI = 0: cJ = 0
For i = 0 To UBound(Mtx, 1): For j = 0 To UBound(Mtx, 2)
If i <> Fi And j <> Fj Then
cI = i + (i >= Fi)
cJ = j + (j >= Fj)
Tmp(cI, cJ) = Mtx(i, j)
End If
Next: Next
Mtx = Tmp
Print "Итоговая ";
PrintMatrix Mtx
End Sub
Private Sub PrintMatrix(Ar() As Double)
Dim i As Long, j As Long
Dim S As String
Print "матрица (" & UBound(Ar, 1) + 1 & " x " & UBound(Ar, 2) + 1 & ") {"
For i = 0 To UBound(Ar, 1): For j = 0 To UBound(Ar, 2)
S = Space(6)
LSet S = Str$(Ar(i, j))
Print S;
Next
Print
Next
Print "}"
End Sub
Private Sub NewArray(Ar() As Double, ByVal Size As Long)
Dim i As Long, j As Long
ReDim Ar(Size - 1, Size - 1)
Randomize ' Достаточно один раз
For i = 0 To Size - 1: For j = 0 To Size - 1
Ar(i, j) = Int(Rnd * 100) - 50
Next: Next
End Sub
Private Function Max(Ar() As Double, ByRef RetI As Long, ByRef RetJ As Long) As Double
Dim i As Long, j As Long
Max = Ar(0, 0)
For i = 0 To UBound(Ar, 1): For j = 0 To UBound(Ar, 2)
If Abs(Ar(i, j)) > Max Then
Max = Abs(Ar(i, j))
RetI = i: RetJ = j
End If
Next: Next
End Function