Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.12.2008, 18:09   #1
svobodys
Пользователь
 
Регистрация: 07.10.2008
Сообщений: 42
По умолчанию

Дан двумерный массив символов. Определить пару строк, содержащих наибольшее число общих символов(одинаковых для обеих строк).


Код:


Код:
uses crt;
const n=10;
var i,j,max,l,r,temp:integer;
    a:array[1..n,1..n] of char;

function FindEqual(x,y:integer):integer;
var i,j,n1:integer;
    m,m1:set of char;
begin
n1:=0;
m:=[];{создаем множество неповторяющихся символов 1 строки}
m1:=[];{создаем множество неповторяющихся символов 2 строки}
for i:=1 to n do
 if not(a[x,i] in m) then begin {если символ из строки еще не встречался то проверякм}
                          m:=m+[a[x,i]];{записываем его в множество}
                           for j:=1 to n do 
                            if (a[x,i]=a[y,j])and(not(a[y,j] in m1)) then begin {если символ из 2 строки еще не встречался}
                                                   m1:=m1+[a[y,j]];
                                                   inc(n1);
                                                  end;
                          end;

 FindEqual:=n1;
end;
begin
randomize;
clrscr;
for i:=1 to n do
 begin
 for j:=1 to n do
 begin
  a[i,j]:=chr(random(25)+65);{инициализируем матрицу из букв A..Z}
  write(a[i,j],' ');
 end;
 writeln;
 end;

l:=1;r:=1;max:=0;
for i:=1 to n do
 for j:=1 to n do
   if i<>j then begin{чтобы не проверять строку саму с собой}
                 temp:=FindEqual(i,j);{подсчитываем количество совпадений}
                 if temp>max then begin
                                   l:=i;
                                   r:=j;
                                   max:=temp;
                                  end;
                 end;

  writeln(l,' ',r,' ',max,'chars');

end.
Вопрос, можно ли сделать по другому, проще?

Помогите пожалуйста, очень нужно.

Последний раз редактировалось Alex21; 15.12.2008 в 17:43.
svobodys вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача с двумерным массивом. svobodys Помощь студентам 3 13.12.2008 15:44
подскажите пожалуйста с двумерным массивом djem90 Помощь студентам 2 07.12.2008 17:33
помогите пожалуйста с двумерным массивом Wi1D Помощь студентам 8 26.11.2008 23:04
Помогите с двумерным массивом ПЛЗ))) Distract Паскаль, Turbo Pascal, PascalABC.NET 2 09.10.2008 11:39
задача с двумерным массивом Ras Помощь студентам 1 22.12.2007 19:58