7. Перестановка блоков элементов матриц
В этом пункте задания необходимо найти соответствия между номерами строк и столбцов новой и преобразованной матриц, то есть закон, по которому переставляются элементы матрицы.
Пример 13. Получить матрицу Е, переставив блоки элементов матрицы D. Требуемые перестановки блоков матрицы D показаны на рисунке.
PROGRAM PR13;
VAR D, E : ARRAY [1..6, 1..6] OF REAL;
i, j : INTEGER;
BEGIN
{Ввести элементы матрицы D (способы задания матриц приведены в примерах 1, 2)}
E:=D;
FOR i:=3 TO 4 DO
FOR j:=5 TO 6 DO
E[i+2, j-2]:=D[i, j];
FOR i:=5 TO 6 DO
FOR j:=3 TO 4 DO
E[i-2, j+2]:=D[i, j];
{Вывод на экран матрицы E (см. примеры 3, 4)};
END.
Пояснения к программе: Сначала элементам матрицы E присваиваются соответствующие элементы матрицы D.
Рассмотрим элементы блока 1. Элемент D[3, 5] должен стать элементом E[5, 3]. То есть номер строки элемента D[3, 5] увеличивается на 2, а номер столбца уменьшается на 2.
Аналогичное изменение номеров строк и столбцов будет у элементов: D[3, 6] – E[5, 4];
D[4, 5] – E[6, 3];
D[4, 6] – E[6, 4].
Для перестановки данной группы элементов матрицы D в программе применяется вложенный цикл.
Теперь найдем закономерность для элементов блока 2 матрицы D. Элемент D[5, 3] должен стать элементом E[3, 5];
D[5, 4] – E[3, 6];
D[6, 3] – E[4, 5];
D[6, 4] – E[4, 6].
Нетрудно заметить, что номер строки матрицы D уменьшается на 2, а номер столбца увеличивается на 2.
Для перестановки этой группы элементов матрицы D в программе также используются вложенный цикл. Поскольку в данной программе выполняются однотипные действия, то можно описать процедуру, которая сократит программу. Рассмотрим пример.
Пример 14. Получить матрицу Е, переставив блоки элементов матрицы D. Требуемые перестановки блоков показаны на рисунке в примере 13. Решить задачу, используя процедуру.
PROGRAM PR14;
TYPE Mas = ARRAY [1..6, 1..6] OF REAL;
VAR D, E : Mas;
i, j : INTEGER;
PROCEDURE S (DS:Mas; i1,i2,j1,j2,is,js:INTEGER; VAR ES:Mas);
BEGIN
FOR i:=i1 TO i2 DO
FOR j:=j1 TO j2 DO
ES[i+is, j+js]:=DS[i, j];
END;
BEGIN
{Ввести элементы матрицы D (способы задания матриц приведены в примерах 1, 2)}
E:=D;
S(D, 3, 4, 5, 6, 2, -2, E);
S(D, 5, 6, 3, 4, -2, 2, E);
{Вывод на экран матрицы E (см. примеры 3, 4)};
END.
Пояснения к программе: Формальными параметрами процедуры S являются:
DS – переменная, определяющая имя исходной матрицы;
i1, i2 – номера строк переставляемого блока;
j1, j2 – номера столбцов переставляемого блока;
is, js – переменные, определяющие изменения номеров строк и столбцов матрицы;
ES – переменная, определяющая имя преобразованной матрицы.
Сначала элементам матрицы E присваиваются соответствующие элементы матрицы D. Затем дважды выполняется процедура S, но с различными значениями формальных параметров. При первом выполнении процедуры блок 1 переставляется на место блока 2, при втором – блок 2 на место блока 1.
Пример 15. Получить матрицу Е, переставив блоки элементов матрицы D. Требуемые перестановки блоков матрицы D показаны на рисунке.
PROGRAM PR15;
TYPE Mas =ARRAY [1..6, 1..6] OF REAL;
VAR E, D : Mas;
i, j : INTEGER;
PROCEDURE M (DS:Mas; i1,i2,j1,j2,is,js:INTEGER; VAR ES:Mas);
BEGIN
FOR i:=i1 TO i2 DO
FOR j:=j1 TO j2 DO
ES[i+is, j+js]:=DS[i, j];
END;
BEGIN
{Ввести элементы матрицы D (способы задания матриц приведены в примерах 1, 2)}
E:=D;
M (D, 1, 2, 1, 2, 0, 4, E);
M (D, 1, 2, 5, 6, 4, 0, E);
M (D, 5, 6, 5, 6, 0, -4, E);
M (D, 5, 6, 1, 2, -4, 0, E);
{Вывод на экран матрицы E (см. примеры 3, 4)};
END.
Пояснения к программе: Формальные параметры процедуры M аналогичны формальным параметрам процедуры S из примера 14.
Сначала элементам матрицы E присваиваются соответствующие элементы матрицы D. Затем для каждого переставляемого блока выполняется процедура M, но с различными значениями формальных параметров.