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

§ 25. Двовимірні масиви. Створення масивів

Опрацювавши цей параграф, ви навчитеся розв’язувати задачі, в яких використовуються табличні дані. Такі задачі зручно роз­в’язувати за допомогою двовимірних масивів.

1. Основні поняття про двовимірні масиви. Розгляньте таблицю, яка відображає продажі автомобілів деякою компанією за п’ять місяців у шістьох містах України.

Січень

Лютий

Березень

Квітень

Травень

Київ

82

91

164

197

118

Харків

74

79

81

89

112

Львів

65

78

89

87

97

Одеса

91

68

81

68

89

Рівне

48

51

69

71

82

Ужгород

36

46

53

67

83

Дайте відповіді на запитання:

  1. У якому місті та коли було продано найбільше автомобілів?

  2. Де було продано найбільше автомобілів за п’ять місяців?

  3. Скільки всього автомобілів було продано в Києві?

  4. Скільки всього автомобілів було продано у березні?

  5. У якому місяці було продано найбільше автомобілів у всіх містах? Відповіді на перше запитання (197) і на друге (в Києві) — оче­видні, а ось на інші відповісти без допомоги комп’ютера складно.

Для зберігання та аналізу подібних даних застосовують двовимір­ні масиви. У двовимірний масив можна занести різні дані, а саме:

  1. оцінки учнів чи студентів за певний період навчання (без назв предметів і прізвищ осіб);

  2. числові показники роботи підприємств чи організацій за де­кілька періодів (днів, місяців, років) роботи;

  3. результати учасників у змаганнях, шоу, конкурсах;

  4. результати голосування на виборах за різні партії чи різних кандидатів на декількох дільницях;

  5. доходи декількох філіалів компанії за декілька періодів тощо. Розглянемо прямокутну таблицю В розміром т на п. Елементи цієї таблиці в математиці позначають так:

b11

b12

…

b1n

b21

b22

…

b2n

…

bm1

bm2

…

bmn

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

В(1, 1) В(1, 2) ... В(1, n)

В(2, 1) В(2, 2) ... В(2, n)

…

В(m, 1) В(m, 2) ... В(m, n).

Елементи двовимірних масивів мають два індекси (номери). Пер­ший індекс — це номер рядка, а другий — номер стовпця, на пере­тині яких розміщений елемент. Індекси записують у круглих дуж­ках і відокремлюють комою.

Наприклад, В(1,1) — елемент, розташований на перетині 1-го рядка та 1-го стовпця; В(5,10) — елемент на перетині 5-го рядка і 10-го стовпця; В(к, р) — елемент на перетині k-го рядка і p-го стовпця.

Зауваження. В оперативній пам’яті всі елементи двовимірного масиву автоматично заносяться у послідовні ділянки за принципом «рядок за рядком». Табличне подання двовимірного масиву викори­стовують для відображення даних у вигляді, зручному для аналізу.

2. Оголошення двовимірних масивів. Двовимірні масиви оголо­шують командою Dim, де зазначають назву масиву, а у круглих дужках — максимальне значення кожного з двох індексів (або діа­пазон їх зміни у VBA), а також тип елементів масиву. Наприклад,

Dim Sport(4, 4) As Integer

Тут масив Sport оголошують для зберігання результатів змагань, де виступи п’ятьох учасників оцінюють п’ять суддів:

Sport

Суддя 1

Суддя 2

Суддя 3

Суддя 4

Суддя 5

Учасник 1

8

9

8

7

6

Учасник 2

7

7

8

8

7

Учасник 3

6

7

7

8

7

Учасник 4

9

9

8

9

9

Учасник 5

9

10

9

9

9

Нагадаємо, що за замовчуванням нумерація елементів у масиві — від нуля. Врахуємо це. Дані учасника 1 будуть у нульовому ряд­ку масиву, а оцінки першого судді — в нульовому стовпці. Зауваження 1. Оголошений у VBA масив Avto:

Dim Avto(1 То 6,1 То 5) As Integer

міститиме цілочислові дані й складатиметься з 6 рядків і 5 стовпців з нумерацією від одиниці.

3. Створення двовимірних масивів. Двовимірні масиви створю­ють і опрацьовують за допомогою алгоритмічної конструкції «вкла­дені цикли»:

For і = <вираз1> То <вираз2>

For j = <вираз3> То <вираз4>

<серія команд>

Next j

Next і

Задача 1. Створити таблицю Піфагора (таблицю множення двох чисел) як прямокутну таблицю з 10 рядками і 10 стовпцями, де кожний елемент таблиці дорівнює добутку своїх індексів.

Математична модель задачі. Домовимося, що нумерацію еле­ментів починатимемо від одиниці. Елементи таблиці (і відповідного двовимірного масиву D) задамо формулою

dij = і* j, де і = 1, 2,…, 10, j = 1, 2,..., 10.

Код розв’язування задачі 1 матиме такий вигляд:

Dim і, j, D(10, 10)

For i = 1 To 10

<вивести>

For j = 1 To 10

D(i,j)= i*j

<вивести D(i, j)>

Next j

Next і

Нульовий рядок і стовпець у масиві D не розглядаємо. Перша команда <вивести> має забезпечити перехід до наступного рядка таблиці. Її можна записати також між двома командами Next.

Завдання 1. Виконайте програму у консольному режимі.

4. Задача про змагання. Пошук даних у двовимірному масиві. Да­ні у двовимірному масиві шукають так: у середині конструкції «вкла­дені цикли» використовують команду розгалуження для виявлення потрібних даних.

Задача 2. П’ять суддів судять змагання п’яти учасників. Усім учасникам виставлено оцінки за десятибальною шкалою. Скільки найвищих оцінок «10» було зафіксовано?

Розв’язування. Задача 2 зводиться до перегляду й аналізу всіх елементів масиву Sport. Його спочатку потрібно створити. У VB є зручний спосіб створення двовимірного масиву під час оголошення масиву. Наприклад, числові дані з таблиці Sport можна занести у масив Sport(4, 4) так (нумерація елементів масиву — від нуля; ну­льовий рядок і нульовий стовпець враховуємо):

'Це розв’язок задачі 2 у VB

Dim Sport(4, 4) As Integer = {{8, 9, 8, 7, 7}, (7, 7, 8, 8, 7}, _

{6, 7, 7, 8, 7}, (9, 9, 8, 9, 9}, (9, 10, 9, 9, 9}} 'VB

Dim i, j, k k = 0

For і = 0 To 4

For j = 0 To 4

If Sport(i, j) = 10 Then k = k + 1

Next і

Next j

<вивести k>

Зауваження. У VBA описаного способу створення масиву немає. Дані вводять з клавіатури або з файлу даних (див. далі п. 5). Дані можна змоделювати за допомогою формули чи генератора випадко­вих чисел.

Завдання 1. Створіть масив оцінок одним з можливих спосо­бів: а) застосувавши генератор випадкових чисел від 0 до 10; б) застосувавши деяку формулу (наприклад, взявши цілу частину від 11|sin(i + j + 1)|); в*) ввівши оцінки з файлу даних.

Завдання 2. Яку кількість балів отримав кожний учасник? Ре­зультати занесіть в одновимірний масив С(4).

Завдання 3. Які учасники набрали понад 40 балів?

Завдання 4. Хто переміг у шоу?

Завдання 5*. Хто із суддів (який номер судді) був найстрогішим (виставив найменшу кількість балів) до всіх учасників?

5 . Виведення даних з двовимірних масивів на екран. Відобрази­ти дані з двовимірного масиву на формі у текстовому полі чи у спи­ску — непросте завдання. Тому у VB для цього застосовують або спеціальний візуальний елемент керування DataGridView (його роз­глянемо в наступному параграфі), або виводять масив у вікно інтер­претації чи у текстовий файл, який можна переглянути програмою

Блокнот.

У VBA двовимірний масив можна вивести у вікно Imme­diate, у текстовий файл, або у клітинки таблиці безпосередньо у документі програми MS Word (цей ефективний спосіб розгля­немо у четвертому розділі).

Задача 3. Створити двовимір­ний масив 4 на 4, елементи яко­го дорівнюють сумі індексів, і вивести його у вікно Immediate (VBA) чи у вікно Debug (VB).

Розгляньте і вивчіть VBA- код на рисунку поряд. Перша команда Debug.Print виводить ря­док з даними, а друга — нічого не виводить, а забезпечує пере­хід до нового рядка. Для VB код такий:

Dim а(4, 4), і, j

For і = 1 То 4

For j = 1 То 4

a(i, j) = i+j

Debug.Write(a(i, j) & " ")

Next j

Debug.WriteLine(“”)

Next і

6*. VBA. Застосування текстових файлів для зберігання даних з двовимірних масивів. Розглянемо введення даних з текстових фай­лів у двовимірні масиви і виведення даних з масивів у текстові файли.

Задача 4. Набір чисел у вигляді таблиці, що є у файлі з номе­ром 1, ввести у двовимірний числовий масив А розміру 3 на 3, ство­рити новий масив В = 2 * А (це означає, що всі елементи масиву А треба помножити на 2) і зберегти масив В у файлі з номером 2.

Розв’язування. Створимо у Блокноті такий, наприклад, набір даних:

1, 2, 3

4, 5, 6

7, 8, 9

Збережемо дані у файлі з назвою myfilel.txt на диску d:.

Складемо код згідно з умовою задачі:

Dim А(3, 3), В(3, 3) 'VBA

Dim і, j, n, z1, z2

z1 = "d:\myfile1.txt"

z2 = "d:\ myfile2.txt"

Open z1 For Input As #1

Open z2 For Output As #2

n = 3

For і = 1 To n 'Вводимо дані з файлу 1 у масив А

For j = 1 То n

Input #1, А(і, j)

Next j

Next і

For і = 1 To n 'Створюємо масив В

For j =1 To n

B(i, j) = 2 * A(i, j)

Next j

Next і

For і = 1 To n 'Виводимо масив В у файл 2

For j =1 То n

Print #2, B(i, j);'VBA

Next j

Print #2

Next і

Пояснення до коду. Команда Input зчитує дані з файлу 1 в масив А. У рядку дані мають бути розмежовані комами. Якщо дані в ряд­ку закінчаться, то команда автоматично зчитуватиме дані з наступ­ного рядка. Створюємо масив В.

Команда Print виводить числові дані з масиву В у рядок другого файлу через пропуск. Тому, якщо між даними потрібна кома, то її вставляють так: Print #2, В(і, j); Якщо команда Print закінчується символами «;» чи «,», то наступна команда Print виводитиме дані в тому ж рядку, інакше відбудеться перехід до нового рядка. У нашо­му випадку команда Print #2, B(i, j); дає змогу вивести в одному рядку n = 3 чисел через кому. Остання команда Print #2 нічого не ви­водить, але забезпечує перехід до нового рядка.

Зауваження. У VB зміни стосуватимуться лише команд для ро­боти з текстовими файлами (див. § 12 і 30).

Завдання 1. Виконайте програму і переконайтеся, що у файлі d:\myfile2.txt отримаємо такий набір даних:

2, 4, 6,

8, 10, 12,

14, 16, 18,

Завдання 2. Результат має один недолік: коми, що є останніми в рядках, не дадуть змоги зчитати рядки з цього файлу в деякий масив, якщо виникне потреба опрацювання цих даних. Щоб усуну­ти цей недолік, у код виведення даних внесемо такі зміни:

For і = 1 То n

For j = 1 То n – 1

Print #2, В(і, j); “,”;

Next j

Print #2, B(i, n)

Next і

Виконаємо модифіковану програму, відкриємо файл-результат у Блокноті й побачимо, що дані тепер будуть розташовані так:

2, 4, 6

8, 10, 12

14, 16, 18

Завдання 3*. Реалізуйте візуальний проект для задачі 4. Виве­діть масив В у багаторядкове текстове поле.

Завдання 4. Модифікуйте проект, щоб вивести у два текстові поля суму елементів масивів А та В.

Вправи

  1. У масив А занесено набір чисел (з нумерацією елементів від одиниці):

2, 5, 6

1, 4, 8

3, 0, 9

Обчисліть значення s (усно):

a) s = А(1, 1) + А(1, 2) + А(1, 3);

б) s = А(1, 1) + А(2, 1) + А(3, 1);

в) s = 0: for i=1 to 3 : s=s+А(2, i) : Next i.

г) s = 0: for i=1 to 3 : s=s+А(i, i) : Next i.

д) s = 0

For і = 1 То 3

For j = 1 To 3

s = s + A(i, j)

Next j

Next i.

  1. Запишіть команду оголошення двох масивів цілих чисел з чотирма рядками і трьома стовпцями.

  2. Запишіть команду присвоєння, якою елементові масиву, що є на пе­ретині 3-го рядка і 2-го стовпця, можна надати значення 7.

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

  4. Запишіть код створення і виведення на екран двовимірного масиву 5 на 5, елементи якого дорівнюють добутку індексів.

  5. Виведіть таблицю Піфагора: а) на екран; б) у текстовий файл.

  6. Створіть двовимірний масив D за формулою dij = sin(i + j); і = 1, 2, ..., 5; j = 1, 2, ..., 5. Виконайте завдання:

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

б) обчисліть суму додатних елементів;

в) обчисліть добуток елементів, більших від 0,7;

г) визначіть максимальний елемент і його індекси;

д) від’ємні елементи замініть нулями і визначіть кількість додатних;

е) поміняйте місцями перший та останній стовпці;

є) обчисліть суму елементів під головною діагоналлю (підказка: і < j);

ж)* обчисліть середньоарифметичні значення елементів кожного ряд­ка і занесіть їх в одновимірний масив F;

з)* максимальний елемент поміняйте місцями з мінімальним.

  1. Дайте відповіді на запитання 3-5 з п. 1 цього параграфа (с. 162) про продажі автомобілів в Україні.

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