Двумерный массив (матрица) - данные, которые можно описать как таблицу, состоящую из строк и столбцов, в ячейках которой располагаются значения.
Для обращения к данным массива указывается номера их строк и столбцов.
Например:
А 4 5 1 8
Например:
А 4 5 1 8
7 8 0 6
3 2 1 0
Матрица содержит три строки и четыре столбца.
Матрица содержит три строки и четыре столбца.
Элемент матрицы со значением 6 имеет номер (2,4). Элемент матрицы со значением 2 имеет номер (3,2).
Важно! Для того, чтобы задать элемент необходимо указать имя матрицы, затем в квадратных скобках через запятую сначала будем указывать номер строки, а затем номер столбца: А[2,4], A[3,2].
Описание двумерного массива
1. Двумерные массивы описываются в разделе описаний var следующим образом:
var
имя : array [1..n, 1..m] of тип;
m, n - константы.
Пример:
const
m = 10; n = 5;
var
a: array [1..n, 1..m] of integer;
2. Можно задать массив в разделе описания типов:
typeимя : array [1..n, 1..m] of тип;
m, n - константы.
Пример:
const
m = 10; n = 5;
var
a: array [1..n, 1..m] of integer;
2. Можно задать массив в разделе описания типов:
имя_типа=array [1..n, 1..m] of тип;
var
имя: имя_типа;
m, n - константы.
Пример:
const
m = 10; n = 5;
type
matr = array [1..n, 1..m] of integer;
var
a: matr;
3. Можно описывать и так:
var
имя: array [1..n] of array [1..m] of тип;
m, n - константы.Пример:
В описании лучше сначала определить некоторый тип одномерного массива (строка двухмерного массива), который затем используется при описании двухмерного массива:
type a = array[1..10] of byte;
var b: array[1..100] of a;
4. Массив можно описать и как константу:
constconst
m = 10; n = 5;
type
matr = array [1..n, 1..m] of integer;
var
a: matr;
3. Можно описывать и так:
var
имя: array [1..n] of array [1..m] of тип;
m, n - константы.Пример:
В описании лучше сначала определить некоторый тип одномерного массива (строка двухмерного массива), который затем используется при описании двухмерного массива:
type a = array[1..10] of byte;
var b: array[1..100] of a;
4. Массив можно описать и как константу:
имя: array[1..n, 1:m] of тип=((элементы первой строки), (элементы второй строки), ..., (элементы последней строки));
Обычно подразумевают, что в интервале от 1 до n определяется количество строк, а в интервале от 1 до m – количество столбцов массива.
Пример:
a:array[1..2,1..3] of real=((2,5.6,-6),(-3,8.9,4.3));
Пример:
a:array[1..2,1..3] of real=((2,5.6,-6),(-3,8.9,4.3));
Обращение к элементу двумерного массива
Для обращения к элементу двухмерного массива необходимо указать имя массива и в квадратных скобках через запятую – значения двух индексов (первый указывает номер строки, а второй – номер столбца), на пересечение которых стоит элемент (например, a[2,1]:=6).
1. Ввод с клавиатуры:
readln(n,m);
for i:=1 to n do
for j:=1 to m do
read(a[i,j]);
end;
2. Ввод из файла:
assign(input,'input.txt');
reset(input);
readln(n,m);
for i:=1 to n do
for j:=1 to m do
read(a[i,j]);
close(input);
1. Вывод на экран:
for i:=1 to n do
begin
for j:=1 to m do
write(a[i,j],' ');
writeln;
end;
2. Вывод в файл:
assign(output,'output.txt');
rewrite(output);
for i:=1 to n do
begin
for j:=1 to m do
write(a[i,j],' ');
writeln;
end;
close(output);
Задание 1. Заполнить двумерный массив данными с клавиатуры, а затем вывести на экран в виде таблицы.
Посмотреть решение
2. Измените программу, чтобы считывание данных и вывод производились с использованием файлов.
3. Измените программу, чтобы считывание данных и вывод производились процедурами с использованием файлов.
Замечание (это важно!) Параметром процедуры может быть любая переменная предопределенного типа, это означает, что для передачи в процедуру массива в качестве параметра, тип его должен быть описан заранее.
Например :
Type
Mas=array [1..10, 1..10] of integer;
..............................
procedure primer (a: mas);
..............................
4. Измените программу, чтобы массив был заполнен 0 и 1 (нечетные строки 0, четные 1), вывод произвести в файл.
5. Измените программу, воспользовавшись квадратной матрицей, чтобы массив был заполнен 0 и 1 (1 располагались по главной диагонали, ниже и выше её - 0), вывод производился в файл.
6. Измените программу, воспользовавшись квадратной матрицей, чтобы массив был заполнен 0 и 1 (1 располагались по главной и побочной диагоналях, на остальных местах - 0), вывод производился в файл.
Задание 2. Заполните массив следующим образом: каждый элемент должен быть равен сумме его индексов.
Ввод элементов массива
1. Ввод с клавиатуры:
readln(n,m);
for i:=1 to n do
for j:=1 to m do
read(a[i,j]);
end;
2. Ввод из файла:
assign(input,'input.txt');
reset(input);
readln(n,m);
for i:=1 to n do
for j:=1 to m do
read(a[i,j]);
close(input);
Вывод элементов массива
for i:=1 to n do
begin
for j:=1 to m do
write(a[i,j],' ');
writeln;
end;
2. Вывод в файл:
assign(output,'output.txt');
rewrite(output);
for i:=1 to n do
begin
for j:=1 to m do
write(a[i,j],' ');
writeln;
end;
close(output);
Свойства матриц
- Если в матрице n=m (равное количество строк и столбцов), то матрица называется квадратной.
- Если номер строки элемента совпадает с номером столбца (i=j), то это значит, что элемент лежит на главной диагонали.
- Элемент лежит на побочной диагонали, если его индексы удовлетворяют равенству i+j=n+1.
- Элемент находится выше главной диагонали, если номер строки больше номера столбца (i>j).
- Элемент находится ниже главной диагонали, если номер строки меньше номера столбца (i<j).
- Элемент находится выше побочной диагонали, если i+j<n+1.
- Элемент находится ниже побочной диагонали, если i+j>n+1.
Задание 1. Заполнить двумерный массив данными с клавиатуры, а затем вывести на экран в виде таблицы.
Посмотреть решение
Экспериментальный раздел
1. Поменяйте строки заголовков циклов. Объясните результат.2. Измените программу, чтобы считывание данных и вывод производились с использованием файлов.
3. Измените программу, чтобы считывание данных и вывод производились процедурами с использованием файлов.
Замечание (это важно!) Параметром процедуры может быть любая переменная предопределенного типа, это означает, что для передачи в процедуру массива в качестве параметра, тип его должен быть описан заранее.
Например :
Type
Mas=array [1..10, 1..10] of integer;
..............................
procedure primer (a: mas);
..............................
4. Измените программу, чтобы массив был заполнен 0 и 1 (нечетные строки 0, четные 1), вывод произвести в файл.
5. Измените программу, воспользовавшись квадратной матрицей, чтобы массив был заполнен 0 и 1 (1 располагались по главной диагонали, ниже и выше её - 0), вывод производился в файл.
6. Измените программу, воспользовавшись квадратной матрицей, чтобы массив был заполнен 0 и 1 (1 располагались по главной и побочной диагоналях, на остальных местах - 0), вывод производился в файл.
Задание 2. Заполните массив следующим образом: каждый элемент должен быть равен сумме его индексов.
Посмотреть решение
Задание 3. Заполните массив натуральными числами, чтобы их размещение имело вид спирали.
1 2 3 4 5
14 15 16 17 6
13 20 19 18 7
12 11 10 9 8
Посмотреть решение
1. Найти произведение ненулевых элементов матрицы.
2. Дана матрица NхМ, состоящая из натуральных чисел. Найти в ней наименьший элемент и определить его местоположение. Если таких элементов несколько, то вывести на экран положение каждого из них.
3. Задан двухмерный массив чисел. Значение элементов матрицы формируются случайным образом. Вычислить суммы элементов главной диагонали.
Задание 3. Заполните массив натуральными числами, чтобы их размещение имело вид спирали.
1 2 3 4 5
14 15 16 17 6
13 20 19 18 7
12 11 10 9 8
Задания для самостоятельного решения
1. Найти произведение ненулевых элементов матрицы.2. Дана матрица NхМ, состоящая из натуральных чисел. Найти в ней наименьший элемент и определить его местоположение. Если таких элементов несколько, то вывести на экран положение каждого из них.
3. Задан двухмерный массив чисел. Значение элементов матрицы формируются случайным образом. Вычислить суммы элементов главной диагонали.