Лекция № 21. Создание и использование процедур
Страница 6. Пример решения задачи
Пример. Ввести массив А(n, n). Найти максимальный и минимальный элементы главной диагонали. Заменить все элементы главной диагонали на максимальный элемент, побочной – на минимальный. Если массив содержит нечетное число строк и столбцов, то центральный элемент заменить на 0.
Sub main()
Dim nn As Byte
'определяем размер квадратной матрицы
nn = InputBox("Введите размер квадратной матрицы")
'вызываем процедуру очистки рабочего листа
Call Ochistka
'вызываем процедуру заполнения массива
Call Zapolnenie(nn)
End Sub
Sub Ochistka()
'очистка рабочего листа от посторонних надписей
Range("a1:z100").Clear
End Sub
Sub Zapolnenie(n)
Randomize Timer
Dim i As Byte, j As Byte
Dim a() As Integer
Dim max As Integer, min As Integer
ReDim a(n, n)
'заполнение массива с использованием генератора случайных чисел
For i = 1 To n
For j = 1 To n
a(i, j) = 50 - Int(Rnd() * 100)
Next j
Next i
'вызов процедуры вывода массива в рабочий лист
Cells(3, 1) = "Исходный массив:"
Call Vivod(a(), n, n, 3)
'вызов функции поиска максимума
max = Maximum(a(), n)
'вызов функции поиска минимума
min = Minimum(a(), n)
'вызов процедуры замены диагональных элементов
Call Zamena(a(), n, max, min)
End Sub
Sub Vivod(b() As Integer, ByVal i1 As Byte, ByVal j1 As Byte, ByVal k As Byte)
'процедура вывода массива на печать в рабочий лист
Dim i As Byte, j As Byte
For i = 1 To i1
For j = 1 To j1
Cells(i + k, j) = b(i, j)
Next j
Next i
End Sub
Function Maximum(c() As Integer, ByVal i2 As Byte) As Integer
'функция поиска минимального элемента на диагонали матрицы
Dim i As Byte
Maximum = c(1, 1)
For i = 1 To i2
If c(i, i) > Maximum Then Maximum = c(i, i)
Next i
End Function
Function Minimum(c() As Integer, ByVal i2 As Byte) As Integer
'функция поиска минимума на диагонале в матрице
Dim i As Byte
Minimum = c(1, 1)
For i = 1 To i2
If c(i, i) < Minimum Then Minimum = c(i, i)
Next i
End Function
Sub Zamena(d() As Integer, ByVal i3 As Byte, ByVal maxm As Integer, ByVal minm As Integer)
Dim i As Byte
'процедура замены диагональных элементов
For i = 1 To i3
d(i, i) = maxm
d(i, i3 - i + 1) = minm
Next i
'замена центрального элемента на 0 при нечетном размере матрицы
If Int(i3 / 2) <> i3 / 2 Then d(Int(i3 / 2) + 1, Int(i3 / 2) + 1) = 0
' вывод на печать преобразованного массива
Cells(i3 + 5, 1) = "Преобразованный массив:"
'вызов процедуры вывода
Call Vivod(d(), i3, i3, i3 + 5)
End Sub