Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Візуал Бейсік 2010 Глінський.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
4.12 Mб
Скачать

§ 26*. Опрацювання двовимірних масивів

У цьому параграфі розглянемо особливі прийоми опрацювання масивів: використання грідів (сіток даних), дії з матрицями, за­стосування безрозмірних циклів.

1. Елементи керування DataGridView (vb) та DataGrid (vba).

Для роботи з масивами зручно користуватися елементами керуван­ня класу «гріди» (англ. DataGrid). Вони призначені для відображен­ня на формі табличних даних з різних джерел (баз даних, електрон­них таблиць, файлів, масивів). Елементи керування класу DataGrid називають грідами (рідше — сітками даних).

У VBA використання грідів обмежене (оскільки використання компоненти DataGrid потребує додаткової ліцензії). Тому розглянемо застосування грідів DataGridView у VB для введення даних з грідів у масиви і для виведення даних з масивів у гріди.

Грід має вигляд таблиці, яка складається з рядків (Rows) і за­звичай підписаних користувачем стовпців (Columns). На їх перетині є клітинки (Cells), з яких можна читати дані і куди можна запису­вати дані «вручну» чи програмним способом.

Гріди вставляють з панелі компонент Toolbox. Вони отриму­ють порядкові номери, наприклад: DataGridViewl, DataGridView2 і т.д.

На етапі конструювання у вікні властивостей треба задати кіль­кість стовпців і бажано підписи стовпців (властивість Columns), а та­кож інші властивості (AutoSize..., AllowUser... тощо). Програмним шляхом можна змінити підписи стовпців і додати порожні рядки. А ось стовпці вже додавати не можна.

Вираз DataGridViewl.Rows(i).Cells(j).Value дає доступ до даного, що є в і-му рядку в клітинці з номером j. Увага! Нумерація починається від нуля. У лівому верхньому куті таблиці (першим у таблиці) є значення DataGridViewl.Rows(0).Cells(0).Value. Якщо масиви створюють за принципом ігнорування нульового елемента, то для виведення таких масивів у грід треба брати до уваги розбіжність нумерації, зменшуючи номери у DataGridView на одиницю. Наприклад, занести деякий масив D(10, 10) з нумерацією елементів від одиниці у зазда­легідь підготовлений (з необхідною кількістю стовпців і рядків) грід DataGridViewl можна одним із двох способів:

1) For i = 1 То 10

For j = 1 То 10

DataGridViewl.Rows(i - 1).Cells(j - 1).Value = D(i, j)

Next j

Next і

2) For 0 = 1 To 9

For 0 = 1 To 9

DataGridViewl ,Rows(i).Cells(j).Value = D(i + 1, j + 1)

Next j

Next і

Щоб ввести дані з гріду у масив, треба в циклі виконати коман­ду D(i,j)=DataGridView1.Rows(i-1).Cells(j - 1).Value.

Розглянемо деякі інші можливості грідів.

Додати три порожні рядки до гріду можна командою DataGrid­Viewl .Rows.Add(3).

Додати рядок з конкретними даними (2, "three", 4, 5, "Олег") можна так: DataGridViewl.Rows.Add(2, "three", 4, 5, "Олег").

Вставити такий рядок з даними перед, наприклад, третім ряд­ком гріду можна так: DataGridViewl.Rows.Insert(3, 2, "three", 4, 5, "Олег").

Вивести у рядок гріду одновимірний масив А, оголошений як Ob­ject, можна одною такою командою (без використання циклу):

DataGridViewl .Rows.Add(A).

Задача 1. Виведіть таблицю Піфагора в грід.

Розв’язування. Вставимо на форму грід і кнопку «Вивести». У конструкторі для гріду побудуємо колекцію стовпців, які підпише­мо «сі», «с2»,..., «с10» (чи інакше) і задамо властивості Autosize значення AllCells. Головний код розглядали у попередньому парагра­фі. Модифікуємо його для виведення таблиці у грід з автоматичним вставлянням рядків і призначимо кнопці «Вивести»:

Dim і, j, D(10, 10)

For i = 1 То 10

DataGridViewl .Rows.Add(1) 'Вставити у грід рядок

For j = 1 То 10

D(i,j) = i‘j

DataGridViewl .Rows(i - 1).Cells(j - 1).Value = D(i, j)

Next j

Next і

Результат подано на рис. 2.3.

Рис. 2.3. Таблиця Піфагора у гріді

Завдання 1. Для набору даних, що є у квадратному гріді, на­приклад у таблиці Піфагора, чи введені у грід «вручну», обчислити:

а) суму парних елементів;

б) суму діагональних елементів (умова і = j);

в) суму наддіагональних елементів (умова і < j);

г) суму піддіагональних елементів (умова і > j);

д) кількість елементів, більших від деякого заданого числа d.

Завдання 2. Розв’яжіть задачу про продажі автомобілів з попе­реднього параграфа з використанням грідів.

Висновок. Гріди є зручним засобом для опрацювання табличних даних. Мало того, значення в грідах можуть належати до різних ти­пів даних.

2. Опрацювання матриць. Двовимірні числові таблиці в матема­тиці називають матрицями. Над матрицями визначені дії додаван­ня, віднімання, множення на число і множення матриці на матри­цю. Матриці зберігають у двовимірних масивах.

Задача 2. Використовуючи гріди (чи інші засоби, якщо гріди не­доступні), реалізуйте додавання двох матриць А і В розміру 2 на 2 елементи.

Модель задачі. Треба знайти матрицю С, де С = А + В. Операція «+» означає поелементне додавання матриць А і В, тобто сij = аij + bij, де і = 1, 2; j = 1, 2.

Проект. Вставимо на форму кнопку і три гріди, що матимуть два рядки і два стовпці. Код кнопки має забезпечити:

  1. зчитування чисел з двох грідів (чи двох файлів у VBA) у два двовимірні масиви А і В;

  2. створення третього масиву С як поелементну суму двох перших;

  3. виведення третього масиву у третій грід (в третій файл у VBA).

Числа у два перші гріди можуть бути введені після запуску про­екту. Третій грід має заповнитися після натискання кнопки. Код кнопки матиме такий вигляд:

Dim А(2, 2), В(2, 2), С(2, 2) As Integer

<ввести дані в масиви А і В з грідів чи інакше >

For і = 1 То 2

For j = 1 То 2

C(i,j) = A(i,j) + B(i,j)

Next j

Next і

<вивести дані з масиву С у грід чи інакше>

Завдання 1. Реалізуйте код, задавши вхідні набори даних як будь-які цілі числа.

Завдання 2. Модифікуйте попередній код для обчислення та­кої матриці: С = 3А + 2В. Тут 3А означає, що всі елементи матриці А треба помножити на 3.

Завдання 3*. Обчисліть і виведіть у грід матрицю С = А * В. Тут множення треба трактувати як множення матриць (див. фор­мули в довідниках чи в мережі).

3*. Безрозмірний цикл For Each («для кожного»). Розглянемо алгоритмічну конструкцію пошуку в багатовимірних масивах, у ко­лекціях чи інших складених структурах даних. Пошук реалізується шляхом перегляду всіх елементів:

For Each <елемент> In <структура даних> <команди, зокрема, lf>

Next <елемент>

Задача 3. У тривимірному масиві А(3, 3, 3) обчислити суму до­датних елементів.

Розв’язування. Тривимірний масив А (як куб чисел) можна за­повнити за допомогою трьох вкладених циклів із застосуванням формули чи генератора випадкових чисел так:

For і = 1 То n

For j = 1 То n

For k = 1 То n

А(і, j, k) = ...

Next k

Next j

Next і

Тоді код розв’язування задачі буде такий:

Dim n As Single, А(3, 3, 3) As Single, s As Single

<заповнити масив А як куб чисел>

s = 0

For Each n In А

If n > 0 Then s = s + n

Next n

<вивести s>

Зверніть увагу, цикл «для кожного» замінив три вкладені цик­ли «для».

Завдання 1. Реалізуйте код розв’язування задачі 3.

Завдання 2. Застосуйте команду For Each для обчислення серед­нього арифметичного додатних чисел у деякому двовимірному маси­ві В(10, 10).

Вправи

  1. Розв’яжіть задачу 2 для матриць розміру 3 на 3.

  2. Розв’яжіть задачу № 14 свого варіанта з розділу «Задачі».