Страницы

Уроки 45, 46 Двумерный массив


Двумерный массив (матрица) - данные, которые можно описать как таблицу, состоящую из строк и столбцов, в ячейках которой располагаются значения. 

Для обращения к данным массива указывается номера их строк и столбцов.

Например:
 А     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 тип;
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. Массив можно описать и как константу:
const
имя: 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[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);



Свойства матриц


  • Если в матрице 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. Задан двухмерный массив чисел. Значение элементов матрицы формируются случайным образом. Вычислить суммы элементов главной диагонали.




Тест