Нахождение наибольшего по модулю элемента и выбрасывание из исходной матрицы строчку и столбец этого элемента - VB
Формулировка задачи:
В данной действительной квадратной матрице порядка n найти наибольший по модулю элемент. Получить квадратную матрицу порядка n-1 путём выбрасывания из исходной матрицы какой-нибудь строки и столбца, на пересечении которых расположен элемент с найденным значением.
Не могу разобраться с выбрасыванием.
Вот мой код:
Процедура формирования массива с рандомными значениями
Процедура нахождения наибольшего по модулю элемента
Листинг программы
- 'Новый массив
- Sub NewMac(ByRef K(,) As Integer, ByVal m As Integer, ByVal n As Integer)
- Dim i, j As Integer
- For i = 0 To m
- For j = 0 To n
- Randomize()
- K(i, j) = CInt(Rnd())
- Next j
- Next i
- End Sub
Листинг программы
- Sub Naib(ByRef K(,) As Integer)
- Dim i, j, max As Integer
- max = K(0, 0)
- For i = 0 To UBound(K)
- For j = 0 To UBound(K)
- If Abs(K(i, j)) > max Then
- max = Abs(K(i, j))
- End If
- Next j
- Next i
- End Sub
Решение задачи: «Нахождение наибольшего по модулю элемента и выбрасывание из исходной матрицы строчку и столбец этого элемента»
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
- 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д