Показать сообщение отдельно
Старый 27.12.2004, 18:50     # 18
Ghost
::VIP::
Звезда первого сезона
Молчун-2004
 
Аватар для Ghost
 
Регистрация: 24.08.2002
Сообщения: 1 575

Ghost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех Гуру
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.
__________________
Действовать надо тупо и это лучшее доказательство нашей чистоты и силы!
Ghost вне форума