AlexPS Два в одном.

Код
const
n = 5;
type
matrix=array[1..n,1..n] of integer;
var
a:matrix;
b:matrix;
procedure FillMain;
var
i,j:integer;
begin
for i := 1 to n do
for j := n downto i do
a[i,j] := random(100);
end;
procedure FillSide;
var
i,j:integer;
begin
for i := 1 to n do
for j := 1 to n - i + 1 do
a[i,j] := random(100);
end;
procedure RotateCV;
var
i,j:integer;
hlp:matrix;
begin
for i := 1 to n do
for j := 1 to n do
hlp[j, n - i + 1] := a[i, j];
for i := 1 to n do
for j := 1 to n do
a[i,j] := hlp[i,j];
end;
procedure RotateCCV;
var
i,j:integer;
hlp:matrix;
begin
for i := 1 to n do
for j := 1 to n do
hlp[n - i + 1,j] := a[i, j];
for i := 1 to n do
for j := 1 to n do
a[i,j] := hlp[i,j];
end;
procedure MainMirror;
var
i,j:integer;
begin
for i := 2 to n do
for j := 1 to i-1 do
a[i,j] := a[j,i];
end;
procedure SideMirror;
var
i,j:integer;
begin
RotateCV;
for i := 2 to n do
for j := 1 to i-1 do
a[i,j] := a[j,i];
RotateCCV;
end;
procedure Print;
var
i,j:integer;
begin
for i := 1 to n do
begin
WriteLn;
WriteLn;
for j := 1 to n do
Write(a[i,j]:3);
end;
end;
begin
randomize;
FillMain;
MainMirror;
{FillSide;
SideMirror;}
{RotateCV;}
{RotateCCV;}
Print;
end.
Процедуры:
FillMain - заполнить матрицу выше главной диагонали.
FillSide - заполнить матрицу выше побочной диагонали.
MainMirror - отзеркалить относительно главной диагонали.
SideMirror - отзеркалить относительно побочной диагонали.
RotateCV - повернуть матрицу по часовой стрелке.
RotateCCV - повернуть матрицу против часовой стрелки.
Ну я и намутил