program VisualRandomMatch;
const N = 8;
type
TMatrix = array[1..N, 1..N] of integer;
TArray = array[1..N] of boolean;
{ --- 1. ПРОЦЕДУРА --- }
procedure GetMatches(M: TMatrix; var Res: TArray);
var k, j: integer;
begin
for k := 1 to N do begin
Res[k] := True;
for j := 1 to N do
if M[k, j] <> M[j, k] then Res[k] := False;
end;
end;
{ --- 2. ФУНКЦИЯ --- }
function GetSum(M: TMatrix): integer;
var i, j, RowSum, Total: integer; HasMinus: boolean;
begin
Total := 0;
for i := 1 to N do begin
RowSum := 0; HasMinus := False;
for j := 1 to N do begin
RowSum := RowSum + M[i, j];
if M[i, j] < 0 then HasMinus := True;
end;
if HasMinus then Total := Total + RowSum;
end;
GetSum := Total;
end;
{ --- ГЛАВНАЯ ПРОГРАММА --- }
var
A: TMatrix;
Res: TArray;
i, j, randK: integer;
begin
Randomize;
{ Заполняем фон матрицы обычными числами от -5 до 5 }
for i := 1 to N do
for j := 1 to N do
A[i, j] := Random(11) - 5;
{ Выбираем СЛУЧАЙНЫЙ индекс k (от 1 до 8) }
randK := Random(N) + 1;
{ Делаем k-ю строку и k-й столбец одинаковыми! }
{ Чтобы это было видно, заполним их двузначными числами }
for i := 1 to N do begin
A[randK, i] := Random(90) + 10; { Генерируем число от 10 до 99 }
A[i, randK] := A[randK, i]; { Копируем его и в строку, и в столбец }
end;
{ Выводим матрицу на экран }
writeln('Случайная матрица:');
for i := 1 to N do begin
for j := 1 to N do write(A[i, j]:4);
writeln;
end;
writeln;
{ Выполняем 1 задание }
GetMatches(A, Res);
write('Совпадают (индексы): ');
for i := 1 to N do if Res[i] then write(i, ' ');
writeln;
{ Выполняем 2 задание }
writeln('Сумма строк с минусами: ', GetSum(A));
readln;
end.