5.1.2. Прямокутні масиви
Прямокутний масив має більше одного виміру. Найчастіше в програмах використовуються двовимірні масиви (матриці). Варіанти опису двовимірного масиву:
тип[,] ім'я;
тип[,] ім'я = new тип [ розм_1, розм_2 ];
тип[,] ім'я = { список_ініціалізаторів };
тип[,] ім'я = new тип [,] { список_ініціалізаторів };
тип[,] ім'я = new тип [ разм_1, разм_2 ] { список_ініціалізаторів };
Приклади описів (один приклад на кожен варіант опису):
int[,] а; // 1 елементів немає
int[,] b = new int[2, 3]; // 2 елементи рівні 0
int[,] c = {{1, 2, 3}, {4, 5, 6}}; // 3 new мається на увазі
int[,] c = new int[,] {{1, 2, 3} {4, 5, 6}}; // 4 розмірність обчислюється
int[,] d = new int[2,3] {{1, 2, 3} {4, 5, 6}}; // 5 надлишковий опис
До елементу двовимірного масиву звертаються, вказуючи номери рядка і стовпця, на перетині яких він розташований, наприклад:
а[1, 4] b[i, j] b[j, i]
Увага
Необхідно пам'ятати, що компілятор сприймає у якості номера рядка перший індекс, як би він не був позначений в програмі.
Як приклад розглянемо програму, яка для цілочисельної матриці розміром 3x4 визначає середнє арифметичне її елементів і кількість позитивних елементів в кожному рядку.
Для знаходження середнього арифметичного елементів масиву потрібно знайти їх загальну суму, після чого розділити її на кількість елементів. Порядок перебору елементів масиву (по рядках або по стовпцях) ролі не грає. Знаходження кількості позитивних елементів кожного рядка вимагає перегляду матриці по рядках.
Приклад 5.2
using System;
namespace ConsoleApplication1
{ class Class1
{
static void Main()
{
const int m = 3, n = 4;
int[,] a = new int[m, n] {
{ 2,-2, 8, 9 },
{-4,-5, 6,-2 },
{ 7, 0, 1, 1 }
};
Console.WriteLine( "Початковий масив:" );
for ( int i = 0; i < m; ++i )
{
for ( int j = 0; j < n; ++j )
Console.Write( "\t" + a[i, j] );
Console.WriteLine();
}
double sum = 0;
int nPosEl;
for ( int i = 0; i < m; ++i )
{
nPosEl = 0;
for ( int j = 0; j < n; ++j )
{
sum += a[i, j];
if ( a[i, j] > 0 ) ++nPosEl;
}
Console.WriteLine( "У рядку {0} {1} додатніх елементів",
i, nPosEl );
}
Console.WriteLine( "Середнє арифметичне всіх елементів: "
+ sum / m / n );
}
}
}
5.1.3. Ступінчасті масиви
У ступінчастих масивах кількість елементів в різних рядках може розрізнятися. У пам'яті ступінчастий масив зберігається інакше, ніж прямокутний: у вигляді декількох внутрішніх масивів, кожен з яких має свій розмір. Крім того, виділяється окрема ділянка пам'яті для зберігання посилань на кожен з внутрішніх масивів (рис. 5.1).
Рис. 5.1. Ступінчастий масив
