Лабораторне заняття № - № ____
ЗАСТОСУВАННЯ ІНДЕКСАТОРІВ ПРИ РОБОТІ З ОДНОВИМІРНИМИ ТА БАГАТОВИМІРНИМИ МАСИВАМИ
Мета заняття:
1. Отримання практичних навичок в роботі з одновимірними масивами і індексаторами.
2. Отримання практичних навичок в роботі з багатовимірними масивами і індексаторами
Питання для контроля
1.Що розуміється під одновимірним масивом?
2.Що розуміється під багатовимірним масивом?
3.Форма запису одновимірного і двовимірного масиву?
4.Звернення до елементів одновимірного і двовимірного масиву?
5.Як організовується в програмі введення одновимірного і двовимірного масиву?
6.Як організовується в програмі виведення одновимірного і двовимірного масиву?
7.Які операції дозволені над елементами масиву?
8. Що таке індексатор? Для чого він використовується?
9. Яке призначення get- аксесора і set- аксесора?
10. Як сформувати масив випадковим чином?
11. Назвіть виняток, який відбувається при некоректній індексації масиву?
Постановка завданнЯ
1. Виконати завдання по варіантам, що вказані викладачем (таблиці 1 та 2).
Зміст звіту
1.Постановка завдання.
2.Текст програми.
3. Результати роботи програми.
Порядок виконання роботи
1. Включити ПК.
2. Запустити Microsoft Visual Studio C#.
3. Виконати завдання (таблиця 1 та 2).
Примітки:
При складанні програми керуватися методичними вказівками та прикладом складання програми.
4. Ввести початкові дані. Результати занести в звіт.
5. Закінчити роботу з Microsoft Visual Studio C#.
Короткі теоретичні відомості
Оголошення, ініціалізація та використання одновимірних масивів
Масив – це сукупність послідовно розташованих комірок пам’яті, які можуть містити об’єкти однакового типу. В мові C# масиви є об’єктами класу
[Link], що дозволяє програмісту використовувати широкий спектр властивостей і методів для роботи з масивами. Для оголошення одновимірного масиву
в C# використовується наступний синтаксис:
тип даних[] Назва_масиву;
Приклади:
int[] b;
double[] a;
На відміну від С++, де масиви можуть створюватись як статично так і динамічно, у C# всі масиви є динамічними, тому, у наведених прикладах
ідентифікатори “b” та “a” фактично є посиланнями на майбутні масиви. Спроба використати таке посилання до його ініціалізації адресою масиву призводить до
помилки компіляції.
Масиви у C# створюються за допомогою оператора new, синтаксис якого для одновимірних масивів аналогічний синтаксису відповідного оператора
мови С++:
Назва_масиву = new тип_даних[кількість елементів];
Після створення масиву його елементи автоматично ініціалізуються нульовими значеннями, наприклад, 0, „\0‟, null залежно від типу елементів.
Ініціалізацію елементів масиву можна виконати безпосередньо в момент його створення.
При цьому вказувати кількість елементів не обов‟язково: компілятор визначить її за кількістю вказаних ініціалізаторів:
Назва_масиву = new тип даних[] {зн.1, зн.2, ..., зн.N};
При використанні ніціалізаторів в момент оголошення дозволяється взагалі не використовувати оператор new для створення масиву.
Приклади:
float[] s = {0.1f, 0.2f, 0.4f, 0.8f};
int[] myArray = new int[100];
char[] a = new char[3] {„і‟, „ї‟, „є‟};
double[] x; x = new double[] {0.1, 0.2, 0.3};
Для обробки масивів, як правило, використовуються цикли з лічильником-індексом, реалізовані на базі оператора for. При спробі звернутись до
елемента масиву за індексом, що виходить за допустимі межі, середовище виконання генерує виключення IndexOutOfRangeException (“Індекс знаходиться
поза межами масиву”). Якщо необхідно послідовно отримати доступ до значення кожного елемента масиву доцільно використати оператор foreach.
Приклади:
int[] myArray = new int[100];
Random RndGen = new Random ();
for (int i = 0; i < [Link]; i++)
{
myArray[i] = [Link] (10);
}
...
double[] x;
x = new double[] {0.1, 0.2, 0.3};
foreach (double Val in x)
{
[Link] (Val + “ ”);
}
Індексатори
Індексатор – це така властивість об’єкта, яка дає можливість здійснювати індексований доступ до нього. Таке поняття, як індексатор стосується не всіх мов
програмування. Воно характерне для мови C#. Властивість – засіб для контролю за доступом до даних. Як властивості, так і індексатори можуть надавати два
типи доступу до даних. Це читання та запис. Відповідно у мові програмування C# вони позначаються ключовими словами get і set.
Приклад класу з індексатором та властивістю:
using System;
using [Link];
using [Link];
using [Link];
namespace Laba_1._4_v1_CS
{
/// <summary>
/// Клас - абстракція масиву чисел цілого типу
/// </summary>
class Array
{
/// <summary>
/// Масив чисел цілого типу
/// </summary>
private int[] Elements;
/// <summary>
/// Розмір масиву
/// </summary>
private int ArraySize;
/// <summary>
/// Конструктор з параметрами
/// </summary>
/// <param name="Size">Розмір масиву</param>
public Array(int Size)
{
ArraySize = Size;
Elements = new int[ArraySize];
}
/// <summary>
/// Індексатор - контролює доступ до даних і границі масиву
/// </summary>
/// <param name="Index">Порядковий номер елемента в масиві</param>
/// <returns>Якщо границі не порушені, повертає значення елемента масиву, інакше повертає мінімальне число цілого типу</returns>
public int this[int Index]
{
get
{
if (Index >= 0 && Index < ArraySize)
{
return Elements[Index];
}
else
{
return [Link];
}
}
set
{
if (Index >= 0 && Index < ArraySize)
{
Elements[Index] = value;
}
}
}
/// <summary>
/// Властивість - кількість елементів у масиві
/// </summary>
public int Length
{
get
{
return ArraySize;
}
}
}
}
Індексатор застосовується для контролю над значеннями індексів і поверненню чи встановленню дозволених значень об’єкта. Тип даних індексу
може бути не тільки ціле число, а й будь-який інший, наприклад, символьний чи строковий.
Індексатори не є обмежені одновимірними масивами та цілочисельними індексами. Наприклад, допустимим є такий код:
public bool this[int i, string s]
{
get {
switch (i) {
case 0:
switch (s) {
case "AA": return true;
default: return false;
}
break;
…
}
Для індексаторів можна застосовувати цикли for, do та while, однак не можна написати цикл foreach, оскільки він працює лише з колекціями, а не з масивами.
Постановка завдання
Таблиця 1 – Завдання з одновимірними масивами для виконання
№
Завдання
п.п
1 Дани два одновимірних масивів А та В однакового розміру. Вивести на екран для кожної пари А[i] та В[i] значення А[i] * B[i] / (А[i]+В[i])
2 Дани два одновимірних масивів А та В однакового розміру. Вивести на екран середнє арифметичне (А[i]+В[i])/2
3 Дани два одновимірних масивів однакового розміру, в яких зберігаються значення опору R1 та R2. Вивести на екран значення загального опору,
ураховуючи, що R1 та R2 з’єднані паралельно( (R1[i]+R2[i])/R1[i]*R2[i])
4 Дани два одновимірних масивів А та В однакового розміру, що зберігаються дані про катети прямокутного трикутника. Вивести на екран
значення гіпотенузи для кожної пари А[i] та В[i]
5 Дани два одновимірних масивів А та В однакового розміру. Вивести на екран для кожної пари А[i] та В[i] значення А[i] * А[i] - В[i]
Таблиця 2 – Завдання з двовимірними масивами для виконання
№ Завдання
п.п
1 Даний двовимірний масив, що зберігає відомості N курсантів по M предметам. Знайти, хто з курсантів має максимальний середній бал. Якщо
таких декілька, вивести на екран їх номери за списком.
2 Даний двовимірний масив, що зберігає відомості по зарплаті N працівників за M місяців. Знайти хто з працівників має мінімальну середню
зарплату. Якщо таких декілька, вивести на екран їх номери за списком.
3 Даний двовимірний масив розміром N х M. Знайти, в якому стовпці найбільша кількість парних елементів. Якщо таких декілька, вивести на екран
їх номери за списком.
4 Даний двовимірний масив розміром N х M. Знайти, в якому стовпці сума елементів найбільша. Якщо таких декілька, вивести на екран їх номери
за списком.
5 Даний двовимірний масив розміром N х M. Знайти, в якому рядку сума елементів найменша. Якщо таких декілька, вивести на екран їх номери за
списком.
Приклад виконання роботи
Даний одновимірний масив. Знайти максимальний елемент.
Дані два одновимірних масивів. В одному зберігаються дані про ріст(Р) учня, в другому – про вагу (V). Визначити індекс маси тіла кожного учня та вивести на екран всіх,
у кого вага більше норми.
Дан двовимірний масив розміром N х M. Знайти, в якому стовпці найменша кількість позитивних елементів. Якщо таких декілька, вивести на екран їхні номери за
списком.
ПРОГРАМА
1-е завдання:
public static int Main()
{
Zada4a z1 = new Zada4a();
[Link]();
[Link]();
[Link]();
return 0;
}
}
Результат роботи програми
2-е завдання:
3-е завдання:
Результат роботи програми