IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Наибольшая общая часть строк.
Гость
сообщение 23.06.2005 6:36
Сообщение #1


Гость






Помогите пожалуйста выполнить задачу.
Есть две строки надо выделить наибольшую общую часть из них.
Я вообще не понял чего это значит?


внимательнее с названием темы!

Сообщение отредактировано: Oleg_Z - 23.06.2005 14:34
 К началу страницы 
+ Ответить 
VBproffi
сообщение 23.06.2005 6:50
Сообщение #2


Новичок
*

Группа: Пользователи
Сообщений: 13
Пол: Мужской

Репутация: -  0  +


Цитата
Никаких топиков вида "Помогите!!!!" или "Горю!Сделайте курсовую!!".Эти темы закрываются и удаляются.


(короче все не информативные названия) :nono: ;)

Нодо просомотреть какие значения из второй строки есть в первой и выписать их.
Код


Uses
    CRT;
var
    count    : Byte;
    StrIn,
    StrOut   : String[30];
    FileIn,
    FileOut  : Text;
    ItS, pob : String[30]
begin
    ClrScr;
            Assign(FileIn, 'C:/FileIn.txt');
            Assign(FileOut, 'C:/FileOut.txt');

             Reset(FileIn);
             ReWrite(FileOut);

             ReadLn(FileIn,StrIn);
             Read(FileIn, StrOut);

             For count:= 1 to Length(StrOut) do
                  begin
                       pob:= Copy(StrOut,count,1);
                       If Pos(pob,StrIn) > 0 then
                          ItS:=ItS+pob;
                  end;


             WriteLn(FileOut, ItS);
            Close(FileOut);
            Close(FileIn);
    ReadKey;
end.


Сообщение отредактировано: VBproffi - 23.06.2005 6:52


--------------------
Чтоб мудро жизнь прожить
Знать надобно не мало,
Ты лучше голодай,
Чем что попало есть
И лучше будь один,
Чем вместе с кем попало

О.Хаям
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klem4
сообщение 28.06.2005 16:22
Сообщение #3


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


помоему это решается так :

uses
    crt;
var
    s1,s2:string;

function GetMaxStr(var ss1,ss2:string):string;
var
    MaxS,Chek:string;
    i,right,left:integer;

begin

   MaxS:='';

   // ss1 - меньшая

   i:=1;

   repeat

      left:=i;

      right:=length(ss1);

      repeat


         Chek:=copy(ss1,left,right-left+1);


         if (pos(Chek,ss2)>0)and(Length(Chek)>Length(MaxS)) then
          MaxS:=Chek;

         dec(right);


      until(right-left<length(MaxS));

      inc(i);

   until (i>length(ss1));


   GetMaxStr:=MaxS;

End;




Begin

   clrscr;

   write('s1 = '); readln(s1);
   write('s2 = '); readln(s2);

   writeln;

   write('Результат : ');

   if length(s1)<length(s2) then
    writeln(GetMaxStr(s1,s2))
   else writeln(GetMaxStr(s2,s1));

   readln;

End.



зы в некоторых случаях будут лишние проверки, если надо, можно убрать.

Сообщение отредактировано: klem4 - 28.06.2005 16:25


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 28.06.2005 16:57
Сообщение #4


Гость






Вообще-то это задача на динамическое программирование: LCS - Largest Common Sequence. Вот тут было решение, если кому интересно: http://www.sumdu.edu.ua/tournament/mathema.../simple/inform/
 К началу страницы 
+ Ответить 
klem4
сообщение 28.06.2005 17:23
Сообщение #5


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Вот это не подойдет ?

Лучше одним постом выше - алгоритм Нудельмана, это то, что нужно...

Сообщение отредактировал volvo - Сегодня, 06:26 PM

Согласен :D
Сообщение отредактировал klem4 - Сегодня, 07:45 PM

Клем, сообщение отрадактирвоанно пишется мелким шрифтом иначе не правдоподобно!

Сообщение отредактировано: Oleg_Z - 28.06.2005 18:55


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
virt
сообщение 28.06.2005 18:52
Сообщение #6


Знаток
****

Группа: Пользователи
Сообщений: 419
Пол: Мужской

Репутация: -  6  +


а по клемовской ссылке тоже алгоритм нудельмана.

к тому же он выдает все подстроки максимальной длины ,а по ссылке volvo только одну.

virt, я имел в виду на 1 пост выше того, КУДА ведет ссылка klem4, на то, что ты и выкладывал ;) Просто при редактировании klem4 зачем-то удалил мою ссылку ...

Сообщение отредактировано: volvo - 28.06.2005 19:10


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия 24.07.2025 6:57
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"