Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка_Масиви(1834).doc
Скачиваний:
4
Добавлен:
07.02.2016
Размер:
2.76 Mб
Скачать

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

Задана квадратна матриця. Підрахувати найбільший елемент

  1. вище головної діагоналі ;

  2. вище побічної діагоналі ;

  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 - Результати розрахунків