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

Інтернет - блог про інтернет

Двовимірний масив – це одномірний масив , елементами якого є одновимірні масиви. Іншими словами, це набір однотипних даних, що має спільне ім’я, доступ до елементів якого здійснюється за двома індексами. Наочно двовимірний масив зручно представляти у вигляді таблиці, в якій n рядків і m стовпців, а під осередком таблиці, що стоїть у i-му рядку та j-му стовпці розуміють деякий елемент масиву a[i][j].

Дійсно, якщо розібратися з тим, що таке a[i] при фіксованому значенні i, то побачимо, що це одномірний масив, що складається з елементів, до яких можна звертатися за індексом: a[i][1], a[i] [2], …, a[i][m]. Схематично це весь перший рядок рядок таблиці. Аналогічно, якщо ми розглянемо одномірний масив рядків, то зможемо помітити, що це двомірний масив, де кожен окремий елемент – це символ типу char, а a [i] – це одномірний масив, що представляє окремий рядок вихідного одномірного масиву рядків. Виходячи з ідеї визначення думерного масиву можна визначити рекуррентне поняття багатовимірного масиву:

n-мірний масив – це одномірний масив, елементами якого є (n-1)-мірні масиви.

Неважко здогадатися, що 3-мірний масив візуально можна у вигляді куба з осередками (схоже на кубик Рубіка), де кожен елемент має вигляд a[i][j][k]. А ось з великими розмірностями виникають складності з візуальним уявленням, але математична модель зрозуміла.

Інакше двомірний масив також називають матрицею , тоді як, коли n=m (число рядків дорівнює числу стовпців) матрицю називають квадратної. У матрицях можна зберігати будь-які табличні дані: зміст ігрового поля (шашки, шахи, Lines тощо), лабіринти, таблицю суміжності графа, коефіцієнти системи лінійних рівнянь тощо. Матриці часто використовують для вирішення олімпіадних та математичних завдань.

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

3 5
7 8 2 3 1
5 3 2 6 3
9 3 5 2 0

У наведеному прикладі визначено матрицю, що складається з трьох рядків та п’яти стовпців. Розглянемо приклад читання цих даних у матрицю та виведення матриці у файл. Для цього зручно використовувати подвійний цикл, де зовнішній цикл i буде пробігати по всіх рядках, а внутрішній цикл j для поточного рядка i перебирати всі її елементи. Алгоритмічна реалізація цього процесу може виглядати так:

//опис масива
int a[100][100];

//читання даних двовимірного масива
cin >> n >> m;for(i=0; i<n; i++)  for(j=0; j<m; j++)    cin >> a[i][j];

//вивід даних двовимірного масива
for(i=0; i<n; i++){  for(j=0; j<m; j++)    cout << a[i][j] << ' ';  cout << endl;}

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

//головна діагональ
for(i=1; i<n; i++)  for(j=0; j<i; j++)    swap(a[i][j],a[j][i]);
//побічна діагональ
for(i=0; i<n-1; i++)  for(j=0; j<n-i-1; j++)    swap(a[i][j],a[n-j-1][n-i-1]);
Оцініть статтю
Додати коментар