"Информатика (в 2-х частях)", Горячев А.В., Островский С.Л., Паволоцкий А.В., Семёнов А.А., Чернышёва Т.Л., Широков Д.В.
Двумерный массив хранит однотипные данные в строках и столбцах, поэтому подходит для таблиц, игровых полей и других объектов с двумя координатами. Его элемент находят по двум индексам: первый указывает строку, второй — столбец. Размер массива задают двумя числами, а для перебора всех ячеек обычно используют вложенные циклы. Разобравшись с порядком индексов и границами циклов, можно вводить матрицу, выводить её и вычислять суммы по строкам или столбцам.
Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.
Двумерный массив — набор однотипных элементов, расположенных в строках и столбцах. В отличие от одномерного массива, который похож на одну линию значений, двумерный напоминает таблицу. Такая организация нужна, когда данные имеют два направления: например, номер ученика и номер предмета.
Матрица — прямоугольная таблица чисел или других однотипных данных. В математике матрицу рассматривают как таблицу элементов, а в программе её удобно представить двумерным массивом. Поэтому при работе с данными слова «матрица» и «двумерный массив» часто обозначают близкие по устройству объекты.
Элемент двумерного массива — значение в ячейке на пересечении строки и столбца. Чтобы указать его, записывают два индекса: первый задаёт строку, второй — столбец, например A[2, 3]. Два номера позволяют точно найти значение, как координаты помогают указать место на карте.
Размерность матрицы — число её строк и число её столбцов. Если у матрицы три строки и четыре столбца, её размер задают числами 3 и 4, а всего в ней 12 элементов. Эти числа определяют, сколько значений хранится в каждом направлении и какие индексы допустимы.
Для элемента нужны два индекса, потому что одного номера недостаточно, чтобы указать ячейку в таблице. Например, в третьем столбце есть отдельные элементы в каждой строке, а в первой строке — элементы в разных столбцах. Пара индексов однозначно задаёт положение: сначала строка, затем столбец.
Доступ к значению записывают с обоими индексами, например A[i, j]. Здесь i отвечает за строку, а j — за столбец, поэтому перестановка индексов может привести к другой ячейке. Представьте, что в таблице расписания вы поменяли местами номер дня и номер урока: найденное значение уже будет относиться к другому месту.
Чтобы обработать всю матрицу, нужно перебрать и каждую строку, и каждый столбец внутри неё. Поэтому используют вложенные циклы: внешний выбирает строку, а внутренний проходит по её столбцам. Когда внутренний цикл заканчивается, внешний переходит к следующей строке; так последовательно достигается каждая ячейка.
Для обработки одной строки её номер оставляют неизменным, а цикл меняет номер столбца. Для одного столбца поступают наоборот: фиксируют его номер и перебирают строки. Фиксация одного индекса нужна, чтобы цикл не уходил в соседние строки или столбцы, если задача относится только к выбранной части таблицы.
Размеры массива задают границы перебора: число строк определяет диапазон индекса строки, а число столбцов — диапазон индекса столбца. Если поменять эти границы местами, часть элементов может остаться без обработки или программа обратится к несуществующей ячейке. При вводе, вычислениях и выводе нужно охватить все требуемые элементы, учитывая также принятую в языке нумерацию индексов.
| Что рассматриваем | Как задать или найти | Для чего используется |
|---|---|---|
| Положение элемента | Два индекса: строка, затем столбец | Чтобы обратиться к конкретной ячейке |
| Число строк и столбцов | Два размера: сначала число строк, затем столбцов | Чтобы задать структуру и границы индексов |
| Перебор всех элементов | Внешний цикл по строкам, внутренний — по столбцам | Чтобы обработать всю матрицу |
| Обработка строки | Зафиксировать строку, перебирать столбцы | Чтобы вычислить или изменить данные выбранной строки |
| Обработка столбца | Зафиксировать столбец, перебирать строки | Чтобы вычислить или изменить данные выбранного столбца |
Сначала найдите, какую часть матрицы нужно обработать, затем определите, какой индекс будет постоянным, а какой будет меняться. Для всей матрицы меняются оба индекса, поэтому нужны два вложенных цикла. Перед запуском проверьте, что границы каждого цикла соответствуют своему размеру.
Задача 1. Дана матрица из 3 строк и 4 столбцов. Запишите, какими двумя индексами обозначается элемент на пересечении второй строки и третьего столбца. Предположим, что индексация начинается с единицы и используется запись A[строка, столбец]. Нужно определить порядок координат, а не вычислять значение элемента.
Ответ: элемент обозначается A[2, 3].
Задача 2. Нужно ввести матрицу заданного размера и вывести значения в виде таблицы, сохранив расположение по строкам и столбцам. Пусть число строк равно m, а число столбцов — n. Чтобы не смешать данные, сначала полностью вводим одну строку, затем переходим к следующей; при выводе используем тот же порядок.
Ответ: два вложенных цикла вводят и выводят все m × n элементов, а переход на новую строку после каждого ряда сохраняет табличное расположение.
Задача 3. Для заданной матрицы нужно найти сумму элементов каждой строки и вывести полученные суммы. Поскольку суммы независимы, для каждой строки следует начать новое накопление, а затем прибавить к нему значения всех столбцов этой строки. Пусть матрица имеет m строк и n столбцов.
Ответ: для каждой из m строк выводится отдельная сумма, полученная перебором n элементов этой строки.
Первая ошибка — принять первый индекс за номер столбца. Её допускают, потому что в записи встречаются два равноправных числа, но их порядок имеет смысл. Проверьте себя: прочитайте индексы словами как «сначала строка, затем столбец» и сопоставьте каждый с условием задачи.
Вторая ошибка — использовать один цикл для всей матрицы, словно достаточно менять только один индекс. Тогда программа проходит лишь один ряд или один столбец и пропускает остальные элементы. Проверьте число обработанных ячеек: у матрицы с m строками и n столбцами их должно быть m × n.
Третья ошибка — использовать число строк как границу цикла по столбцам или наоборот. Так делают, когда воспринимают размеры как одно общее число, хотя ширина и высота матрицы могут различаться. Сверьте каждую переменную цикла с её направлением: индекс строки ограничен числом строк, индекс столбца — числом столбцов.
Четвёртая ошибка — выйти индексом за границы массива, например начать перебор с неверного номера или завершить его на лишнем значении. Причина часто в том, что забывают принятую в языке нумерацию. Перед запуском проверьте минимальный и максимальный индексы и убедитесь, что каждый лежит в допустимом диапазоне.
Для освоения двумерных массивов нужно знать устройство одномерного массива, обозначение его элементов и перебор циклом. Это помогает понять, что матрица состоит из последовательностей значений, собранных в строки, а к каждой ячейке добавляется координата столбца. Умение работать с одним индексом становится основой для работы с парой индексов.
Матрицы подходят для представления таблиц, игровых полей и любых данных, которым нужны две координаты. Например, положение клетки на поле задают номером строки и номером столбца, а таблицу результатов можно хранить так, чтобы строки и столбцы отвечали за разные признаки. Такой способ организации делает связь между данными и их местом наглядной.
Двумерные массивы понадобятся при изучении алгоритмов обработки таблиц: поиска элементов, вычисления сумм и преобразования строк или столбцов. В этих задачах важно правильно выбрать направление перебора и следить за границами. Те же приёмы вложенных циклов помогают решать более сложные задачи, где требуется проверить или изменить каждую ячейку.
Чем двумерный массив отличается от одномерного?
В одномерном массиве элементы расположены в последовательности и для обращения к элементу достаточно одного индекса. В двумерном они организованы в строки и столбцы, поэтому нужны два индекса.
Как понять, какой индекс обозначает строку, а какой — столбец?
В принятой здесь записи первый индекс указывает номер строки, а второй — номер столбца. Например, A[2, 3] — элемент второй строки и третьего столбца; в конкретном языке программирования проверьте принятую там запись.
Почему для перебора всей матрицы нужны вложенные циклы?
Один цикл выбирает очередную строку, а вложенный в него цикл проходит по столбцам этой строки. Так посещается каждая пара индексов, то есть каждая ячейка матрицы.
Как обработать только одну строку или один столбец?
Для одной строки зафиксируйте её индекс, а циклом меняйте индекс столбца. Для одного столбца, наоборот, зафиксируйте номер столбца и перебирайте номера строк.
Как не выйти за границы двумерного массива?
Узнайте число строк и столбцов и перебирайте каждый индекс только в допустимом для него диапазоне. Не путайте размеры по двум направлениям и учитывайте, с какого числа начинается индексация в используемом языке.
§ 7. Двумерные массивы (матрицы)