Тема "Перебор элементов матрицы"
Главная и побочная диагональ при работе с двумерными матрицами в Pascal
Главная диагональ квадратной матрицы n x n (т.е. той, у которой количество строк равно количеству столбцов) проходит с верхнего левого угла матрицы (элемент 1,1) до правого нижнего угла матрицы (элемент n,n).
Побочная диагональ квадратной матрицы n x n проходит с нижнего левого угла матрицы (элемент n,1) до правого верхнего угла матрицы (элемент 1,n).
Формулу поиска элементов диагоналей проще всего искать, нарисовав элементы матрицы:
Учитывая, что первая цифра будет соответствовать счетчику i, а вторая — счетчику j, то из таблицы можно вывести формулы:
Главная диагональ матрицы имеет формулу: i=j
Побочная диагональ матрицы имеет формулу: n=i+j-1 (или j=n-i+1)
где n — размерность квадратной матрицы
[spoiler]
Задания на урок:
«A»: Напишите программу, которая заполняет квадратную матрицу случайными числами в интервале [10,99], а затем записывает нули во все элементы выше главной диагонали. Алгоритм не должен изменяться при изменении размеров матрицы.
Пример:
Матрица А: 12 14 67 45 32 87 45 63 69 45 14 30 40 12 35 65 Результат: 12 0 0 0 32 87 0 0 69 45 14 0 40 12 35 65 |
«B»: Пиксели рисунка закодированы числами (обозначающими цвет) в виде матрицы, содержащей N строк и M столбцов. Выполните отражение рисунка сверху вниз:
«С»: Пиксели рисунка закодированы числами (обозначающими цвет) в виде матрицы, содержащей N строк и M столбцов. Выполните поворот рисунка вправо на 90 градусов:
var a: array [1..100, 1..100] of integer;
i, j, n, m, z: integer;
begin
write ('Введите N: ');
readln (n);
write ('Введите M: ');
readln (m);
for i:=1 to n do
begin
for j:=1 to m do
begin
inc (z);
a[i,j]:=z;
write (a[i,j]:3);
end;
writeln;
end;
writeln('Результат: ');
for j:=1 to m do
begin
for i:=n downto 1 do
begin
write (a[i,j]:3);
end;
writeln;
end;
end.
var A: array [1..N, 1..M] of integer;
i,j: integer;
begin
writeln('Массив:');
for i:= 1 to N do begin
for j:= 1 to M do begin
A[i,j]:= random(9)+1;
write(A[i,j]:3)
end;
writeln
end;
writeln('Результат:');
for j:=1 to m do begin
for i:=n downto 1 do begin
write (a[i,j]:3);
end;
writeln;
end;
end.
const n=3;m=3;
Var a:array[1..n,1..m] of integer;
i,j,b:integer;
Begin
Writeln('Матрица A: ');
for i:=1 to n do begin
for j:=1 to m do begin
a[i,j]:= random(256);
write(a[i,j]:4);
end;
writeln;
end;
for j:=1 to m do begin
b:=a[1,j];
a[1,j]:=a[3,j];
a[3,j]:=b;
end;
writeln('Результат:');
for i:=1 to n do begin
for j:=1 to m do begin
write(a[i,j]:4);
end;
writeln;
end;
End.
const N = 5; const M = 5;
var A: array[1..N, 1..M] of byte;
i, j, e: byte;
begin
for i:= 1 to N do begin
for j:= 1 to N do begin
A[i, j]:= random(100);
write(A[i, j]:3);
end;
writeln();
end;
writeln();
for i:= 1 to N div 2 do begin
for j:= i to M - i do begin
e:= A[M - j + 1, i];
A[M - j + 1, i]:= A[M - i + 1, M - j + 1];
A[M - i + 1, M - j + 1]:= A[j, M - i + 1];
A[j, M - i + 1]:= A[i, j];
A[i, j]:= e;
end;
end;
for i:= 1 to N do begin
for j:= 1 to M do
write(A[i, j]:3);
writeln();
end;
end.
var a, b: array [1..9] of integer;
i: integer;
begin
writeln('Исходная матрица(от 1 до 9): ');
for i := 1 to 9 do begin
read(a[i]);
b[3] := a[1];
b[6] := a[2];
b[9] := a[3];
b[2] := a[4];
b[5] := a[5];
b[8] := a[6];
b[1] := a[7];
b[4] := a[8];
b[7] := a[9];
write;
end;
writeln('Результат: ');
writeln(b[1], ' ',b[2],' ', b[3]);
writeln(b[4],' ', b[5],' ', b[6]);
writeln(b[7],' ', b[8],' ', b[9]);
end.