Двумерные массивы и матрицы
💻 Информатика · 10 класс
Двумерный массив
Двумерный массив (матрица, таблица) — это структура, элементы которой расположены в виде прямоугольной таблицы из строк и столбцов. Каждый элемент задаётся двумя индексами: номером строки и номером столбца. Запись a[i][j] означает элемент, стоящий в строке i и столбце j.
Двумерные массивы применяют для хранения таблиц: матриц чисел, изображений (пиксели), игровых полей, расписаний. По сути это «массив массивов»: каждая строка сама является одномерным массивом.
Объявление и обход
Размер матрицы задают двумя числами: n строк и m столбцов. Для обхода всех элементов используют вложенные циклы: внешний — по строкам, внутренний — по столбцам.
for i in range(n):
for j in range(m):
обработать a[i][j]
Особые элементы матрицы
| Элементы | Условие на индексы |
|---|---|
| Главная диагональ | i == j |
| Побочная диагональ | i + j == n - 1 |
| Выше главной диагонали | i < j |
| Ниже главной диагонали | i > j |
Разбор примера
Вычислим сумму элементов главной диагонали квадратной матрицы размера n на n:
s = 0
for i in range(n):
s = s + a[i][i]
Поскольку у элементов диагонали номер строки совпадает с номером столбца, достаточно одного цикла и обращения a[i][i]. Для побочной диагонали обращались бы к a[i][n-1-i].
Где применяется
Матрицы встречаются в обработке изображений: чёрно-белая картинка — это таблица яркостей пикселей. Игровое поле в крестики-нолики или шахматах удобно хранить как двумерный массив. Транспортные и логические задачи часто сводятся к матрице связей между объектами.
Заполнение и ввод
Чтобы создать матрицу из нулей, в Python пишут вложенное выражение, а ввод выполняют двумя циклами:
a = [[0]*m for i in range(n)]
for i in range(n):
for j in range(m):
a[i][j] = int(input())
Важно создавать строки матрицы независимо: ошибочная запись [[0]*m]*n создаёт n ссылок на одну и ту же строку, и изменение одной ячейки меняет весь столбец.
Типичные задачи
На двумерных массивах решают: подсчёт суммы или максимума по каждой строке и каждому столбцу, поиск седловой точки, транспонирование (обмен строк и столбцов местами), подсчёт элементов с заданным свойством. Например, сумму элементов k-й строки находят так:
s = 0
for j in range(m):
s = s + a[k][j]
А чтобы найти сумму по каждому столбцу, внешний цикл идёт по столбцам, внутренний — по строкам. Понимание, какой индекс «бежит» первым, — ключ к правильному решению таких задач.
Частые ошибки. Путаница порядка индексов: первый — строка, второй — столбец. Обход прямоугольной матрицы как квадратной приводит к выходу за границу. Создание матрицы через[[0]*m]*nвместо списочного выражения. Помните: число столбцовmможет не равняться числу строкn.
Кратко о главном
- Двумерный массив хранит данные в виде таблицы строк и столбцов.
- Элемент задаётся двумя индексами:
a[i][j]. - Полный обход — вложенными циклами.
- Главная диагональ:
i == j, побочная:i + j == n - 1.