Масиви в C#. Частина 1. Одновимірні масиви. Приклади розв’язку задач з одновимірними масивами

Масиви в C#. Частина 1. Одновимірні масиви. Приклади розв’язку задач з одновимірними масивами


Зміст



1. Що називається масивом?

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

 

2. Які види масивів можуть бути представлені в C#?

Мова програмування C# дозволяє представляти такі види масивів:

  • одновимірні масиви;
  • багатовимірні масиви.

В багатовимірних масивах розрізняються двовимірні та багатовимірні прямокутні масиви.
Крім того, мова програмування C# має засоби для організації роботи з так званими ступінчатими (ступінчастими) масивами.

 

3. Які переваги використання масивів у програмах?

Використання масивів у програмах має такі основні переваги:

  • зручність та простота організації однотипних наборів даних;
  • зручність обробки даних (сортування, пошук, проведення обчислень) з допомогою операторів циклу мови C#.

 

4. Яким чином в мові C# організоване представлення масивів?

У мові C# масиви організовані у вигляді об’єктів. Це означає, що для масиву обов’язково має бути виділена пам’ять з допомогою оператора new.

 

5. Яка загальна форма оголошення одновимірного масиву?

Загальна форма оголошення одновимірного масиву наступна

тип ім’я_масиву = new тип[розмір];

де

  • тип – тип елементів масиву;
  • ім’я_масиву – безпосередньо ім’я масиву, що оголошується;
  • розмір – кількість елементів масиву. Нумерація елементів масиву починається з нуля.

 

6. Приклади оголошення одновимірних масивів різних типів та розмірностей

Приклад 1. Оголошення одновимірного масиву зі 100 цілих чисел (тип int).

// приклад оголошення масиву зі 100 цілих чисел - спосіб 1
int[] A; // оголосити змінну типу "масив цілих чисел"
A = new int[100]; // виділити пам'ять для змінної A

Приклад 2. Оголошення одновимірного масиву з 50 дійсних чисел (тип double).

// оголошення масиву з 50 дійсних чисел - спосіб 2
float[] B = new float[50];

 

7. Яким чином здійснюється доступ до елементів одновимірного масиву? Приклад

Доступ до елементів одновимірного масиву здійснюється з допомогою індексу. Індекс визначає положення елементу в масиві. Першим індексом масиву є індекс, що має значення 0. Щоб отримати доступ до елементу масиву з допомогою індексу, потрібно взяти індекс елементу у квадратні дужки.

Приклад 1. Доступ до елементів масиву цілих чисел (тип long).

// оголошення масиву цілих чисел, які мають тип long
long[] M = new long[20]; // у масиві 20 елементів

// записати в елементи масиву довільні значення
M[2] = 23990; // в елемент з індексом 2 записати число 23990
M[0] = 10000; // в елемент з індексом 0 записати число 10000

M[19] = -2039;

// Помилка!
// M[20] = 1000; // помилка! Індекс виходить за межі діапазону

Приклад 2. Оголошення та заповнення довільними значеннями масиву з 10 дійсних чисел типу float.

// оголошення масиву з 10 дійсних чисел
float[] B = new float[10];

// заповнення довільними значеннями
int i;
for (i = 0; i < 10; i++)
    B[i] = i + 2 * i; // B[i] - елемент в позиції i масиву B

// виведення елементів масиву в елемент управління типу ListBox
listBox1.Items.Clear();
for (i = 0; i < 10; i++)
    listBox1.Items.Add(B[i].ToString());

 

8. Приклад занулення одновимірного масиву зі 100 дійсних чисел
// Занулення одновимірного масиву зі 100 дійсних чисел
// оголосити масив
double[] D = new double[100];

// занулити масив
for (int i = 0; i < D.Length; i++) // D.Length - кількість елементів у масиві
D[i] = 0;

 

9. Приклад пошуку заданого елементу в одновимірному масиві
// пошук заданого елементу в одновимірному масиві
int[] A = new int[10];
bool f_is; // результат: якщо f_is=true, то елемент є в масиві

// заповнення масиву довільними значеннями
for (int i = 0; i < 10; i++)
    A[i] = i + i * i;

int num; // num - шуканий елемент
num = 42;

// пошук
f_is = false;
for (int i = 0; i < 10; i++)
    if (num == A[i])
        f_is = true;

 

10. Приклад підрахунку кількості входжень заданого елементу в одновимірному масиві цілих чисел

У прикладі здійснюється підрахунок кількості входжень заданого значення (змінна n) у масиві M. Результат записується в змінній k.

// підрахунок кількості входжень заданого елементу в одновимірному масиві
int[] M;
M = new int[20];

// заповнення масиву довільними значеннями
for (int i = 0; i < 20; i++)
    M[i] = i * 2 - i * i;

int n; // заданий елемент
int k; // результат - кількість входжень
n = 0;

k = 0;
for (int i = 0; i < 20; i++)
    if (n == M[i])
        k++;

// k = 2

 

11. Приклад сортування елементів одновимірного масиву методом “бульбашки”
// сортування методом "бульбашки" за зростанням
// оголошення масиву з 10 дійсних чисел
float[] A = new float[10];

// заповнення елементів масиву довільними значеннями
// ...

// сортування
for (int i=0; i<9; i++)
    for (int j=i; j>=0; j--)
        if (A[j] > A[j + 1])
        {
            float t = A[j];
            A[j] = A[j + 1];
            A[j + 1] = t;
        }

 

12. Яка загальна форма ініціалізації одновимірного масиву?

У мові C# масив може бути ініціалізований значеннями при його створенні (оголошенні). Загальна форма ініціалізації масиву:

тип[] ім’я_масиву = { значення1, значення2, ..., значенняN };

де

  • тип – тип елементів масиву;
  • ім’я_масиву – безпосередньо ім’я масиву;
  • значення1, значення2, значенняN – значення, якими ініціалізуються елементи масиву в порядку індексування. Значення1 буде присвоєне комірці масиву з індексом 0. Значення2 буде присвоєне комірці масиву з індексом 1 і т.д. ЗначенняN буде присвоєне комірці масиву з індексом N-1.

У випадку ініціалізації масиву відпадає необхідність використовувати оператор new. Система автоматично виділить необхідний об’єм пам’яті для масиву.

 

13. Приклад ініціалізації одновимірних масивів при їх оголошенні
// ініціалізація масиву з 6 елементів типу uint
uint[] UI = { 5, 2, 100, 50, 35, 64 };

// ініціалізація масиву з 5 елементів типу bool
bool[] B = { true, false, false, false, true };

// ініціалізація масиву з 10 елементів типу float
float[] F = { 0.2f, 1.03f, -3.2f, -4.3f, 2.88f, 0.001f, 1.1f, 2.34f, 0.2f, 0f };

// ініціалізація масиву з 5 елементів типу char
char[] C = { '0', 'A', ';', '\\', 'z' };

 

14. Приклад оголошення та використання одновимірного масиву структур

Додаткову інформацію про роботу з масивами структур можна отримати в темі:

Нехай задано тип структури BOOK, що описує інформацію про книгу

// структура, що описує книгу
struct BOOK
{
    public string title; // назва книги
    public string author; // назва автора книги
    public int year; // рік видання
    public float price; // ціна
}

Тоді код, що оголошує масив структур типу BOOK буде мати приблизно такий вигляд

// оголошення та використання одновимірного масиву структур
BOOK[] B; // оголошення змінної типу "масив структур BOOK
B = new BOOK[5]; // виділення пам'яті для 5 структур типу BOOK

// заповнення значеннями масиву B
B[0].title = "Beginning. Microsoft. Visual C# 2008.";
B[0].author = "Karli Watson, Christian Nagel, Jacob Hammer Pedersen, Jon D.Reid";
B[0].year = 2008;
B[0].price = 9.99f;

B[1].title = "Pro C# 2010 and the .Net Planform. Fifth edition";
B[1].author = "Andrew Troelsen";
B[1].year = 2010;
B[1].price = 9.99f;

 

15. Що відбувається, якщо у програмі не дотримуватись меж масиву?

Мова програмування C# строго дотримується допустимих меж масиву, які задаються при його оголошенні. Якщо при доступі до елементів масиву, значення індексу виходить за межі масиву, то виникає виключна ситуація типу IndexOutOfRangeException. У цьому випадку програма передчасно завершиться.

 

16. Приклад оголошення та використання одновимірного масиву класів

Нехай в окремому модулі задається опис класу MyPoint, що описує точку на координатній площині

// клас, що описує точку на координатній площині
class MyPoint
{
    // координати точки
    int x;
    int y;

    // властивості
    public int X
    {
        get { return x; }
        set { x = value; }
    }

    public int Y
    {
        get { return y; }
        set { y = value; }
    }
}

Тоді, оголошення та використання масиву з 5 об’єктів типу MyPoint буде мати приблизно такий вигляд

// оголошення масиву з 5 об'єктів типу клас "MyPoint"
// виділення пам'яті для масиву
MyPoint[] MP = new MyPoint[5];

// виділення пам'яті для кожного об'єкту - обов'язково!
for (int i = 0; i < 5; i++)
    MP[i] = new MyPoint();

// використання масиву об'єктів у програмі
// заповнення масиву довільними значеннями
for (int i = 0; i < 5; i++)
{
    MP[i].X = i * 3;
    MP[i].Y = i * i - 2;
}

 


Зв’язані теми