"Информатика", Поляков К.Ю., Еремин Е.А.
Матрица, или двумерный массив, хранит данные в строках и столбцах — так же, как они расположены в таблице. Она подходит для оценок по предметам, клеток игрового поля и других наборов, где важны сразу два признака. Чтобы обратиться к отдельному значению, указывают номер его строки и номер столбца. Размер матрицы задают количеством строк и столбцов, а для просмотра всех её элементов обычно используют два вложенных цикла.
Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.
Двумерный массив, или матрица, — упорядоченный набор элементов, расположенных по строкам и столбцам. В одномерном массиве элементы выстроены только в одну последовательность, а в матрице у каждого значения есть положение в двух направлениях. Такое устройство удобно, когда данные уже имеют форму таблицы и важно быстро найти нужную ячейку.
Строка матрицы — последовательность элементов с одинаковым первым индексом. Например, все значения первой строки имеют один и тот же номер строки, а их номера столбцов различаются. Обращение к строке помогает обработать связанные данные, например все оценки одного ученика.
Столбец матрицы — последовательность элементов с одинаковым вторым индексом. В отличие от строки, он идёт сверху вниз, а не слева направо: номер столбца сохраняется, а номера строк меняются. Это удобно, если нужно собрать значения одного признака, например оценки по одному предмету.
Элемент матрицы — отдельное значение, положение которого задают двумя индексами: номером строки и номером столбца. Запись a₂,₃ означает элемент второй строки и третьего столбца. Такая пара индексов позволяет однозначно указать ячейку, если она входит в границы матрицы.
Двумерный массив выбирают для данных, которым естественно соответствуют две координаты. В таблице оценок одна координата может обозначать ученика, а другая — предмет; на игровом поле координаты указывают номер строки и клетки. Благодаря такому устройству связанные значения хранятся вместе, и их проще находить и обрабатывать, чем в длинном списке без видимой структуры.
Чтобы получить элемент матрицы, указывают сначала строку, а затем столбец. Порядок нужен потому, что одной координаты недостаточно: номер третьей строки сам по себе не говорит, какую ячейку в ней выбрать. Например, обращение к элементу второй строки и третьего столбца отличается от обращения к третьей строке и второму столбцу. Перестановка индексов может привести к другому значению.
В программе матрицу часто представляют как набор строк, где каждая строка сама содержит последовательность элементов. Тогда доступ к ячейке можно понимать как два шага: сначала выбрать нужную строку, затем взять элемент с нужным номером внутри неё. Такая модель объясняет запись с двумя индексами и помогает разбирать вложенные циклы. Конкретный вид записи зависит от языка программирования.
Размер матрицы задают двумя числами: количеством строк и количеством столбцов. Их произведение показывает, сколько ячеек в матрице, если во всех строках одинаковое число элементов. Размер также ограничивает допустимые индексы: нельзя выбрать строку или столбец, которого нет. Начальное значение индексов определяет язык программирования, поэтому его правила нужно учитывать отдельно.
Для обработки всей матрицы используют вложенные циклы, то есть цикл внутри другого цикла. Внешний цикл выбирает очередную строку, а внутренний проходит по её элементам; после этого внешний цикл переходит к следующей строке. Так получается систематический обход всех ячеек без пропусков. Меняя действия внутри цикла, можно, например, вывести значения или найти сумму.
В таблице собраны основные характеристики матрицы и их применение в программе. В записи элемента помните порядок: сначала строка, затем столбец. Сверяйте допустимые индексы с размером матрицы и правилами языка.
| Характеристика | Что обозначает | Как используется в программе |
|---|---|---|
| Число строк | Количество горизонтальных последовательностей элементов | Определяет, сколько строк нужно перебрать и какие индексы строк допустимы |
| Число столбцов | Количество вертикальных последовательностей элементов | Определяет длину строки и границы индексов столбцов |
| Индексы элемента | Номер строки и номер столбца | Указываются в порядке «строка, затем столбец» |
| Обращение к элементу | Выбор одного значения по двум индексам | Сначала выбирают строку, затем элемент в ней |
| Перебор всех элементов | Последовательный просмотр каждой ячейки | Выполняется вложенными циклами по строкам и столбцам |
Дана матрица из двух строк и трёх столбцов. Нужно указать элемент второй строки и третьего столбца. Значения ячеек не приведены, поэтому определить число нельзя, но можно точно обозначить нужную ячейку. Сначала проверим, что такая строка и такой столбец существуют.
Ответ: искомый элемент — a₂,₃, то есть значение на пересечении второй строки и третьего столбца. Если в программе индексация начинается с нуля, запись и номера индексов будут зависеть от правил языка. Перед обращением нужно проверить именно принятую в программе нумерацию.
Дана таблица оценок учеников по нескольким предметам, требуется вывести значения по строкам. Будем считать, что одна строка содержит оценки одного ученика, а столбцы соответствуют предметам. Чтобы сохранить порядок таблицы, сначала полностью выводим одну строку, затем переходим к следующей. Для этого нужны два цикла.
Ответ: внешний цикл отвечает за учеников, внутренний — за оценки по предметам. Каждый элемент будет выведен один раз, а оценки одного ученика останутся в одной строке вывода. Если в таблице строки обозначают не учеников, а другой объект, смысл вывода будет соответствующим.
Дана матрица целых чисел, нужно найти сумму элементов в заданном столбце. Все нужные значения стоят в одном столбце, но в разных строках. Поэтому индекс столбца нужно оставить неизменным, а индекс строки менять. Сумму будем накапливать в отдельной переменной.
Ответ: сумма равна результату сложения всех элементов выбранного столбца. Перед циклом следует проверить, что заданный столбец есть в матрице. Если поменять индексы местами, программа будет складывать значения из строки, а не из нужного столбца.
Путают индексы строки и столбца. Тогда программа обращается к другой ячейке, поскольку координаты переставлены местами. Ошибку легко допустить, если не помнить порядок индексов. Для проверки проговорите адрес как «строка, затем столбец» и найдите ячейку в таблице.
Выходят за границы матрицы. Например, указывают номер строки, которой нет, или номер столбца больше их количества. Это происходит, когда забывают размер массива или особенности нумерации в языке. Сверьте каждый индекс с допустимыми значениями: они зависят от размера и того, начинается ли отсчёт с нуля или единицы.
Пытаются перебрать матрицу одним циклом. Один цикл обычно меняет только один индекс, поэтому часть элементов может остаться без обработки. Причина — матрицу принимают за обычную последовательность. Проверьте алгоритм на небольшой таблице: для посещения каждой ячейки должны меняться оба индекса, что удобно организовать двумя вложенными циклами.
Считают, что все строки обязательно одинаковой длины. Это верно для прямоугольной матрицы, но не обязательно для представления в виде списков списков: отдельные строки могут содержать разное число элементов. Такое предположение часто переносят с таблиц на любую структуру данных. Проверьте, как устроено представление в выбранном языке, и при переборе учитывайте длину конкретной строки.
Чтобы изучать двумерные массивы, нужно знать одномерные массивы, индексы элементов и циклы: матрица расширяет привычную последовательность данных до двух измерений. Вложенные циклы позволяют применять эти знания к каждой ячейке таблицы. Матрицы используют для таблиц данных и игровых полей, а также при работе с изображениями, где значения связаны с пикселями, и в алгоритмах обработки графов.
Чем двумерный массив отличается от одномерного?
В одномерном массиве элементы образуют одну последовательность, и для обращения к элементу нужен один индекс. В двумерном массиве данные расположены по строкам и столбцам, поэтому нужны два индекса.
Почему для обращения к элементу матрицы нужны два индекса?
Первый индекс указывает строку, а второй — столбец. Вместе они задают положение ячейки, подобно адресу в таблице.
Как определить, какой индекс отвечает за строку, а какой за столбец?
В принятой здесь записи сначала указывают индекс строки, затем индекс столбца. Например, a₂,₃ — элемент второй строки и третьего столбца.
Как перебрать все элементы двумерного массива?
Используют два вложенных цикла: внешний перебирает строки, а внутренний — столбцы или элементы текущей строки. Так цикл обращается к каждой ячейке.
Что произойдёт, если обратиться к элементу за границами матрицы?
Такой индекс недопустим: он не соответствует ни одной ячейке матрицы. В зависимости от языка программа может сообщить об ошибке или повести себя непредсказуемо, поэтому индексы нужно проверять.
§ 21. Матрицы (двумерные массивы)