Двумерные массивы
Одномерный массив можно
представить как линейную структуру, в которой элементы следуют друг за другом.
Однако бывают более сложные структуры данных. Например, двумерные массивы,
которые можно описать как таблицу, в ячейках которой располагаются значения.
Для обращения к данным массива указывается номера их строк и столбцов. Часто
табличные массивы называют матрицами.
Обычно двумерные
массивы на языке программирования Pascal описываются так:
array [1..m, 1..n] of базовый_тип
Однако можно их
описывать и по-другому:
array [1..m] of array [1..n] of базовый_тип
При этом описание может
быть в разделе type
и тогда создается новый тип, который можно использовать при объявлении
переменных. Или массив может быть описан непосредственно в разделе переменных. m и n – это константы, их можно опустить
и вставить конкретные значения, но лучше так не делать. Обычно подразумевают,
что в интервале от 1 до m
определяется количество строк, а в интервале от 1 до n – количество столбцов массива.
1 вариант – описание
массива через раздел type:
const
M = 10;
N = 5;
type
matrix = array [1..M, 1..N] of integer;
var
a: matrix;
2 вариант – описание
массива в разделе переменных:
const
M = 10;
N = 5;
var
a: array [1..M, 1..N] of integer;
При использовании
третьего варианта описания лучше сначала определить некоторый тип одномерного
массива (строка двухмерного массива), который затем используется при описании
двухмерного массива:
type a = array[1..10] of
byte;
var b: array[1..100] of a;
Для обращения к
элементу двухмерного массива необходимо указать имя массива и в квадратных
скобках через запятую – значения двух индексов (первый указывает номер строки,
а второй – номер столбца), на пересечение которых стоит элемент (например, a[i,2]:=6). В языке программирования Pascal допустимо разделение индексов с
помощью квадратных скобок (например, a[i][5]:= 7).
Если описывается
двумерный массив как типизированная константа, то при задании значений его
элементов он рассматривается как массив массивов. При этом в общих круглых
скобках через запятую перечисляются заключенные в круглые скобки значения
элементов строк (каждая строка в своих скобках):
type
arr = array[1..4, 1..3] of integer;
const
cords: arr = ((1,-1,3),
(0,0,0), (1,4,0), (4,-1,-1));
Рассмотрим простой
пример работы с двумерным массивом. Сначала заполним его данными, а затем
выведем их на экран в виде таблицы.
var
matrix: array[1..3,1..5] of integer;
i, j: integer;
begin
writeln ('Введите 15 чисел: ');
for
i := 1 to 3 do
for j := 1 to 5 do
read (matrix[i,j]);
for
i := 1 to 3 do begin
for j := 1 to 5 do
write (matrix[i,j], ' ');
writeln
end;
readln
end.
Размерность массива
(т.е. количество содержащихся в нем значений) определяется произведением
количества строк на количество столбцов. В примере выше в массив помещается 15
значений.
Когда пользователь
вводит очередное число, то процедура read считывает его и помещает в ячейку с текущими
индексами i
и j.
Когда i
равна единице, значение j
меняется пять раз, и, значит, заполняется первая строка таблицы. Когда i равна двум, значение j снова меняется пять раз и
заполняется вторая строка таблицы. Аналогично заполняется третья строка
таблицы. Внутренний цикл for
в общей сложности совершает 15 итераций, внешний только 3.
Как пользователь вводит
значения – не важно. Он может их разделять либо пробелом, либо переходом на
новую строку.
Вывод значений двумерного массива организован в виде таблицы. Выводятся 3 строки по 5 чисел в каждой. Внутри строк числа разделяются пробелом.
На самом деле, это не
совсем корректно написанная программа. Мы несколько раз используем цифры 3 и 5.
А что если мы захотим поменять размерность массива? Придется просмотреть всю
программу (представьте, что она очень большая) и исправить значения. Это
неэффективно. Поэтому в программе следует использовать константы. В случае чего
их значения можно поменять всего лишь в одном месте.
Вторая проблема – это
«кривость» выводимой на экран таблицы значений матрицы, в случае если есть
значения разной разрядности (однозначное, двузначное и т.д. числа). Неплохо бы
под каждое число отводить равное количество знаков.
Вот так может выглядеть
подправленный вариант программы:
const
M = 3;
N = 5;
var
matrix: array[1..M,1..N] of integer;
i, j: integer;
begin
writeln ('Введите 15 чисел: ');
for i := 1 to M do
for j := 1 to N do
read (matrix[i,j]);
for i := 1 to M do begin
for j := 1 to N do
write (matrix[i,j]:5);
writeln
end;
readln
end.
Здесь представлены комментарии некоторых спортивных состязаний, а также оценка вопросов, сыгранных в телевизионных клубах "Что? Где? Когда?" России и Беларуси. Особое внимание будет уделено игровым видам спорта (футбол, хоккей). Найдут для себя полезное и любители шахмат и шахматной композиции.
Здесь представлены лучшие, на наш взгляд, книги по математике, физике, астрономии, информатике, и некоторым другим предметам. Также предлагается подборка научно-популярной литературы и книг по интеллектуальным играм. Здесь указаны ссылки, по которым Вы можете их скачать.