Автор: Пользователь скрыл имя, 22 Декабря 2012 в 08:16, курсовая работа
Целью данной курсовой работы является разработка приложения, реализующего алгоритмы поиска сравнением с образцом. Для решения данной задачи необходимо:
1) Проанализировать методы решения задачи;
2) Проанализировать алгоритмы поиска подстроки в строке;
3) Проанализировать структуры данных и выбрать необходимые;
Введение
1 Описание и анализ поставленной задачи
2 Анализ метода решения задачи поиска подстроки в строке
2.1 Анализ алгоритма SF
2.2 Анализ алгоритма Боуэра-Мура
2.3 Анализ алгоритма Кнута-Мориса-Пратта
3 Анализ и выбор структур данных
4 Проектирование и реализация программного средства
5 Оценка эффективности
Заключение
Список литературы
Приложение А Листинг программы
procedure TFind.SetWord1(const Value: string);
begin
MyWord1:=Value;
end;
procedure TFind.SetWord2(const Value: string);
begin
MyWord2:=Value;
end;
destructor TFind.Destroy;
begin
inherited;
end;
function TFind.GetWord1: string;
begin
Result:=MyWord1;
end;
function TFind.GetWord2: string;
begin
Result:=MyWord2;
end;
function TFind.Search_Boyer_Moore(wrd1,
var
Posit: array ['a'..'z'] of byte;
i, last, n, m: byte;
s: char;
begin
n:=length(Wrd1);
m:=length(Wrd2);
Result:=false;
for s:='a' to 'z' do Posit[s]:=0;
for i:=1 to n do Posit[Wrd1[i]]:=i;
last:=n;
while last<=m do
if wrd1[n]<>wrd2[last]
then last:=last+(n-Posit[wrd2[last]
else if wrd1 = Copy(wrd2,last-n+1,n)
then begin
Result:=true;
exit;
end
else inc(last);
Result:=false;
end;
function TFind.Search_Knuth_Morris_
var
FLINK : Array[1..255] of Byte;
i,j,n,m: Byte;
begin
Result:=false;
m:=Length(wrd1);
n:=Length(wrd2);
FLINK[1]:=0;
i:=2;
While i<=m do begin
j:=FLINK[i-1];
While (j<>0) AND (wrd1[j]<>wrd1[i-1]) do j:=FLINK[j];
FLINK[i]:=j+1;
i:=i+1
end;
i:=1;
j:=1;
While i<=n do begin
While (j<>0) AND (wrd1[j]<>wrd2[i]) do j:=FLINK[j];
If j=m then begin
result:=true;
exit;
end else begin
i:=i+1;
j:=j+1
end
end;
end;
function TFind.Search_Straight_Forward(
var
i : Byte;
begin
Result:=false;
i:=1;
While (i<=Length(wrd2)-Length(wrd1)+
If Copy(wrd2,i,Length(wrd1))=wrd1 then begin
Result:=true;
end
else i:=i+1;
end;
end.