Нахождение наибольшего по модулю элемента и выбрасывание из исходной матрицы строчку и столбец этого элемента - 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

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


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

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

9   голосов , оценка 4.333 из 5
Похожие ответы