Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие NET.doc
Скачиваний:
26
Добавлен:
07.03.2016
Размер:
4.63 Mб
Скачать

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

Одновимірні масиви використовуються в програмах найчастіше. Варіанти опису масиву:

тип[] ім'я;

тип[] ім'я = new тип [ розмірність ];

тип[] ім'я = {список_ініціалізаторів };

тип[] ім'я = новий тип [] { список ініціалізаторів };

тип[] ім'я = new тип [ розмірність ] { список ініціалізаторів };

Приклади описів (один приклад для кожного варіанту опису):

int[] а; // 1 елементів немає

int[] b new int[4]; // 2 елементи дорівнюють 0

int[] c = { 61, 2, 5, -9 }; // 3 new мається на увазі

int[] d = new int[] { 61, 2, 5, -9}; // 4 розмірність обчислюється

int[] e = new int[4] { 61, 2, 5, -9}; // 5 надмірний опис

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

У кожному з решти масивів по чотири елементи цілого типу. Як видно з операторів 3-5, масив при описі можна ініціалізувати. Якщо при цьому не задана розмірність (оператор 3), кількість елементів обчислюється по кількості ініціалізованих значень. Для полів об'єктів і локальних змінних можна не вказувати операцію new, вона буде виконана за умовчанням (оператор 2). Якщо присутня і розмірність, і список ініціалізаторів, розмірність має бути константою (оператор 4).

Якщо кількість ініціалізованих значень не збігається з розмірністю, виникає помилка компіляції.

Як приклад розглянемо програму, яка визначає суму і кількість від’ємних елементів, а також максимальний елемент масиву, що складається з 6 цілочи-сельних елементів (лістинг 6.1).

Лістинг 6.1 . Робота з одновимірним масивом

usingSystem;

namespace ConsoleApplication1

{

class Classl

{

static void Main( )

{

const int n = 6;

int i;

int[] a = new int[n] {3, 12, 5, -9, 8, -4};

Console.WriteLine("Початковий масив:");

for (i = 0; i<n; i ++)

Console.Write("\t" + a[i ]);

Console.WriteLine( );

long sum = 0; // сума від’ємних елементів

int num = 0; // кількість від’ємних елементів

for (i = 0; i< n; i ++)

if (a[i] < 0 )

{

sum += a[i];

num ++;

}

Console.WriteLine( "Сума від’ємних елементів= " + sum );

Console.WriteLine("Кількість від’ємних елементів = " + num);

int max = a[0]; // максимальний елемент

for (i =1; i < n; i ++)

if ( a[i ] > max ) max = a[i];

Console.WriteLine("Максимальний елемент = " + max );

}

}

}

6.2. Прямокутні масиви

Прямокутний масив має більше одного вимірювання. Найчастіше в програмах використовуються двовимірні масиви. Варіанти опису двовимірного масиву:

тип[,] ім’я;

тип[,] ім’я = new тип [ розм _1, розм_2 ];

тип[,] ім’я = { список ініціалізаторів };

тип[,] ім’я = new тип [,] { список ініціалізаторів };

тип[,] ім’я = new тип [ розм_1, розм_2 ] {список ініціалізаторів};

Приклади описів (один приклад для кожного варіанту опису):

int [ , ] a; //1 елементів немає

int [ , ] b = new int [2,3]; //2 елементи дорівнюють 0

int [ , ] с = {{1, 2, 3}, {4, 5, 6}}; //3 new мається на увазі

int [ , ] d = new int[ , ] {{1, 2, 3}, {4, 5. 6}}; //4 розмірність обчислюється

int [ , ] e = new int[2,3] {{1, 2, 3}, {4, 5, 6}}; //5 надмірний опис

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

а[1 , 4] b[i , j ] b[j, i]

Як приклад розглянемо програму на лістингу 6.2, яка для цілочисельної матриці визначає середнє арифметичне її елементів і кількість додатних елементів в кожному рядку.

Лістинг 6.2. Робота з двовимірним масивом

using System;

namespace ConsoleApplication1

{

class Classl

{

static void Main( )

{

const int n = 3, m = 4;

int i,j;

int[,] a = new int[n, m]

{

{ 2,-2, 8, 9},

{- 4,- 5, 6,- 2},

{ 7, 0, 1, 1}

};

Console.WriteLine( "Початковий масив:");

for (i = 0; i < n; i ++)

{

for (j = 0; j < m; j ++)

Console.Write( "\t" + a[i, j]);

Console.WriteLine( );

}

double sum = 0;

int pel;

for (i = 0; i < n; i ++)

{

pel = 0;

for (j = 0; j < m; j ++)

{

sum += a[i, j] ;

if ( a[i, j] > 0 )pel ++;

}

Console.WriteLine( "У рядку {0} {1} додат. елементів ", i, pel);

}

Console.WriteLine("Серед. ариф. значення елементів = " +sum/m/n);

}

}

}