3663

Робота з масивами

Лекция

Информатика, кибернетика и программирование

Робота з масивами Масиви в C# Масив задає спосіб організації даних. Масивом називають упорядковану сукупність елементів одного типу. Кожен елемент масиву має індекси, що визначають порядок елементів. Число індексів характеризує розмірніс...

Украинкский

2012-11-05

218 KB

85 чел.

Робота з масивами

Масиви в C#

Масив задає спосіб організації даних. 

Масивом називають упорядковану сукупність елементів одного типу.  Кожен елемент масиву має індекси, що визначають порядок елементів. Число індексів характеризує розмірність масиву. Кожен індекс змінюється в деякому діапазоні [a,b]. У мові C#, як й у багатьох інших мовах, індекси задаються цілочисельним типом. Діапазон [a,b] називається граничною парою, a - нижньою границею, b - верхньою границею індексу. При оголошенні масиву границі задаються вираженнями. Якщо всі границі задані константними вираженнями, то число елементів масиву відомо в момент його оголошення і йому може бути виділена пам'ять ще на етапі трансляції. Такі масиви називаються статичними. Якщо ж вираження, що задають границі, залежать від змінних, то такі масиви називаються динамічними, оскільки пам'ять їм може бути відведена тільки динамічно в процесі виконання програми, коли стають відомими значення відповідних змінних. Масиву виділяється безперервна область пам'яті. В C# масиви - динамічні.

При написанні програм, можна створювати одномірні, багатомірні масиви й масиви масивів. 

Одномірні масиви

Оголошення одномірного масиву виглядає в такий спосіб:

<тип>[] <ім'я масиву>;

Квадратні дужки приписані не до імені змінної, а до типу. Вони є невід'ємною частиною визначення класу, так що, наприклад, запис int [ ] варто розуміти як клас одномірний масив з елементами типу int.

Що ж стосується границь зміни індексів, то ця характеристика до класу не ставиться, вона є характеристикою змінних.

Як й у випадку оголошення простих змінних, при оголошенні масиву одночасно може бути проведена й ініціалізація. Потрібно розуміти, що при оголошенні з відкладеною ініціалізацією сам масив не формується, а створюється тільки посилання на масив, що має невизначене значення Null. Тому поки масив не буде реально створений і його елементи ініціалізовані, використати його в обчисленнях не можна. Приклад оголошення трьох масивів з відкладеною ініціалізацією:

int[] a, b, c;

Найчастіше при оголошенні масиву використовується ім'я з ініціалізацією. І знов-таки, як й у випадку простих змінних, можуть бути два варіанти ініціалізації. У першому випадку ініціалізація є явною й задається константним масивом:

double[] x= {5.5, 6.6, 7.7};

Дотримуючись синтаксису, елементи константного масиву варто брати у фігурні дужки.

У другому випадку створення й ініціалізація масиву виконується в об'єктному стилі з викликом конструктора масиву. І це найпоширеніша практика оголошення масивів:

int[] d= new int[5];

Якщо масив оголошується без ініціалізації, то створюється тільки посилання на нього. Якщо ініціалізація виконується конструктором, то в динамічній пам'яті створюється сам масив, елементи якого ініціалізуються константами відповідного типу (нуль для арифметики, порожній рядок для строкових масивів), і посилання зв'язується із цим масивом. Якщо масив ініціалізується константним масивом, то в пам'яті створюється константний масив, з яким і зв'язується посилання.

Розглянемо ще кілька прикладів оголошення масивів:

 ...

 int[] k;      //k - масив

 k=new int [3];     //Визначаємо масив з 3-х цілих

 k[0]=-5; k[1]=4; k[2]=55; //Задаємо елементи масиву

                           //Виводимо третій елемент масиву

 Console.WriteLine(k[2].ToString());

 ...

Зміст наведеного фрагменту ясний з коментарів. Зверніть увагу на деякі особливості. По-перше, масив визначається саме як

int[] k;

а не як один з наступних варіантів:

int k[]; //Невірно!

int k[3]; //Невірно!

int[3] k; //Невірно!

По-друге, тому що масив представляє посилальний об'єкт, то для створення масиву необхідний рядок

k=new int [3];

Саме в ній ми й визначаємо розмір масиву. Хоча, загалом кажучи, можливі конструкції виду

int[] k = new int [3];

Елементи масиву можна задавати відразу при оголошенні. От приклад:

int[] k = {-5, 4, 55};

Зрозуміло, наведені конструкції застосовані не тільки до типу int і не тільки до масиву розміру 3.

В C# нумерація елементів масиву починається з нуля. Таким чином, у прикладі початковий елемент масиву - це k[0], а останній - k[2]. Елемента k[3] немає.

Динамічні масиви

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

Синтаксично немає різниці в оголошенні статичних і динамічних масивів. Вираження, що задає границю зміни індексів, у динамічному випадку містить змінні. Єдина вимога - значення змінних повинні бути визначені в момент оголошення.

Приклад, у якому описана робота з динамічним масивом:

public void TestDynAr()

{

  //оголошення динамічного масиву A1

  Console.WriteLine("Введіть число елементів масиву A1");

  int size = int.Parse(Console.ReadLine());

  int[] A1 = new int[size];

}

У даній процедурі верхня границя масиву визначається користувачем.

Багатомірні масиви

Поділ масивів на одномірні і багатомірні носить історичний характер. Ніякої принципової різниці між ними немає. Одномірні масиви - це окремий випадок багатомірних. Можна говорити й по-іншому: багатомірні масиви є природним узагальненням одномірних. Одномірні масиви дозволяють задавати такі математичні структури як вектори, двовимірні - матриці, тривимірні - куби даних, масиви більшої розмірності - багатомірні куби даних.

Оголошення багатомірного масиву в загальному випадку:

<тип>[, ... ,] <ім'я_масиву>;

Число ком, збільшене на одиницю, і задає розмірність масиву. Слід зазначити, що хоча явна ініціалізація з використанням багатомірних константних масивів можлива, але застосовується рідко через громіздкість такої структури. Простіше ініціалізацію реалізувати програмно.

Приклади:

Двовимірний масив:

int[,] k = new int [2,3];

Звернете увагу, що пари квадратних дужок тільки одна. У нашому прикладі в масиву 6 (=2*3) елементів (k[0,0] - перший, k[1,2] - останній).

Аналогічно ми можемо задавати багатомірні масиви. Приклад тривимірного масиву:

int[,,] k = new int [10,10,10];

Варіант ініціалізації багатомірного масиву:

int[,] k = {{2,-2},{3,-22},{0,4}};

Масиви масивів

Ще одним видом масивів C# є масиви масивів, названі також порізаними масивами (jagged arrays). Такий масив масивів можна розглядати як одномірний масив, елементи якого є масивами, елементи яких, у свою чергу, знову можуть бути масивами, і так може тривати до деякого рівня вкладеності.

У яких ситуаціях може виникати необхідність у таких структурах даних? Ці масиви можуть застосовуватися для подання дерев, у яких вузли можуть мати довільне число нащадків. Таким може бути, наприклад, генеалогічне дерево. Вершини першого рівня - Fathers, що представляють батьків, можуть задаватися одномірним масивом, так що Fathers[i] - це i-й батько. Вершини другого рівня представляються масивом масивів - Children, так що Children[i] - це масив дітей i-го батька, а Children[i][j] - це j-й дитина i-го батька. Для подання онуків знадобиться третій рівень, так що GrandChildren [i][j][k] буде представляти к-го онука j-го дитини i-го батька.

Є деякі особливості в оголошенні й ініціалізації таких масивів. Якщо при оголошенні типу багатомірних масивів для вказівки розмірності використовувалися коми, то для порізаних масивів застосовується більш ясна символіка - сукупності пари квадратних дужок; наприклад, int [ ][ ] задає масив, елементи якого - одномірні масиви елементів типу int.

Складніше зі створенням самих масивів й їхньою ініціалізацією. Тут не можна викликати конструктор new int[3][5], оскільки він не задає порізаний масив. Фактично потрібно викликати конструктор для кожного масиву на самому нижньому рівні. У цьому й складається складність оголошення таких масивів. Приклад:

//масив масивів

//оголошення й ініціалізація

int[][] jagger = new int[3][]

{

  new int[] {5,7,9,11},

  new int[] {2,8},

  new int[] {6,12,4}

};

Масив jagger має всього два рівні. Можна вважати, що в нього три елементи, кожний з яких є масивом. Для кожного такого масиву необхідно викликати конструктор new, щоб створити внутрішній масив. У даному прикладі елементи внутрішніх масивів одержують значення, будучи явно ініціалізовані константними масивами. Звичайно, припустиме й таке оголошення:

int[][] jagger1 = new int[3][]

{

  new int[4],

  new int[2],

  new int[3]

};

У цьому випадку елементи масиву одержать при ініціалізації нульові значення. Реальну ініціалізацію потрібно буде виконувати програмним шляхом. Варто помітити, що в конструкторі верхнього рівня константу 3 можна опустити й писати просто new int[ ][ ]. Виклик цього конструктора можна взагалі опустити - він буде матися на увазі:

int[][] jagger2 =

{

  new int[4],

  new int[2],

  new int[3]

};

А от конструктори нижнього рівня необхідні. Ще одне важливе зауваження - динамічні масиви можливі й тут. У загальному випадку, границі на будь-якому рівні можуть бути вираженнями, що залежать від змінних. Більше того, припустимо, щоб масиви на нижньому рівні були багатомірними.

Ще кілька прикладів:

 //Повідомляємо 2-мірний східчастий масив

 int[][] k = new int [2][];

 //Повідомляємо 0-й елемент нашого східчастого масиву

 //Це знову масив й у ньому 3 елементи

 k[0]=new int[3];

 //Повідомляємо 1-й елемент нашого східчастого масиву

 //Це знову масив й у ньому 4 елементи

 k[1]=new int[4];

 k[1][3]=22; //записуємо 22 в останній елемент масиву

 ...

Зверніть увагу, що в східчастих масивів задається пара квадратних дужок (стільки, яка розмірність масиву).

Цикл foreach

Новим видом циклу, що часто використовується й достатньо зручний при роботі з масивами, є цикл foreach. Його синтаксис:

foreach(тип ідентифікатор in контейнер) оператор

Тіло циклу виконується для кожного елементу масиву й закінчується, коли повністю перебрані всі елементи. Тип ідентифікатора повинен бути погоджений з типом елементів, що зберігаються в масиві даних. Передбачається також, що елементи масиву впорядковані. На кожному кроці циклу ідентифікатор, що задає поточний елемент масиву, одержує значення чергового елемента відповідно до порядку, установленим на елементах масиву. Із цим поточним елементом і виконується тіло циклу - виконується стільки разів, скільки елементів перебуває в масиві.

Недоліком циклів foreach у мові C# є те, що цикл працює тільки на читання, але не на запис елементів. Так що наповнювати масив елементами доводиться за допомогою інших операторів циклу.

Приклади використання циклу foreach:

class Program

   {

       static void Main(string[] args)

       {

         int[] array1 = {0, 2, 4, 6, 8, 10};

foreach (int n in array1)

{

System.Console.WriteLine(n.ToString());

}

string[] array2 = {"hello", "world"};

foreach (string s in array2)

{

System.Console.WriteLine(s);

}

       }

   }

У наведеному прикладі наш цикл перебирає всі елементи масиву array1. На це вказує рядок

foreach (int n in array1)

яка інтерпретується так: для кожного цілого числа з масиву array1 робимо щось там. Якби елементами масиву були б не цілі, а, скажемо, речовинні числа, то запис виглядав би так:

foreach(float n in array1)

Отже  ми пишемо саме тип елементів масиву. Цикл foreach використається не тільки для масивів, але й для інших об'єктів.

Метод Format

Щораз, коли виконувався вивід результатів на консоль, неявно викликався й метод Format. Загальний синтаксис такий:

{N [,M [:<коди_форматування>]]}

Обов'язковий параметр N задає індекс об'єкта, що заміняє формат. Можна вважати, що методу завжди передається масив об'єктів, навіть якщо фактично переданий один об'єкт. Індексація об'єктів починається з нуля, як це прийнято в масивах. Другий параметр M, якщо він заданий, визначає мінімальну ширину поля, що приділяється рядку, що вставляє замість формату. Третій необов'язковий параметр задає коди форматування, що вказують, як варто форматувати об'єкт. Наприклад, код C (Currency) говорить про те, що параметр повинен форматуватися як валюта з урахуванням національних особливостей подання. Код P (Percent) задає форматування у вигляді відсотків з точністю до сотої частки.

Для виводу на консоль використалася наступна конструкція:

...

int x=23, y=-4;

...

Console.WriteLine("x={0}, y={1}", x, y);

...

Тут ми використаємо усередині лапок підставі знаки {0}, {1} і т.д. (нумерація в них іде з нуля). Змінні при цьому виводяться у форматі за замовчуванням. Для виводу в визначеному форматі треба використати підставні знаки з параметрами. Ось деякі з них:

d - десятковий формат. Дозволяє задати загальну кількість знаків (при необхідності число доповнюється ліворуч нулями).

f - формат з фіксованою точністю. Дозволяє задати кількість знаків після коми.

x - шістнадцятирічний формат.

c - грошовий формат (додає знак долара й показує два знаки після коми).

e - вивід числа в експонентній формі.

Приклад використання:

           ...

           int a=38;

           //Виведеться 0038

           Console.WriteLine("a={0:d4}", a);

           double pi=3.1415926;

           //Виведеться 3.14

           Console.WriteLine("pi={0:f2}", pi);

           int b=255;

           //Виведеться FF.

           Console.WriteLine("b={0:X}", b);

           int c=255;

           //Виведеться ff.

           Console.WriteLine("c={0:x}", c);

           double d=1003.214;

           //Виведеться $1, 003.14 в англійській версії Windows й

           //1 003,14 р. у росіянці.

           Console.WriteLine("d={0:c}", d);

           double e=213.1;

           //Виведеться 2.131000e+002

           Console.WriteLine("e={0:e}", e);

           ...

Параметри підставних знаків можна використати як рядкові, так і прописні - це однаково. Виключення - вивід числа в шістнадцятирічному виді (при використанні h цифри a, ..., f будуть рядковими, при використанні H - прописними).


Варіанти індивідуальних завдань.

 

Завдання 13.1.

Створити й вивести масив Zi з елементами (кількість елементів №варіанта + 10), які обчислюються, відповідно до варіанта, наведеним у таблиці:

  1.  

  1.  Z[i]=a[i]+b[i];
  2.  z=ab;
  3.  z=tg(b)-a;
  4.  z=(a+b)2;
  5.  z=5ab-4;
  6.  z=sin(a)+b;
  7.  z=b tga;
  8.  z=a2+3b;
  9.  z=(|ab|)1/4;
  10.  z=ab-?;
  11.  z=a-2b;
  12.  z=a tgb;
  13.  z=cos(ab);
  14.  z=|a-b|;
  15.  z=ctg(2a)-b;
  16.  z=e3ab;
  17.  z=4ba-b;
  18.  z=2a-b;
  19.  z=|12a-cos(b)|;
  20.  z=2a-b;
  21.  z=tg(a+b);
  22.  z=ln|a+4b|;
  23.  z=3ab-cos(b);
  24.  z=4a+eb;
  25.  z=5a-2b,

де

k– ціле число, що вводить користувачем із клавіатури. Значення функції вибираються з таблиці 1

Таблиця 13.1.

Функція f(x)

1

9,2cosi2–|sinx/1,1|

2

12,4sin|x/2,1|–8,3cos1,2x

3

|cosx/2,7|+9,1sin(1,2x+1)

4

|sinx/3,12+cosx2|–8,3sin3x

5

cos|2x|/1,12–cos(3x–2)+6,15

6

sinxcosx2sin(x+1,4) +5,14

7

|sin(2x–1,5) +3sinx2|+2,38

8

cosx2sin(2x–l)+4,29

9

cos(x2+l)–|sin2x–5,76|

10

sinx–cosx3sin(x2–4,2) +4,27

11

|sin12xcos|2x|/3|+4,21

12

cosx3/2,1+cosx2/1,1–8.3sin(3x+1)

13

sinx2cosx3–sinx+5,2

14

2sinxsin(2x–1,5) cos(2x+1,5)–6

15

|cosx2–0,51|sin(3x–4)–4,44

16

cos2,1xsin|x|/0,15–5,8

17

|cos2x3+2sin(x/l,2–3,4)|+10,51cos|3x|

18

|sin(x2/1,5–2)|+11,73cos(1,6x–1)

19

13,4cos|x|sin(x2–2,25)

20

|соs(x2–3,8)|/4,5–9,7sin(x–3,1)

21

13,4sin(–1,26) cos|x/7,5|

22

2sin|2x|cos2x–11,6sin(x/0,4–1)

23

sin|x|/0,1+ 9,4sin(3x–2,5)

24

10,8cos(x2/1,13) |sin(x+1,4)

25

11,2cos(2x–1)+|sinl,5x|/1,7


Відповідно до варіанта, виконати з отриманим масивом наступне завдання:

  1.  Створити й вивести на друк новий масив, що складається з додатних елементів масиву Z.
  2.  Визначити суму 3 й 6 додатних елементів.
  3.  Другий від’ємний елемент замінити мінімальним.
  4.  Визначити мінімальний елемент серед додатних елементів.
  5.  Ненульові елементи масиву перенести в інший масив, розташувавши їх у зворотному порядку.
  6.  Обчислити суму перших чотирьох від’ємних елементів.
  7.  Вивести номер передостаннього додатного елемента.
  8.  Створити масив з від’ємних елементів масиву.
  9.  Знайти добуток другого й четвертого елементів більших 3.
  10.  Максимальний елемент поміняти місцями з мінімальним елементом.
  11.  Останній від’ємний елемент поміняти місцями з максимальним елементом.
  12.  Обчислити добуток другого від’ємного й п'ятого елементів.
  13.  Сформувати інший масив з елементів масиву, які більше 1.
  14.  Вивести номери двох найбільших елементів масиву. Обчислити їхню суму.
  15.  Визначити чи є серед від’ємних елементів елементи з максимальними значеннями.
  16.  Максимальний елемент поміняти з 4 .
  17.  Третій додатний елемент замінити максимальним.
  18.  Визначити номер п'ятого від’ємного елемента.
  19.  Обчислити добуток перших трьох додатних елементів і визначити їх номера.
  20.  Обчислити суму другого додатного й третього елемента.
  21.  Створити новий масив з елементів менших 3.
  22.  Створити масив, значення яких перебувають між значеннями 3 елемента  й максимального значення.
  23.  Знайти добуток номерів найменших елементів серед додатних.
  24.  Визначити суму номерів 2 й 3 від’ємних елементів.
  25.  Визначити номера 2 й 4 додатних елементів.

Методи класу System.Array

Масиви в C# засновані на класі System.Array. У всіх класів, що є масивами, багато загального, оскільки всі вони є нащадками класу System.Array. Клас Array має досить велике число власних методів і властивостей.

Приклад:

using System;

namespace test

{

   class Test

   {

       static void Main(string[] args)

       {

           //Оголошення масиву.

           int [] num = {4, -5, 2, 0, 23};

           //Виводимо масив.

           foreach (int i in num)

           {

               Console.WriteLine(i.ToString());

           }

           //Перевертаємо масив.

           Console.WriteLine("Перевернений масив");

           Array.Reverse(num);

           foreach (int i in num)

           {

               Console.WriteLine(i.ToString());

           }

           //Сортуємо масив.

           Array.Sort(num);

           Console.WriteLine("Відсортований масив");

           foreach (int i in num)

           {

               Console.WriteLine(i.ToString());

           }

           //Обнуляем масив.

           Array.Clear(num, 0, 5);

           Console.WriteLine("Обнуленный масив");

           foreach (int i in num)

           {

               Console.WriteLine(i.ToString());

           }

       }

   }

}

Тут використаються статичні методи класу Array для сортування, перекидання й очищення масиву. Зрозуміло, ці методи не єдині.

У класі Array є, наприклад, ще вбудований статичний метод IndexOf призначений для пошуку елемента в масиві. Приклад використання:

           int k = 5;

           Console.WriteLine("Число {0} перебуває на {1} місці.", k, Array.IndexOf(num, k));

Цей метод повертає індекс шуканого елемента (нумерація з нуля). Якщо такого елемента немає, то повертається -1.

Зверніть увагу, що ці методи діють для вбудованих типів (у нашому прикладі масив був типу int). Для користувальницьких типів даних їхнє застосування теж можливо. Деякі властивості й методи класу Array наведені в таблицях 13. 2-4.

Таблиця 13.2.Властивості класу Array

Властивість

Опис

Length

Число елементів масиву

Rank

Розмірність масиву

Таблиця 13.3. Статичні методи класу Array

Метод

Опис

BinarySearch

Двійковий пошук. Визначає індекс першого входження зразка у відсортований масив, використовуючи алгоритм двійкового пошуку

Clear

Виконує початкову ініціалізацію елементів. Залежно від типу елементів встановлює значення 0 для арифметичного типу, false - для логічного типу, Null для посилань, "" - для рядків.

Copy

Копіювання частини або всього масиву в інший масив.

IndexOf

Індекс першого входження зразка в масив.

LastIndexOf

Індекс останнього входження зразка в масив.

Reverse

Обіг одномірного масиву. Виконує обіг масиву, переставляючи елементи у зворотному порядку

Sort

Сортування масиву.

Таблиця 13.4. Динамічні методи класу Array

Метод

Опис

ToString

Перетворення елемента масиву в строкову змінну

Clone

Дозволяє створити плоску або глибоку копію масиву. У першому випадку створюються тільки елементи першого рівня, а посилання вказують на ті ж самі об'єкти. У другому випадку копіюються об'єкти на всіх рівнях. Для масивів створюється тільки плоска копія.

CopyTo

Копіюються всі елементи одномірного масиву в інший одномірний масив, починаючи із заданого індексу:

col1.CopyTo(col2,0);

GetLength

Повертає число елементів масиву по зазначеному вимірі.

GetLowerBound, GetUpperBound

Повертає нижню й верхню границю по зазначеному вимірі. Для масивів нижня границя завжди дорівнює нулю.

GetValue, SetValue

Повертає або встановлює значення елемента масиву із зазначеними індексами.

Приклад, використання вище наведених методів, для роботи з масивами:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace Array1

{

   class Program

   {

       static void Main(string[] args)

       {

           //Оголошення масиву.

           int[] Arr1 = { 4, -5, 2, 0, 23 };

           //Виводимо масив.

           foreach (int i in Arr1)

           {

               Console.WriteLine(i.ToString());

           }

           //Число елементів масиву (Arr1.Length)

           Console.WriteLine("Кількість елементів масиву = " + Arr1.Length);

           //Розмірність масиву (Rank)

           Console.WriteLine("Розмірність масиву = " + Arr1.Rank);

           // Верхня границя масиву (GetUpperBound)

           Console.WriteLine("Верхня границя масиву = " + Arr1.GetUpperBound(0));

           // Нижня границя масиву (GetLowerBound)

           Console.WriteLine("Нижня границя масиву = {0}",  Arr1.GetLowerBound(0));

           //Прочитати значення 2-го елемента

           Console.WriteLine("Значення 2-го елемента = {0}", Arr1.GetValue(1));

           //Змінити значення 2-го елемента на -11

           Arr1.SetValue(-11, 1);

           Console.WriteLine("Змінене значення 2-го елемента = {0}", Arr1.GetValue(1));

           //Оголошення масиву Arr2

           //Кількість елементів масиву визначається як

           //верхня границя масиву Arr1 + 1 (Arr1.GetUpperBound(0) + 1)

           int [] Arr2 = new int[Arr1.GetUpperBound(0) + 1];

           Console.WriteLine("Скопійований масив");

           //Копіювання масиву Arr1 в Arr2 починаючи з 0 елемента

           Arr1.CopyTo(Arr2,0);

           foreach (int i in Arr2)

           {

               Console.WriteLine(i.ToString());

           }

           //Перевертаємо масив

           Console.WriteLine("Перевернений масив");

           Array.Reverse(Arr1);

           foreach (int i in Arr1)

           {

               Console.WriteLine(i.ToString());

           }

           // Пошук індексу в несортованому масиві елемента "23"

           Console.WriteLine("Індекс елемента 23 =" + Array.IndexOf(Arr1, 23));

           //Сортуємо масив.

           Array.Sort(Arr1);

           Console.WriteLine("Відсортований масив");

           foreach (int i in Arr1)

           {

               Console.WriteLine(i.ToString());

           }

           // Двійковий пошук індексу у відсортованому масиві елемента "23"

           Console.WriteLine("Індекс елемента 23 =" + Array.BinarySearch(Arr1,23));

           Console.WriteLine("Індекс елемента 23 після сортування =" + Array.IndexOf(Arr1, 23));

           //Обнуляем масив.

           Array.Clear(Arr1, 0, 5);

           Console.WriteLine("Обнуленный масив");

           foreach (int i in Arr1)

           {

               Console.WriteLine(i.ToString());

           }

           //Оголошення масиву float

           //Елементи зчитуються із клавіатури

           Console.WriteLine("Уведіть розмір масиву");

           int Zise_Arr3 = int.Parse(Console.ReadLine());

           float [] Arr3 = new float[Zise_Arr3];

           Console.WriteLine("Уведіть елементи масиву");

           for(int ii=0;ii<Zise_Arr3;ii++)

           {

           Arr3[ii]=float.Parse(Console.ReadLine());

           }

           Console.WriteLine("Уведений відсортований масив");

           Array.Sort(Arr3);

           for (int ii = 0; ii < Zise_Arr3; ii++)

           {

               Console.WriteLine(Arr3[ii].ToString());

           }

           //Пошук максимуму

           float k = Arr3.Max();

           Console.WriteLine("Max=" + k.ToString());

           //Пошук мінімуму

           k = Arr3.Min();

           Console.WriteLine("Min=" + k.ToString());

           //Порівняння двох масивів (Equals)

           bool l = Array.Equals(Arr1, Arr2);

           Console.WriteLine("BOOL=" + l.ToString());

           l = Array.Equals(Arr1, Arr1);

           Console.WriteLine("BOOL=" + l.ToString());

       }

   }

}

Завдання 13. 2. використанням методів класу System.Array.

Створити масив з елементами , де n,k – цілі числа, що вводять користувачем із клавіатури. Значення функції вибираються з таблиці 1. Вивести на екран значення масиву. Виконати завдання у відповідності  з варіантом. Недостаючі завдання погодити в викладачем.

  1.  Визначити індекси мінімального елемента масиву. Обчислити добуток його від’ємних елементів.
  2.  Обчислити кількість елементів масиву, для яких виконується нерівність .
  3.  Обчислити добуток значень тих елементів, для яких справедлива нерівність .
  4.  Обчислити кількість позитивних елементів й їхній добуток.
  5.  Обчислити суму квадратів елементів, значення яких більше 1.
  6.  Обчислити добуток квадратів тих елементів, для яких виконується нерівність  .
  7.  Обчислити кількість елементів масиву, для яких виконується нерівність  і суму елементів, значення яких менше 9.
  8.  Обчислити добуток від’ємних елементів. Визначити індекси максимального елементу.
  9.  Обчислити суму діагональних елементів масиву й кількість негативних елементів.
  10.  Обчислити добуток елементів масиву, для яких справедлива нерівність .
  11.  Визначити індекси максимального елемента масиву. Обчислити добуток елементів вище головної діагоналі.
  12.  Обчислити добуток елементів перших двох рядків.
  13.  Обчислити суму елементів масиву вище головної діагоналі. Визначити індекси мінімального елемента.
  14.  Обчислити суму від’ємних елементів. Знайти максимальний елемент.
  15.  Обчислити добуток мінімального й максимального члена масиву.
  16.  Визначити індекси мінімального й максимального елементів масиву.
  17.  Значення елементів масиву рівні нулю замінити на 1. Визначити суму елементів нижче головної діагоналі.
  18.  Визначити кількість від’ємних і суму додатних елементів масиву.
  19.  Обчислити добуток елементів, для яких виконується нерівність .
  20.   Визначити індекси максимального й мінімального елементів масиву. Обчислити їхній добуток.
  21.  Обчислити добуток елементів вище головної діагоналі матриці й визначити їхню кількість.
  22.  Обчислити середнє арифметичне позитивних елементів масиву.
  23.  Обчислити суму елементів масиву, для яких виконується нерівність .
  24.  Обчислити суму діагональних елементів матриці й кількість елементів, значення яких менше 3.
  25.  Обчислити добуток елементів нижче головної діагоналі на суму елементів, які розташовані нижче головної діагоналі.