Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Метод Бойера-Мура 
:(
    Опции темы
Agentum
Дата 10.11.2009, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 10.12.2008

Репутация: нет
Всего: нет



Помогите найти ошибку...(в дельфи новичок).вот код.выдает ошибку(даже не ошибку,а выделяет фиолетовым цветом что то с памятью(в строке с !!!))

Код

unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm2 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    memo1: TMemo;
    Button2: TButton;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation



function BMSearch(StartPos: Integer; const S, P: string): Integer;   
type  
  TBMTable = array[0..255] of Integer;   
var  
  Pos, lp, i: Integer;
  BMT: TBMTable;   
begin  
    
  for i := 0 to 255 do  
    BMT[i] := Length(P);   
  for i := Length(P) downto 1 do  
    if BMT[Byte(P[i])] = Length(P) then  
      BMT[Byte(P[i])] := Length(P) - i;   
    
  lp := Length(P);   
  Pos := StartPos + lp - 1;   
  while Pos <= Length(S) do  
  if P[lp] <> S[Pos]then                              !!!
      Pos := Pos + BMT[Byte(S[Pos])]   
    else if lp = 1 then  
    begin  
      Result := Pos;   
      Exit;   
    end  
    else  
      for i := lp - 1 downto 1 do  
        if P[i] <> S[Pos - lp + i] then  
        begin  
          Inc(Pos);   
          Break;   
        end  
        else if i = 1 then
        begin  
          Result := Pos - lp + 1;   
          Exit;   
        end;   
  Result := 0;   

end;

{$R *.dfm}

procedure TForm2.Button2Click(Sender: TObject);
var a:string;
begin
a:=edit1.Text;
end;

procedure TForm2.Button3Click(Sender: TObject);
var b:string;
begin
b:=edit2.Text;
end;

procedure TForm2.Button1Click(Sender: TObject);
var a,b:string;
begin
memo1.Lines.Add(inttostr(BMSearch(1,a,b)));
end;

end.


В архиве сам проект!!Помогите пжл.

Присоединённый файл ( Кол-во скачиваний: 6 )
Присоединённый файл  1.rar 188,17 Kb
PM MAIL   Вверх
kami
Дата 10.11.2009, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 22
Всего: 72



Цитата(Agentum @  10.11.2009,  14:29 Найти цитируемый пост)
даже не ошибку,а выделяет фиолетовым цветом что то с памятью

D2009?
В D7 код этой процедуры не дает даже Warning-а.

Текст того, как ругается Delphi на эту строку - в студию.
PM MAIL WWW   Вверх
Crw
Дата 10.11.2009, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 25.2.2008

Репутация: нет
Всего: 4



Омг. Ну это же надо такое написать.
Код
procedure TForm2.Button2Click(Sender: TObject);
var a:string;
begin
    a:=edit1.Text;
end;

здесь переменная a перестает существовать уже при выходе из процедуры Button2Click (это локальная переменная, а не глобальная). Соответсвенно в Button1Click ее уже нет и там используеться пустая сторка. Так что либо сделайте переменные глобальными, либо заполняйте их непосредственно в локальной процедуре:
Код
procedure TForm2.Button1Click(Sender: TObject);
var a,b:string;
begin
    a:=edit1.Text;
    b:=edit2.Text;
    memo1.Lines.Add(inttostr(BMSearch(1,a,b)));
end;

PM MAIL   Вверх
Agentum
Дата 11.11.2009, 08:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 10.12.2008

Репутация: нет
Всего: нет



всем спс я уже нашел ошибку
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0739 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.