12 Двовимірні масиви (матриці) - inf - w
Поняття двовимірного масиву
Двовимірний масив структура даних, що зберігає прямокутну таблицю (матрицю) виду:
Строго кажучи, в С ++ немає структури даних - багатовимірний масив. Багатовимірний масив, зокрема, двовимірний масив, повинен розглядатися як масив масивів. У зв'язку з цим, можна сказати, що двовимірний масив використовується лише для більш наочного уявлення роботи з даними (а зовсім не для збільшення ефективності роботи програми) і в реальному житті можна цілком обійтися одновимірним масивом. Як це зробити показано нижче.
Опис двовимірного С-масиву
Опис двовимірного масиву відрізняється від опису лінійного масиву тим, що вказуються дві розмірності, кожна з яких укладена в []:
Це опис означає, що оголошений цілочисельний масив mas містить 4 елементи, кожен з яких містить 6 елементів. Прийнято вважати, що перша розмірність визначає рядки, а друга - стовпці. Таким чином, ми оголосили двовимірний масив складається з 4 рядків і 6 стовпців.
Ініціалізація двовимірного C-масиву
Оскільки ми маємо справу з масивом масивів, то ініціалізація проводиться за допомогою вкладених <> як показано в прикладі нижче:
Якщо потрібно форматувати двовимірний масив нульових елементів, то слід чинити так:
Введення і виведення двовимірного С-масиву
Для організації введення значень елементів двовимірного С-масиву, а також для їх виведення використовується структура вкладених циклів (зазвичай for). У зовнішньому циклі (зазвичай з параметром i) здійснюється перебір рядків, тоді як у вкладеному циклі здійснюється перебір елементів поточного рядка (т. Е. Проходимо по стовпцях).
Програма 12.1 Заповнення масиву випадковими числами і висновок.
Програма виведе наступне:
Опис і ініціалізація двовимірного масиву array
Опис об'єкта array як двовимірний масив складається з 7 рядків і 5 стовпців виглядає наступним чином:
вираз array
програма 12.2
Одновимірна масив як двовимірний
Як ми вже сказали, необов'язково застосовувати масив масивів для роботи з двовимірними масивами, так як це може привести до неефективного алгоритму. Для цих цілей можна використовувати одновимірний масив. Для цього потрібно зробити наступне. Оголосимо дві константи row і col для визначення кількість рядків і стовпців. Далі в програмі можна обробляти елементи масиву, наприклад, так:
програма 12.3
Властивості діагоналей матриці
Матриця, в якої кількість рядків і стовпців однаково, називається - квадратної.
Елементи мають рівні індекси (i == j) знаходяться на головній діагоналі. Якщо елемент лежить на побічної діагоналі. то індекси пов'язані з розмірністю (n) наступним рівністю: i + j == n + 2.
Від позиції елемента буде залежати ставлення індексів. Якщо елемент лежить вище головної діагоналі, тоді i. В іншому випадку, i> j. Якщо елемент лежить вище побічної діагоналі, то i + j + 2. в іншому випадку i + j + 2> n. Однак, при вирішенні задач обходу матриці, необхідно уникати (там, де це можливо) застосування умовної інструкції if. Найчастіше, завдання можна реалізувати більш раціонально, шляхом маніпуляції індексами (інакше, змінними циклу i і j). Тобто, поставити в залежність зміна одного індексу, від величини іншого. Приклад завдання.
Програма 12.4 Дана квадратна матриця розміру n, елементи якої рівні 0. Заповнити елементи, що лежать нижче і на самій головній діагоналі одиницями.
Скласти програму заповнення масиву числами трикутника Паскаля і виведення цього масиву.
Примітка. Трикутник Паскаля має вигляд:
У цьому трикутнику на вершині і з боків стоять одиниці (в програмі 3 трикутник "покладено на бік" - сторони трикутника: перший стовпець і головна діагональ). Кожне число дорівнює сумі двох розташованих над ним чисел. Рядки трикутника симетричні щодо вертикальної осі.
програма 12.5
1. Що являє собою двовимірний масив в C ++?
2. Перелічіть способи заповнення двовимірного масиву даними.
3. Який масив називається квадратною матрицею?
4. Що потрібно враховувати при виведенні двовимірного масиву?
5. Що таке головна і побічна діагональ матриці?
1. Дано цілі додатні числа M і N. Сформувати целочисленную матрицю розміру M × N. у якій всі елементи I -й рядки мають значення 10 · I (I = 1, ..., M).
2. Дано цілі додатні числа M. N і набір з N чисел. Сформувати матрицю розміру M × N. у якій в кожному рядку містяться всі числа з вихідного набору (в тому ж порядку).
3. Дано цілі додатні числа M. N. число D і набір з M чисел. Сформувати матрицю розміру M × N. у якій перший стовпець збігається з вихідним набором чисел, а елементи кожного наступного стовпця дорівнюють сумі відповідного елемента попереднього стовпчика і числа D (в результаті кожен рядок матриці буде містити елементи арифметичної прогресії).
[/ Su_list]