Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Help me, please

13K
31 января 2006 года
ogonek
3 / / 03.12.2005
Никак не пойму, что в этой программке не так. Не работает и все тут
program KMP_Find;
поиск маски в тексте, алгоритм Кнута-Мориса-Пратта
uses crt;
const n=840;
var a:array [1..n] of char;
mask:array [1..n] of ^char;
i,j,sv,pos,my,w:integer; sv-число совпадений,
pos-позиция первой буквы маски в тексте,
my-число сравнений,
w-длинна динамическрй маски
fx:text; файл с текстом
f:boolean; есть совпадения или нет
label m,m2;
begin
clrscr;
чтение текста из файла и вывод на экран Assign(fx,'c:\bp\bin\programm\linefind\reset.txt'); $I-
reset(fx);
$I+
if IOresult<>0 then
begin
writeln('Ошибка открытия файла');
halt;
end;
writeln('Текст:');
for i:=1 to n do
begin
read(fx,a);
write(a);
end;
w:=1;
writeln; обработка ввода маски поиска writeln('Введите маску поиска и нажмите <Enter>');
for i:=1 to n do
begin
new(mask);
read(mask^);
if ord(mask^)=13 then
begin
dispose(mask);
mask:=nil;
goto m;
end;
inc(w);
end;
m:
if w=1 then если маска не задана
begin
writeln('Маска не введена');
readln;
halt;
end;
i:=1; поиск совпадений
j:=1;
f:=false;
sv:=0;
my:=0;
Dec(w);
for i:=1 to n do
begin
Inc(my);
if a=mask[j]^ then
begin
if j=1 then
begin
если есть совпадения, то при следующем совпадении перескакиваем несколько символов i:=i+sv;
j:=j+sv;
end;
Inc(j); f:=true; Inc(sv);
end
else
begin f:=false; j:=1;
end;
if (j=w) and f then
begin
pos:=i-w+1;
goto m2;
end;
end;
m2:
j:=j+2-w; Обработка результатов
writeln;
if f then
writeln('Позиция: ',pos,'. Длинна маски: ',w,'. Длинна текста: 840 символов.',' ',my) else
writeln('Совпадений не найдено');
readln;
Close(fx);
for i:=1 to w do удаление динамического массива маски
dispose(mask);
end.
929
31 января 2006 года
sp999
198 / / 31.01.2003
Цитата:
Originally posted by ogonek
Никак не пойму, что в этой программке не так. Не работает и все тут
program KMP_Find;
поиск маски в тексте, алгоритм Кнута-Мориса-Пратта


Разбираться особо не стал...
Может просто стОит взять готовую прогу из Инета?
Вот например:
http://ric.uni-altai.ru/Fundamental/pascal1/lab15/l15-teor.htm
Переделать только ввод текста не с консоли, а из файла и все.
Кста, на будущее:
пользоваться метками и оператором goto - это плохой тон программирования. Чтобы досрочно выйти из цикла существует оператор Break.
Удачи!

1.9K
01 марта 2006 года
Borland_prog
149 / / 25.01.2006
Точно и еще ставить нуно табы и пробелы для улочшения читаемости написанного другими.
276
09 марта 2006 года
Rebbit
1.1K / / 01.08.2005
Цитата:
Originally posted by Borland_prog
Точно и еще ставить нуно табы и пробелы для улочшения читаемости написанного другими.


Ну ты и гений. А сам то пробовал пробели поставить и запостить ???
Используйте блок

 
Код:
[code]
  тут все пробелы сохраняются

[/code]
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог