Файл в самом низу
Я прогу написал, но она не всегда правильно считает:
- Если подстроки нет в тексте, то прога неправильно считает число сравнений.
- Прога не всегда правильно считает число сравнений для некоторых слов.Например, слово crimes в самом конце текста.
- Если взять текст с программой на Паскале, то прога, если написать сразу 2 слова, вообще считает всё неправильно.
Вот прога:
Program Stroka;
var
z,a,k,i,j,y:integer;
t:text;
name,st,st2:string[80];
key1,key2:boolean;
Procedure poisk1(var i,y:integer;st,st2:string);
var
j:integer;
m,n:byte;
Begin
m:=ord(st2[0]);
n:=ord(st[0]);
i:=-1;
y:=-1;
repeat
i:=i+1;
j:=1;
while (j<=m) and (st[i+j]=st2[j]) do
begin
y:=y+1;
j:=j+1;
end;
y:=y+1;
until (j=m+1) or (i=n-m);
if j=m+1 then i:=i+1;
if (j<>m+1) and (i=n-m) then i:=0;
End;
Procedure poisk2(var k,z:integer;st,st2:string);
var
m,n:byte;
d:array[char] of byte;
i,x:integer;
Begin
m:=ord(st2[0]);
n:=ord(st[0]);
for i:=0 to 255 do d[chr(i)]:=m;
for j:=1 to m-1 do d[st2[j]]:=m-j;
i:=m;
j:=m;
z:=-1;
while (j>0) and (i<=n) do
begin
j:=m;
k:=i;
z:=z+1;
while (j>0) and (st[k]=st2[j]) do
begin
k:=k-1;
j:=j-1;
z:=z+1;
end;
i:=i+d[st[i]];
end;
if j<>0 then k:=0;
End;
Begin
writeln('Vvedite imya faila:');
readln(name);
assign(t,name);
reset(t);
a:=0;
writeln;
writeln('Vvedite podstroky poiska:');
read(st2);
readln;
writeln('Tekst:');
while not eof(t) and ((i=0) and (k=0)) do
begin
readln(t,st);
a:=a+1;
write(st);
writeln;
poisk1(i,y,st,st2);
poisk2(k,z,st,st2);
end;
if (i<>0) or (k<>0) then
begin
writeln;
writeln('Pryamoi poisk:');
write('Nomer stroki:',a);
writeln;
write('Nomer pozicii podstroki v stroke:',i);
writeln;
writeln('Chislo sravnenii v stroke:',y);
writeln('Algoritm Bouera i Mura:');
write('Nomer stroki:',a);
writeln;
write('Nomer pozicii podstroki v stroke:',k+1);
writeln;
writeln('Chislo sravnenii v stroke:',z);
end;
if (i=0) and (k=0) then
begin
writeln('Podstroka ne obnaruzhena!');
writeln('Pryamoi poisk:');
write('Chislo sravnenii v stroke:',y);
writeln;
writeln('Algoritm Bouera i Mura:');
writeln('Chislo sravnenii v stroke:',z);
end;
close(t);
readln;
End.
файл:
more, the operations of our businesses, governments,
and financial institutions are controlled by information
that exists only inside computer memories. Anyone
clever enough to modify this information for his own
purposes can reap substantial rewards.Even worse, a
number of people who have done this and been caught
at it have managed to get away without punishment.
These facts have not been lost on criminals or would-be
criminals. A recent Stanford Research Institute study of
computer abuse was based on 160 case histories, which
probably are just the proverbial tip of the iceberg. After
all, we only know about the unsuccessful crimes