bad3p
no problem

:
Код:
uses
crt;
const
n = 4; { размерность массива }
var
x: array [1..n, 1..n] of byte;
i, j, k: integer;
{ функция сравнения строк массива }
function like(n1, n2: integer): boolean;
var
s: set of byte;
i, j: integer;
begin
{ множество S содержит номера элементов строки n2, которые еще не проверялись }
s := [1..n];
{ каждый элемент строки n1... }
for i := 1 to n do begin
{ ...сравниваем с каждым элементов строки n2... }
j := 0;
repeat inc(j)
{ ...кроме тех, номера которых содержаться в множестве S }
until (j > n) or ((x[n1, i] = x[n2, j]) and (j in s));
{ если в строке n2 найден элемент, равный текущему элементу строки n1, }
{ то удаляем его номер из множества - чтобы не проверять его еще раз }
if j > n then break else exclude(s, j);
end;
{ множество становится пустым только в том случае, когда для каждого элемента }
{ из строки n1 найден равный элемент из строки n2, причем пары равных элементов }
{ не содержат элементов из строки n2 с одинаковыми номерами - т.е. строки "похожи" }
like := (s = []);
end;
begin
clrscr;
{ заполняем случайным образом массив и выводим его на экран }
randomize;
writeln ('X:');
for i := 1 to n do begin
for j := 1 to n do begin
x[i, j] := random(3);
write (x[i, j]:4);
end;
writeln;
end;
writeln;
{ ищем "похожие" строки и выводим их и их количество }
writeln ('pohozhie:');
k := 0;
for i := 1 to pred(n) do for j := succ(i) to n do if like(i, j) then begin
writeln ('x[', i:2, '] = x[', j:2, ']');
{ увеличиваем счетчик найденных пар строк на 1, т.е. k := k + 1; }
inc (k);
end;
writeln ('ih kolichestvo: ', k);
writeln;
{ ищем "непохожие" строки и выводим их и их количество }
writeln ('nepohozhie:');
k := 0;
for i := 1 to pred(n) do for j := succ(i) to n do if not like(i, j) then begin
writeln ('x[', i:2, '] <> x[', j:2, ']');
{ увеличиваем счетчик найденных пар строк на 1, т.е. k := k + 1; }
inc (k);
end;
writeln ('ih kolichestvo: ', k);
readkey;
end.