- •§ 1. Поняття про інформаційне моделювання
- •Опорний конспект
- •§ 2. Етапи розв’язання задач на комп’ютері
- •§ 3. Середовища розробки проектів
- •§ 4. Властивості елементів керування
- •§ 1. Поняття про інформаційне моделювання 2
- •Контрольна робота № 1
- •§ 5. Створення проектів
- •§ 6. Основні поняття мови програмування
- •9. Процедура кнопки «Обчислити» для задачі про калькулятор.
- •§ 7. Алгоритм та його властивості
- •Запитання
- •§ 8. Різновиди алгоритмів
- •Запитання
- •§ 9. Типи даних
- •§ 10. Лінійні програми
- •Запитання та вправи
- •Контрольна робота № 2
- •§11. Введення даних і виведення результатів
- •§ 12. Текстові файли даних
- •§ 13. Програми з розгалуженням
- •§ 1. Поняття про інформаційне моделювання 2
- •Запитання
- •§ 14. Елементи керування прапорці і перемикачі
- •§ 15. Алгоритмічна конструкція вибір
- •Контрольна робота № 3
- •§ 16*. Списки
- •§ 17. Підпрограми. Функції користувача
- •§ 18. Підпрограми. Процедури користувача
- •§ 19. Цикли. Цикл з параметром
- •§ 20. Задачі пошуку даних. Цикл «доки»
- •§ 21. Застосування циклів
- •Контрольна робота № 4
- •Розділ 2. Складені структури даних
- •§ 22. Одновимірні масиви. Створення масивів
- •§ 23. Пошук даних в одновимірному масиві
- •1. Пошук даних у масиві за заданим критерієм.
- •5. Проект «На метеостанції». Застосування масивів і процедур користувача у vb.
- •§ 24. Впорядкування одновимірного масиву
- •§ 1. Поняття про інформаційне моделювання 2
- •4. Моделювання предметних областей за допомогою масивів.
- •§ 25. Двовимірні масиви. Створення масивів
- •§ 26*. Опрацювання двовимірних масивів
- •1. Елементи керування DataGridView (vb) та DataGrid (vba).
- •Контрольна робота № 5
- •§ 27. Опрацювання текстових даних
- •§ 28. Структури даних (записи)
- •§ 1. Поняття про інформаційне моделювання 2
- •§ 29. Файли даних прямого доступу
- •5. Vb. Команди для роботи з файлами даних прямого доступу.
- •§ 30. Застосування файлів даних послідовного доступу
- •§ 31. Графіка у vb
- •§ 32. Поняття про об’єктно-орієнтоване програмування
- •Розділ 3. Задачі
- •Складніші задачі*
- •Розділ 4. Vba у програмах пакету ms office
- •§ 33. Застосування vba у ms word
- •§ 34. Vba у програмі ms excell
- •§ 35. Задача про облік товарів на складі
- •§ 36. Розв’язування математичних задач
- •§ 37. Робота 3 базами даних
- •Список літератури
- •§ 1. Поняття про інформаційне моделювання 2
§ 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 |
Дайте відповіді на запитання:
У якому місті та коли було продано найбільше автомобілів?
Де було продано найбільше автомобілів за п’ять місяців?
Скільки всього автомобілів було продано в Києві?
Скільки всього автомобілів було продано у березні?
У якому місяці було продано найбільше автомобілів у всіх містах? Відповіді на перше запитання (197) і на друге (в Києві) — очевидні, а ось на інші відповісти без допомоги комп’ютера складно.
Для зберігання та аналізу подібних даних застосовують двовимірні масиви. У двовимірний масив можна занести різні дані, а саме:
оцінки учнів чи студентів за певний період навчання (без назв предметів і прізвищ осіб);
числові показники роботи підприємств чи організацій за декілька періодів (днів, місяців, років) роботи;
результати учасників у змаганнях, шоу, конкурсах;
результати голосування на виборах за різні партії чи різних кандидатів на декількох дільницях;
доходи декількох філіалів компанії за декілька періодів тощо. Розглянемо прямокутну таблицю В розміром т на п. Елементи цієї таблиці в математиці позначають так:
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 двовимірний масив можна вивести у вікно Immediate, у текстовий файл, або у клітинки таблиці безпосередньо у документі програми 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. Модифікуйте проект, щоб вивести у два текстові поля суму елементів масивів А та В.
Вправи
У масив А занесено набір чисел (з нумерацією елементів від одиниці):
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.
Запишіть команду оголошення двох масивів цілих чисел з чотирма рядками і трьома стовпцями.
Запишіть команду присвоєння, якою елементові масиву, що є на перетині 3-го рядка і 2-го стовпця, можна надати значення 7.
Запишіть команди для збільшення значень усіх елементів двовимірного масиву (нехай А) на одиницю.
Запишіть код створення і виведення на екран двовимірного масиву 5 на 5, елементи якого дорівнюють добутку індексів.
Виведіть таблицю Піфагора: а) на екран; б) у текстовий файл.
Створіть двовимірний масив D за формулою dij = sin(i + j); і = 1, 2, ..., 5; j = 1, 2, ..., 5. Виконайте завдання:
а) виведіть масив у вигляді таблиці у вікно інтерпретації і у текстовий файл у форматі з одною цифрою після крапки;
б) обчисліть суму додатних елементів;
в) обчисліть добуток елементів, більших від 0,7;
г) визначіть максимальний елемент і його індекси;
д) від’ємні елементи замініть нулями і визначіть кількість додатних;
е) поміняйте місцями перший та останній стовпці;
є) обчисліть суму елементів під головною діагоналлю (підказка: і < j);
ж)* обчисліть середньоарифметичні значення елементів кожного рядка і занесіть їх в одновимірний масив F;
з)* максимальний елемент поміняйте місцями з мінімальним.
Дайте відповіді на запитання 3-5 з п. 1 цього параграфа (с. 162) про продажі автомобілів в Україні.
Розв’яжіть задачу № 13 свого варіанта з розділу «Задачі».
