VB 21. Матрицы. Элемент управления DataGridView

* Задание: Разработать приложение, которое находит «седловые» точки данной целочисленной матрицы порядка n х m (для отображения матрицы на форме использовать элемент управления DataGridView).

Выполнение:

Элемент матрицы назовем «седловой» точкой, если он является наименьшим в своей строке и одновременно наибольшим в своем столбце или, наоборот, является наибольшим в своей строке и наименьшим в своем столбце.

  1. Создайте новый проект стандартного приложения и разместите элементы управления (txtN, txtM, txtMin, txtMax, btnНоваяМатрица, btnСедловыеТочки и btnВыход) на форме (рисунок). Не забудьте добавить на форму элемент управления DataGridView.
работа с матрицами в VB2008
Форма «Седловые точки»
  1. Установите значение для свойства Enabled кнопки btnСедловыеТочки равным False, а также значение свойства AutoSizeColumnsMode для элемента управления DataGridView → AllCells (авторазмер для всех ячеек).
  2. В разделе описаний объявите переменные n, m (для хранения размерности матрицы) и динамический массив следующим образом:
Private n As Integer
Private m As Integer
Private Матрица(,) As Integer
  1. Теперь необходимо инициализировать нашу матрицу целыми числами из некоторого промежутка, а затем вывести ее в элемент управления DataGridView. Процедура обработки события click для кнопки btnНоваяМатрица выглядит следующим образом:
Private Sub btnНоваяМатрица_Click(…) Handles btnНоваяМатрица.Click
Dim a As Integer
Dim b As Integer
Dim i As Integer
Dim j As Integer
 
Randomize()
n = Val(txtN.Text) : m = Val(txtM.Text)
a = Val(txtMin.Text) : b = Val(txtMax.Text)
If n < 1 Or m < 1 Or b < a Then
  MsgBox("Введены ошибочные параметры матрицы!", MsgBoxStyle.OkOnly + _ MsgBoxStyle.Critical, "Ошибка!")
  Exit Sub
End If
 
ReDim Матрица(n, m)
With Dat
.RowCount = n
.ColumnCount = m
.ClearSelection()
For i = 0 To n - 1
  For j = 0 To m - 1
    Матрица(i + 1, j + 1) = Rnd() * (b - a) + a
    .Item(j, i).Value = Матрица(i + 1, j + 1)
  Next
Next
End With
 
btnСедловыеТочки.Enabled = True
End Sub
  1. Наконец, реализуем описанный выше алгоритм сортировки в процедуре обработки события Click для кнопки btnСедловыеТочки, предварительно описав функции Максимальный_в_строке, Минимальный_в_строке , Максимальный_в_столбце , Минимальный_в_столбце:
Private Function Максимальный_в_строке(ByVal x(,) As Integer, ByVal m As Integer, ByVal i As Integer, ByVal j As Integer) As Boolean
Максимальный_в_строке = True
For k = 1 To m
  If x(i, j) < x(i, k) Then Максимальный_в_строке = False
Next
End Function
 
Private Function Минимальный_в_строке(ByVal x(,) As Integer, ByVal m As Integer, ByVal i As Integer, ByVal j As Integer) As Boolean
Минимальный_в_строке = True
For k = 1 To m
  If x(i, j)> x(i, k) Then Минимальный_в_строке = False
Next
End Function
 
Private Function Максимальный_в_столбце(ByVal x(,) As Integer, ByVal n As Integer, ByVal i As Integer, ByVal j As Integer) As Boolean
Максимальный_в_столбце = True
For k = 1 To n
  If x(i, j) < x(k, j) Then Максимальный_в_столбце = False
Next
End Function
 
Private Function Минимальный_в_столбце(ByVal x(,) As Integer, ByVal n As Integer, ByVal i As Integer, ByVal j As Integer) As Boolean
Минимальный_в_столбце = True
For k = 1 To n
  If x(i, j) > x(k, j) Then Минимальный_в_столбце = False
Next
End Function
  1. Процедура обработки события Click для кнопки btnСедловыеТочки:
Private Sub btnСедловыеТочки_Click(…) Handles btnСедловыеТочки.Click
Dim i As Integer
Dim j As Integer
For i = 1 To n
  For j = 1 To m
    If (Максимальный_в_строке(Матрица, m, i, j) = True _
     And Минимальный_в_столбце(Матрица, n, i, j) = True) Or _
     (Максимальный_в_столбце(Матрица, n, i, j) = True _
     And Минимальный_в_строке(Матрица, m, i, j) = True) Then
     Dat.Item(j - 1, i - 1).Selected = True
    End If
  Next
Next
End Sub
  1. Наконец, необходимо обработать событие Change для текстовых окон txtN, txtM, txtMin и txtMax следующим образом:
btnСедловыеТочки.Enabled=False

Блокировка кнопки при изменении текстовых полей.

В противном случае, после внесения изменений в параметры матрицы поиск «седловых» точек может быть некорректным.

  1. Запустите и отладьте приложение.
Дополнительное задание:

Добавить в приложение возможность выбирать режим инициализации матрицы разными числами. Поместите соответствующий переключатель в окно с параметрами матрицы.

Контрольные задания:

  1. Найти все эелементы данной матрицы большие заданного числа (число вводится пользователем).
  2. Поменять местами в данной матрице указанные столбцы.
Вопросы для самоконтроля:

  1. Что такое матрица?
  2. Каково основное назначение элемента DataGridView?
  3. Как отобразить матрицу в таблице DataGridView? Опишите основные шаги этого процесса.

* При использовании материалов обязательна ссылка на источник: Майер С.Ф., «MS Visual Basic 2008» — Учебно-методическое пособие : Южный федеральный университет. – Ростов-на-Дону, 2017. – 92 с.