← Повернутися до лекцій

Лекція 7: Двовимірні масиви (Матриці)

1. Що таке двовимірний масив?

Двовимірний масив — це масив масивів.

Двовимірний масив має два виміри: рядки (rows) та стовпці (columns).

Щоб звернутися до елемента, потрібно знати дві координати: номер рядка і номер стовпця.

Уявіть квиток у кіно: Ряд 5, Місце 12.

2. Оголошення та ініціалізація

Синтаксис схожий на звичайний масив, але додається друга пара квадратних дужок.

Загальний синтаксис: тип ім'я[кількість_рядків][кількість_стовпців];

int matrix[3][4]; // Таблиця: 3 рядки, 4 стовпці (всього 12 комірок)

Ініціалізація одразу при створенні: Ми можемо заповнити масив як набір рядків (у фігурних дужках):

int grid[2][3] = {
    {1, 2, 3}, // Рядок 0
    {4, 5, 6}  // Рядок 1
};

3. Індексація

Нумерація починається з 0.

  • grid[0][0] — верхній лівий кут (число 1).
  • grid[1][2] — другий рядок, третій елемент (число 6).

Важливо: Перший індекс — завжди рядок (вниз), другий — стовпець (вправо).

4. Вкладені цикли

Це найскладніший момент для початківців.

Щоб перебрати всі елементи таблиці, одного циклу недостатньо. Потрібен цикл всередині циклу.

  1. Зовнішній цикл перемикає рядки (i).
  2. Внутрішній цикл проходить по всіх стовпцях (j) поточного рядка.

Приклад: Виведення масиву на екран у вигляді таблиці

#include <iostream>
using namespace std;

int main() {
    // Створюємо масив 3х3
    int map[3][3] = {
        {1, 0, 0},
        {0, 1, 0},
        {0, 0, 1}
    };
    
    cout << "Матриця: " << endl;
    
    // Зовнішній цикл: йдемо по рядках (від 0 до 2)
    for (int i = 0; i < 3; i++) {
        // Внутрішній цикл: йдемо по стовпцях (від 0 до 2)
        for (int j = 0; j < 3; j++) {
            cout << map[i][j] << " "; // Виводимо елемент і пробіл
        }
        cout << endl; // Коли внутрішній цикл завершив рядок, переходимо на новий
    }
    
    return 0;
}

5. Заповнення масиву користувачем

Тут логіка така сама: два цикли, але замість cout використовуємо cin.

#include <iostream>
using namespace std;

int main() {
    const int ROWS = 2;
    const int COLS = 2;
    int warehouse[ROWS][COLS];

    cout << "Заповніть склад (2х2):" << endl;
    for (int i = 0; i < ROWS; i++) {
        for (int j = 0; j < COLS; j++) {
            cout << "Рядок " << i << ", Місце " << j << ": ";
            cin >> warehouse[i][j];
        }
    }
    
    return 0;
}

Практичні завдання до Лекції 7

Виконайте ці завдання в своєму середовищі розробки.

Завдання 1: Таблиця множення

Створіть двовимірний масив розміром 10x10. За допомогою двох циклів заповніть його значеннями таблиці множення.

  • У комірку table[i][j] треба записати результат множення (i + 1) * (j + 1).
  • Потім виведіть цю таблицю на екран рівними рядочками.
  • Результат має виглядати як справжня таблиця Піфагора.

Завдання 2: Морський бій (спрощена версія)

Створіть поле 5х5 (масив bool або int), заповнене нулями (вода).

  1. "Поставте" кораблик в одну клітинку (наприклад, запишіть туди 1), не кажучи користувачеві куди.
  2. Попросіть користувача ввести координати пострілу (рядок і стовпець).
  3. Перевірте: якщо в цій комірці 1 — напишіть "Влучив!", якщо 0 — "Мимо!".

Завдання 3: Інверсія кольорів (Негатив)

Уявіть, що чорно-біле зображення — це таблиця чисел, де 0 — чорний, а 255 — білий.

  1. Створіть масив 3х3 з довільними числами від 0 до 255.
  2. Напишіть програму, яка перетворює зображення на негатив: кожне число x замінюється на 255 - x.
  3. Виведіть оновлену матрицю.