Мета роботи: Вивчити основи роботи з одновимірними масивами, навчитись оголошувати й ініціалізовувати масиви. Оволодіти навичками запису та зчитування даних з масивів.
Прості змінні, що використовувались у попередніх лабораторних роботах, призначені для зберігання одного значення, та їх можливостей недостатньо. Наприклад, для збереження десяти значень чисел потрібно використовувати десять змінних. Проте це викликає певні незручності при організації обчислень. Мова C# пропонує два типи змінних, що можуть зберігати кілька об’єктів одночасно: масиви (array) та клас колекції (collection class). Масив – це колекція елементів одного й того ж типу, доступ до елементів якої можна отримати, використовуючи числовий індекс.Основні властивості:· Усі дані, що зберігаються в масиві, мають однаковий тип.· Індекси масивів починаються з 0.· Число індексів характеризує розмір масиву.Залежно від кількості заданих вимірів масиви поділяються на:· одновимірні;· багатовимірні;· ступеневі (масиви масивів);Одновимірний масив можна схематично зобразити наступним так: Індекс | Значення |
0 | A |
1 | B |
2 | C |
… | … |
N | Z |
Оголосити масив можна декількома способами: тип ім’я_масива [розмірність];
Наприклад:
int masuv1 [10];
Проте оголошення масиву недостатнє для його використання. Він має бути створений і заповнений значеннями, тобто ініціалізований. Найчастіше при оголошенні масиву використовується ім’я з ініціалізацією. Як у випадку простих змінних, можуть бути два варіанти ініціалізації. У першому випадку ініціалізація є явною і задається константним масивом, наприклад:
double[] x= {5.5, 6.6, 7.7};
Відповідно до синтаксису, елементи константного масиву потрібно брати у фігурні дужки. У другому випадку створення й ініціалізація масиву виконується в об'єктному стилі з викликом конструктора масиву. Це найбільш поширена практика оголошення масивів. Наприклад:
int[] d= new int[5];
Якщо ініціалізація виконується конструктором, то в динамічній пам’яті створюється сам масив, елементи якого ініціалізувалися константами відповідного типу, а посилання зв'язується з цим масивом. Якщо масив ініціалізувався константним масивом, то в пам’яті створюється константний масив, з яким і зв’язується посилання.
Багатовимірний масив – це масив, елементи якого є також масивами. Розглянемо двовимірний масив. Двовимірний масив складається з N рядків і M стовпців. Жодної принципової різниці між одновимірними та багатовимірними масивами немає. Одновимірні масиви - це окремий випадок багатовимірних. Одновимірні масиви дозволяють задавати такі математичні структури як вектори, двовимірні матриці, тривимірні куби даних, масиви більшої розмірності - багатовимірні куби даних. Оголошення багатовимірного масиву в загальному випадку виглядає наступним так:
int[,] array;
Приклад ініціалізації:
int[,] matrix = {1,2},{3,4};
Ще одним видом масивів у C# є масиви масивів (jagged arrays). Такий масив масивів можна розглядати як одновимірний масив, елементи якого є масивами, елементи яких, у свою чергу, знову можуть бути масивами, і так може тривати до деякого рівня вкладеності. Ці масиви можуть застосовуватися для представлення дерев, в яких вузли можуть мати довільне число нащадків. Таким може бути, наприклад, генеалогічне дерево. Вершини першого рівня – Fathers, що представляють батьків, можуть задаватися одновимірним масивом, так що Fathers[i] – це i-й батько. Вершини другого рівня представляються масивом масивів Children так, що Children[i] – це масив дітей i-го батька, а Children[i][j] – це j-е дитя i-го батька. Для представлення внуків знадобиться третій рівень. GrandChildren [i][j][k] який представлятиме k-го внука j-го дитяти i-го батька. Є деякі особливості в оголошенні й ініціалізації таких масивів. Якщо при оголошенні багатовимірних масивів для зазначення розмірності використовувалися коми, то для ступеневих масивів застосовується ясніша символіка – сукупності пар квадратних дужок. Наприклад, int[][] задає масив, елементи якого - одновимірні масиви елементів типу int.
Складніше зі створенням самих масивів і їх ініціалізацією. Тут не можна викликати конструктор new int[3][5], оскільки він не задає ступеневий масив. Фактично потрібно викликати конструктор для кожного масиву на нижньому рівні. У цьому і полягає складність оголошення таких масивів. Наприклад:
int[][] jagmas = new int[3][]
{
new int[] {5,7,9,11},
new int[] {2,8},
new int[] {6,12,4}
};
Масив jagmas має всього два рівні. Можна вважати, що у нього три елементи, кожен з яких є масивом. Для кожного такого масиву необхідно викликати конструктор new, щоб створити внутрішній масив. У даному прикладі елементи внутрішніх масивів набувають значення, будучи явно ініціалізовані константними масивами. Звичайно, допустиме і таке оголошення:
int[][] jagger1 = new int[3][]
{
new int[4],
new int[2],
new int[3]
};
Для звернення до елемента масиву необхідно знати його індекс, тобто його порядковий номер у масиві. Наприклад: double[] x= {5.5, 6.6, 7.7};
double i = x[0];
double j = x[1];
Зауважимо, що при використанні неправильного значення індексу, якому не відповідає жоден елемент, викликається виняткова подія типу IndexOutOfRangeException.
Розширює можливості роботи з масивами у C# клас Array. Він надає методи для створення, зміни, пошуку й сортування масивів, тобто виступає в ролі базового класу для всіх масивів.
Розглянемо його основні методи та властивості (табл. 4.1, 4.2)
Таблиця 4.1. Методи
|
|
Array.Clear
| задає діапазон елементів масиву Array рівним нулю, false або null, залежно від типу елементу
|
Array.Copy
| копіює діапазон елементів з одного масиву Array в інший масив Array і, при необхідності, виконує приведення типів і упаковку-перетворення
|
Array.CopyTo
| копіює всі елементи поточного одновимірного масиву Array в заданий одновимірний масив Array
|
Array.Equals
| визначає, чи дорівнює заданий об'єкт Object поточному об'єкту Object (успадковано від Object)
|
Array.FindIndex
| виконує пошук елементу вказаного предиката, що задовольняє умови, і повертає відлічуваний з нуля індекс першого знайденого входження в межах масиву Array або його частини
|
Array.FindLastIndex
| виконує пошук елементу, вказаного предиката, що задовольняє умови, і повертає відлічуваний від нуля індекс останнього знайденого входження в межах усього масиву Array або його частини
|
Array.GetLength
| повертає 32-розрядне ціле число, що представляє кількість елементів у заданому вимірі масиву Array
|
Array.GetValue
| повертає значення заданого елементу в поточному масиві Array
|
Array.IndexOf
| повертає індекс першого екземпляра значення в одновимірному масиві Array або в частині масиву Array
|
Array.Reverse
| змінює порядок елементів в одновимірному масиві Array або в частині масиву Array на зворотний
|
Array.Sort
| Сортує елементи в одновимірних об'єктах Array
|
Таблиця 4.2. Властивості
Назва
| Призначення
|
Array.IsFixedSize
| повертає значення, що дозволяє визначити, чи має колекція Array фіксований розмір
|
Array.IsReadOnly
| повертає значення, що дозволяє визначити, чи доступна колекція Array лише для читання
|
Array.Length
| повертає 32-розрядне ціле число, що представляє загальне число елементів у всіх вимірах об'єкта Array
|
Array.Rank
| повертає ранг (розмірність) об'єкта Array
|
Наприклад, щоб відсортувати масив, можна використати метод Sort: int[] mas = {11, -23, 1, -3, 21 , 10, 10, 5, 100};
Array.Sort(mas);
Використання масивів.Масиви можна використовувати різними способами. Наприклад, масив можна передати як аргумент або параметр для методу: static void WriteArr (int[] numbers);
Копіювання масивів.Оскільки масиви – це типи посилання, присвоєння змінної масиву іншій змінній створює дві змінні, що посилаються на один і той самий об’єкт. Для копіювання масивів передбачений метод Clone(). Також можна використовувати метод Copy(). Компонент CheckedListBox відображає список елементів і дає можливість користувачу вибрати кілька елементів, установивши прапорці, що розміщені поряд з елементами. Обрати можна потрібну кількість елементів, проте тільки по одному за раз. Деякі найбільш використовувані властивості компоненту можна побачити в таблиці 4.3. Таблиця 4.3. Властивості класу CheckedListBox
|
|
BackColor
| Повертає або задає колір фону для елементу управління
|
BorderStyle
| Отримує або задає тип межі,що зображується навколо ListBox
|
CheckedIndices
| Колекція позначених індексів у даному елементі управління CheckedListBox
|
CheckedItems
| Колекція позначених елементів у даному елементі управління CheckedListBox
|
ColumnWidth
| Отримує або задає ширину стовпців у ListBox з декількома стовпцями
|
Font
| вертає або задає шрифт тексту, що відображається елементом управління
|
Height
| Повертає або задає висоту елемента управління
|
Items
| Отримує колекцію елементів, які знаходяться в даному елементі управління CheckedListBox
|
MultiColumn
| Отримує або задає значення, що визначає, чи підтримує елемент управління ListBox кілька стовпців
|
SelectedIndex
| Отримує або задає індекс виділеної зараз позиції в елементі управління ListBox (індекс починається з нуля)
|
SelectedIndices
| Отримує колекцію, яка містить індекси всіх виділених тепер позицій в елементі управління ListBox (індекси починаються з нуля)
|
SelectedItem
| Отримує або задає вибраний у даний момент елемент у полі зі списком ListBox
|
SelectedItems
| Отримує колекцію, яка містить виділені тепер позиції елемента керування ListBox
|
SelectionMode
| Отримує або задає значення, що вказує режим вибору
|
Width
| Повертає або задає ширину елемента управління
|
Нехай на формі розміщений деякий checkedListBox. Тоді для очищення всього списку елементів, що містить checkedListBox, використовується код:
checkedListBox1.Items.Clear();
Для додавання одного елементу до checkedListBox потрібно ввести такий код:
checkedListBox1.Items.Add(ЗНАЧЕННЯ);
Для заповнення списку елементів програмно можна використати такий код:
checkedListBox1.Items.AddRange(
new object[]
{
"Економічна кібернетика",
"Маркетинг",
"Менеджмент",
"Міжнародна економіка"
});
Щоб зробити елемент позначеним або непозначеним, можна використати метод:
checkedListBox1.SetItemChecked(ІНДЕКС, ЗНАЧЕННЯ);
де ІНДЕКС – порядковий номер елемента у списку checkedListBox, а ЗНАЧЕННЯ – відповідно або True, або False.
Для проходження по колекції позначених елементів можна використати такий код:
for(int x = 0; x <= checkedListBox1.CheckedItems.Count - 1 ; x++)
{
...
}
Для проходження по всій колекції елементів можна використати такий код:
for(int i = 0; i <= checkedListBox1.Items.Count - 1 ; i++)
{
...
}
Для звернення до елемента з порядковим номером ІНДЕКС використовують такий код:
checkedListBox1.Items[ІНДЕКС];
Для вилучення елемента з порядковим номером ІНДЕКС:
checkedListBox1.Items.RemoveAt[ІНДЕКС]
Компонент ComboBox схожий на CheckedListBox, але він дає можливість не тільки обирати елементи зі списку, але й надає місце для введення та вибору елемента зі списку. Крім того, елемент управління ComboBox можна налаштувати так, щоб він відображав список варіантів або представляв випадаючий список варіантів. Його зручно використовувати тоді, коли користувачу необхідно вибрати одне значення із запропонованого набору. Деякі найбільш використовувані властивості можна побачити в таблиці 4.4.
Таблиця 4.4. Властивості класу ComboBox
|
|
DataSource
| Повертає або задає джерело даних для цього об'єкта ComboBox.
|
DropDownHeight
| Повертає або задає висоту в пікселях частині поля зі списком, що розкривається.
|
DropDownStyle
| Повертає або задає значення, що вказує стиль поля зі списком.
|
DropDownWidth
| Повертає або задає ширину розкривається частині поля зі списком.
|
DroppedDown
| Повертає або задає значення, яке вказує, чи відображається в полі зі списком частина, що розкривається.
|
Font
| Повертає або задає шрифт тексту,що відображається елементом управління.
|
Items
| Отримує об'єкт, що представляє колекцію елементів, які містяться в даному полі зі списком ComboBox.
|
SelectedItem
| Повертає або задає виділений елемент у полі зі списком ComboBox.
|
SelectedText
| Повертає або задає текст, виділений у редагованій частині поля зі списком ComboBox.
|
SelectionLength
| Повертає або задає число знаків, виділених у редагованій частині поля зі списком.
|
SelectionStart
| Повертає або задає початковий індекс тексту, виділеного в полі зі списком.
|
Sorted
| Повертає або задає значення, яке вказує, чи сортуються елементи в полі зі списком.
|
Доступ до елементів ComboBox такий самий, як і в checkedListBox. Тому можна використовувати аналогічні методи.
Завдання для самостійної роботиСтворити форму для проведення різних дій з елементами масиву. Приклад зовнішнього вигляду зображено на рис. 4.1. Рис. 4.1. Зовнішній вигляд форми За допомогою компонента Button і TextBox реалізувати введення елементів у ListBox та їх запис у масив. Використовуючи компонент ComboBox додати можливість обирати дію, яку необхідно виконати. Набір дій додавати згідно з варіантом:1) Обчислити середнє арифметичне значення.2) Обчислити середнє гармонічне значення.3) Обчислити середнє квадратичне значення.4) Обчислити середнє геометричне значення.5) Обчислити середнє хронологічне значення.6) Обчислити моду.7) Обчислити медіану.8) Максимальне значення.9) Мінімальне значення.10) Середнє значення максимального та мінімального елементів.11) Вивести елемент з індексом і у квадраті.12) Сума елементів, з індексами i-1,i,i+1.13) Сума елементів з парними індексами.14) Сума елементів з непарними індексами.15) Добуток першого й останнього елементів масиву. № варіанта | 1 | 2 | 3 | 4 | 5 |
Показники | 1, 8, 13 | 2, 10, 12 | 3, 9, 11 | 4, 8, 10 | 5, 7, 12 |
№ варіанта | 6 | 7 | 8 | 9 | 10 |
Показники | 15, 5, 7 | 4, 6, 13 | 2, 8, 14 | 1, 9, 13 | 3, 6, 14 |