- •Методичні вказівки та завдання
- •1 Вибір варіанта завдання та порядок виконання і вимоги до оформлення лабораторних робіт
- •2 Варіанти завдань
- •2.1 Одновимірні масиви
- •2.2 Матриці
- •3 Контрольні питання
- •4 Зразок виконання лабораторних робіт
- •4.1 Загальні відомості
- •4.1.1 Одновимірні масиви
- •4.1.2 Матриці
- •4.2 Приклади завдання та розв’язок задач обробки одновимірних масивів
- •4.3 Приклади завдання та розв’язок задач для двовимірних масивів
- •5 Література
- •6 Додаток а Зразок титульної сторінки лабораторної роботи
4.3 Приклади завдання та розв’язок задач для двовимірних масивів
Розглянемо приклади задач, в яких використовуються матриці.
Приклад 4.3.1
Задана цілочисельна матриця А розміром m*n. Знайти масив В(m), елементи якого дорівнюють відповідно сумам елементів тих рядків, які починаються з парних елементів.
Для наданої задачі розглянемо декілька способів рішення:
Спосіб 1
Додамо до проекту модуль, який утримує подальшу процедуру. Для введення елементів матриці використаємо вікно введення (InputBox). Для виведення самої матриці та побудованого масиву – вікно повідомлень (MsgBox). Для відображення матриці у вигляді таблиці використовується функція переходу на новий рядок VbCrlf.
Код програми:
Sub новий_масив()
‘оголошення змінних
Dim m As Integer, n As Integer, i As Integer, j As Integer
Dim k As Integer
Dim a() As Integer, b() As Integer, sa As String, sb As String
‘виклик вікон вводу змінних m та n
m = InputBox("кількість рядків m=", "вікно вводу початкових")
n = InputBox("кількість стовпців n=", "вікно вводу початкових")
‘завдання розміру масивів
ReDim a(m, n), b(m)
‘очищення текстових змінних
sa = ""
sb = ""
‘ввід елементів матриці
For i = 1 To m
For j = 1 To n
a(i, j) = InputBox("a(" & CStr(i) & "," & CStr(j) & ")=")
sa = sa & CStr(a(i, j)) & " "
Next j
sa = sa & vbCrLf
Next i
k = 0
For i = 1 To m
If a(i, 1) Mod 2 = 0 Then
k = k + 1
b(k) = 0
For j = 1 To n
b(k) = b(k) + a(i, j)
Next j
sb = sb & CStr(b(k)) & " "
End If
Next i
If k = 0 Then sb = "таких елементів немає”
MsgBox "матриця à:" & vbCrLf & sa & vbCrLf & _
"масив в:" & vbCrLf & sb
End Sub
Вікна введення даних наведені на рис. 4.15.
Рисунок 4.15 - Вікна введення
Результати роботи програми наведені на рис. 4.16.
Рисунок 4.16 - Результати роботи програми
Спосіб 2
Для відображення початкових значень та значень розрахунків використовуємо “Лист1” Excel. Розмістимо командну кнопку CommanButton1 на цьому листі, як показано на рис. 4.17. Встановимо значення для властивості Caption – „Створення масиву” , для Font – „Начертание” значення - „жирный”, „Размер” – 14. Вивести результати обчислень починаючи з клітини через стовпчик після матриці. В наведеному прикладі це клітина G5.
Рисунок 4.17 - Інтерфейс Лист1
Код програми:
Спосіб 3
Для організації введення даних і виведення результатів створимо форму, в якій розмістимо такі елементи керування:
написи Label1, Label2, Label3, Label4, у яких властивості Caption змінені на тексти. що зазначені на рис. 4.18. Крім того, у написів змінена властивість Font - шрифт, його розмір - 10, і жирність – Bold;
текстові поля TextBox1, TextBox2 для введення початкової інформації. У цих об’єктів також змінена властивість Font;
текстові поля TextBox3, TextBox4 призначені для виведення матриці та масиву результату. Змінена властивість Font , властивості MultiLine = True , WordWrap = True , щоб виводити в полі текст у декілька рядків, ScrollBars – 3 ;
командна кнопка CommandButton1 , з якою зв’язується процедура рішення задачі. Змінена властивість Caption на текст, що зазначений на кнопці, властивості Font - розмір, жирність.
Рисунок 4.18 - Форма до задачі 1 для способу 3
Код програми
Private Sub CommandButton1_Click()
Dim m As Integer, n As Integer, i As Integer, j As Integer
Dim k As Integer
Dim a() As Integer, b() As Integer, sa As String, sb As String
m = TextBox1.Text
n = TextBox2.Text
ReDim a(m, n), b(m)
sa = ""
sb = ""
For i = 1 To m
For j = 1 To n
a(i, j) = InputBox("a(" & CStr(i) & "," & CStr(j) & ")=")
sa = sa & CStr(a(i, j)) & " "
Next j
sa = sa & vbCrLf
Next i
TextBox3.Text = sa
k = 0
For i = 1 To m
If a(i, 1) Mod 2 = 0 Then
k = k + 1
b(k) = 0
For j = 1 To n
b(k) = b(k) + a(i, j)
Next j
sb = sb & CStr(b(k)) & " "
End If
Next i
If k = 0 Then sb = "таких елементів немає"
TextBox4.Text = sb
End Sub
Приклад форми по завершенню програми наведено на рис. 4.19.
Рисунок 4.19 - Форма в процесі роботи
Приклад 4.3.2
Задана дійсна матриця Х розміром m*n. Стовпці, які починаються з додатних елементів записати у зворотному порядку.
Розмістимо надану матрицю Х на “Лист2”, перетворену матрицю на “Лист3”. Додамо модуль до проекту .
Код програми
Sub Зміна()
Dim m As Integer, n As Integer, i As Integer, j As Integer
Dim r As Integer
Dim x() As Single
m = InputBox("кількість рядків m=", "вікно вводу початкових")
n = InputBox("кількість стовпців n=", "вікно вводу початкових")
ReDim x(m, n)
‘підготовка тексту-коментарю “Матриця”, та розміщення ‘його в діапазоні (А1:D1) по центру
Worksheets("Лист2").Range("A1").Value = "Матриця"
Worksheets("Лист2").Range("A1:D1").HorizontalAlignment=xlCenter
Worksheets("Лист2").Range("A1:d1").MergeCells = True
For i = 1 To m
For j = 1 To n
x(i, j) = InputBox("x(" & CStr(i) & "," & CStr(j) & ")=")
Worksheets("Лист2").Cells(i + 1, j).Value = x(i, j)
Next j
Next i
For j = 1 To n
If x(1, j) > 0 Then
For i = 1 To m \ 2
r = x(i, j)
x(i, j) = x(m - i + 1, j)
x(m - i + 1, j) = r
Next i
End If
Next j
Worksheets("Лист3").Range("A1").Value = " Змінена матриця"
Worksheets("Лист3").Range("A1:d1").HorizontalAlignment=xlCenter
Worksheets("Лист3").Range("A1:d1").MergeCells = True
For i = 1 To m
For j = 1 To n
Worksheets("Лист3").Cells(i + 1, j).Value = x(i, j)
Next j
Next i
End Sub
Вікна введення початкових даних в процесі роботи наведені на рис. 4.20.
Рисунок 4.20 - Вікна введення
Результати роботи програми наведені на рис. 4.21.
Рисунок 4.21 - Результати роботи програми (Лист1, Лист2)
Приклад 4.3.3
Задана квадратна матриця. Підрахувати найбільший елемент
вище головної діагоналі ;
вище побічної діагоналі ;
двох з вказаних випадках.
Для організації введення даних і виведення результатів створимо форму, в якій розмістимо такі елементи керування:
написи Label1, Label2, Label3 , у яких властивості Caption змінені на тексти, що зазначені на рис. 4.22. Крім того, у написів змінена властивість Font - шрифт, його розмір - 10, і жирність – Bold ;
текстові поля TextBox1, TextBox2 для введення початкової інформації. У цих об’єктів також змінена властивість Font ;
для текстового поля TextBox1 , яке призначене для виведення матриці змінені додатково властивості MultiLine=True, WordWrap=True, щоб виводити в полі текст у декілька рядків, ScrollBars – 3 ;
командна кнопка CommandButton1, з якою зв’язується процедура рішення задачі. Змінена властивість Caption на текст, що зазначений на кнопці, властивості Font - розмір, жирність ;
користувач обирає потрібний варіант за допомогою прапорців CheckBox1 , CheckBox2, у яких змінені властивості Caption, Font .
Рисунок 4.22 - Інтерфейс прикладу 4.3.3
Код програми
Private Sub CommandButton1_Click()
Dim n As Integer, i As Integer, j As Integer, sa As String
Dim a() As Single, m1 As Single, m2 As Single, m As Single
n = InputBox("Введіть розмір матриці n=")
ReDim a(n, n)
sa = ""
For i = 1 To n
For j = 1 To n
a(i, j) = InputBox("a(" & CStr(i) & "," & CStr(j) & ")=")
sa = sa & CStr(a(i, j)) & " "
Next j
sa = sa & vbCrLf
Next i
TextBox1.Text = sa
If CheckBox1.Value = True Then
m1 = a(1, 2)
For i = 1 To n - 1
For j = i + 1 To n
If a(i, j) > m1 Then m1 = a(i, j)
Next j
Next i
m = m1
End If
If CheckBox2.Value = True Then
m2 = a(1, 1)
For i = 1 To n - 1
For j = 1 To n - i
If a(i, j) > m2 Then m2 = a(i, j)
Next j
Next i
m = m2
End If
If CheckBox1.Value = True And CheckBox2.Value = True Then
If m1 > m2 Then m = m1 Else m = m2
End If
TextBox2.Text = CStr(m)
End Sub
Результати розрахунків наведені на рис. 4.23.
Рисунок 4.23 - Результати розрахунків