Многие из нас в детстве (и сейчас) играли(играют) в игру «Морской бой», но не компьютерный вариант, а бумажный. Полем боя был лист бумаги в клеточку, на котором рисовался квадрат 10 на 10 квадратиков. По вертикали писали числа 1..10, а по горизонтали — писали РЕСПУБЛИКА.
И для стрельбы по кораблям мы называли букву и цифру(координаты квадратика). Например: — Б4.
В старшей школе мы познакомились с Декартовой системой координат на плоскости, где точка задавалась именем и парой чисел-координат(X,Y). Для указания положения точки в пространстве мы писали А(2,2).
Всё выше названное и есть пример использования двухмерного массива, о чём мы тогда не и задумывались.
Массив — это набор однотипных данный, каждый элемент которого имеет свои координаты.
Другими словами, это набор однотипных данных, имеющий общее имя, доступ к элементам которого осуществляется по двум индексам. Наглядно двумерный массив удобно представлять в виде таблицы, в которой n строк и m столбцов, а под ячейкой таблицы, стоящей в i-й строке и j-м столбце понимают некоторый элемент массива А[i][j].
Несложно догадаться, что 3-мерный массив визуально можно представить в виде куба с ячейками (как вариант — кубик Рубика), где каждый элемент имеет вид А[i][j][k].</p>
А вот с большими размерностями возникают сложности с визуальным представлением, но математическая модель ясна.
Описание элементов двумерного массива (матрицы)
1 способ:
имя массива: array [кол-во строк, кол-во столбцов] of тип
где:
имя массива — идентификатор массива;
array — массив;
кол-во строк — количество строк в матрице;
кол-во столбцов — количество столбцов в матрице;
of тип — описание типа переменных в массиве (real, integer и т. д.)
Пример:
Массив А состоит из 4 столбцов и 3 строк, значение каждого элемента матрицы представляет собой вещественное число.
а : array [1..3,1..4] of real;
Массив В и С состоят из 3 строк и 3 столбцов, значение каждого элемента матрицы представляет собой целое число.
b, с : array [1..3,1..3] of integer;
Каждый элемент матрицы описывается, как A(i,j): ИмяМассива(строка, столбец)
где:
A(i,j) — значение элемента матрицы
А — имя матрицы
i — номер строки
j — номер столбца
Если в матрице количество строк равно количеству столбцов, то такая матрица называется квадратной, в противном случае прямоугольной.
Прямоугольная матрица
A(l,l) A(l,2) A(l,3) A(l,4)
A(2,l) A(2,2) A(2,3) A(2,4)
A(3,l) A(3,2) A(3,3) A(3,4)
Квадратная матрица
A(l,l) A(l,2) A(l,3)
A(2,l) A(2,2) A(2,3)
A(3,l) A(3,2) A(3,3)
Для удобства понимания материала все задачи будут разбиты на блоки
1. Ввод данных масcива.
2. Обработка согласно задачи.
3. Вывод результата.
Ввод — вывод значений элементов матрицы
Заполнение элементов матрицы с клавиатуры
1. Ввод с клавиатуры, вывод в столбик
const N = 3; var Matrix: array[1..N, 1..N] of real; j, i: integer; BEGIN {заполнение массива} for i := 1 to n do begin for j := 1 to n do begin write('Matrix[', i, ',', j, ']='); readln(Matrix[i, j]); end; end; {вывод массива} for i := 1 to n do begin for j := 1 to n do begin write('a(', i, ',', j, ')=', Matrix[i, j]:2:2, ' '); end; writeln; end; END.
2. Заполнение элементов матрицы по формуле
const N = 3; var Matrix: array[1..N, 1..N] of real; j, i: integer; BEGIN {заполнение массива} for i := 1 to n do begin for j := 1 to n do begin Matrix[i, j]:=sin(i*i)-i; end; end; {вывод массива} for i := 1 to n do begin for j := 1 to n do begin write('a(', i, ',', j, ')=', Matrix[i, j]:2:2, ' '); end; writeln; end; END.
3. Заполнение элементов матрицы случайными числами
const N = 3; var Matrix: array[1..N, 1..N] of real; j, i: integer; BEGIN randomize; {заполнение массива} for i := 1 to n do begin for j := 1 to n do begin Matrix[i, j]:=random(15); end; end; {вывод массива} for i := 1 to n do begin for j := 1 to n do begin write('a(', i, ',', j, ')=', Matrix[i, j]:2:2, ' '); end; writeln; end; END.
Вывод двумерного массива Паскаля на экран.
Вывод элементов двумерного массива Паскаля также осуществляется последовательно, необходимо напечатать элементы каждой строки и каждого столбца. При этом хотелось бы, чтобы
элементы, стоящие в одной строке, печатались рядом, т.е. в строку, а элементы столбца располагались один под другим. Для этого необходимо выполнить следующую последовательность действий (рассмотрим фрагмент программы для массива, описанного в предыдущем примере):
Пример программы вывода двумерного массива Паскаля
for i :=1 to 5 do {перебор строк} begin for j :=1 to 10 do {перебор столбцов} begin write ( a [ i , j ]:4); {печать элементов, стоящих в i -й строке матрицы в одной экранной строке, при этом для вывода каждого элемента отводится 4 позиции} end; writeln ; {прежде, чем сменить номер строки в матрице, переход на новую строку} end ;
Важно! Часто в программах встречается ошибка, когда ввод с клавиатуры или вывод на экран массива пытаются осуществить следующим образом: readln (A), writeln (A), где A – это массив. Что бы понять, почему нельзя так делать, представьте N кружек, стоящих в ряд, а у вас в руках -чайник с водой. Сможете ли вы по команде «налей воду» наполнить одновременно все кружки сразу? Врят ли получится. В каждую кружку придется наливать отдельно. Заполнение и вывод на экран элементов массива также должно осуществляться последовательно и поэлементно, т.к. в памяти компьютера элементы массива располагаются в последовательных ячейках.
Соотношение индексов в квадратной матрице
i=j элементы матрицы находятся на главной диагонали
i > j элементы матрицы находятся над главной диагональю
i < j элементы матрицы находятся под главной диагональю
i+j=n+1 элементы матрицы находятся на побочной диагонали
i+j<n+1 элементы матрицы находятся над побочной диагональю
i+j>n+1 элементы матрицы находятся под побочной диагональю