Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.11.13;
Скачать: CL | DM;

Вниз

EAccessViolation в алгоритме поиска...   Найти похожие ветки 

 
Rradion   (2003-10-28 12:56) [0]

Такая проблемка - надо написать простенький алгоритм поиска в массиве.

1. Большими шагами ( по 10 ) переходим через ключ.
2. От места остановки перебираем массив к 0, до обнаружение ключа.
3. Если ключ не обнаружен, перебираем от места остановки до конца массиве, если находим, значит массив был не упорядочен.
4. Если не находим, значит ключа в массиве нет.

Написал код, а он мне выдает EAccessViolation ( на строчку, что болдам ), типа выход за границы массиве...

Спасибо!

procedure TForm1.Button4Click(Sender: TObject);
begin

i:=0;
nashel:=1; // 1- ischim ; 2- nashli ; 3- nashli v neotsort. ; 0- ne nashli

while MASS[i] < StrToInt(Edit2.Text) do i:=i+10; /// pereshli cherez kljuch

j:=i;
while ( MASS[j] <> StrToInt(Edit2.Text) ) or ( j<>0 ) do j:=j-1; /// poshli of j k 0 /// Tut on i daet EAccessViolation...

If MASS[j] = StrToInt(Edit2.Text) then nashel:=2; /// esli nashli kljuch, to nashli:=2

If j = 0 then /// esli ne nashli...
begin
j:=i;
while MASS[j] <> (StrToInt(Edit2.Text)) or MASS[N] do j:=j+1; /// ...to idjom or j k N
If MASS[j] = StrToInt(Edit2.Text) then nashel:=3; /// esli nashli kljuch, to nashli:=3
If (MASS[j] = MASS[N]) and (MASS[N]<>StrToInt(Edit2.Text)) then nashel:=0; /// esli tak i ne nashli, to nashli:=0
end;

if nashel=0 then
MessageDlg( "Not Found!" , mtinformation , [mbOK], 5 ); // ne naiden

if nashel<>0 then ListBox1.ItemIndex:=i-1; // esli naiden, pokazivaem v LB1.

if nashel=2 then
MessageDlg( "Found in Sorted Mass, at "+IntToStr(i) , mtinformation , [mbOK], 5 ); // naiden

if nashel=2 then
MessageDlg( "Found in Unsorted Mass, at "+IntToStr(i) , mtinformation , [mbOK], 5 ); // naiden

end;


 
Sandman25 ©   (2003-10-28 13:26) [1]

Edit2Text := StrToInt(Edit2.Text);
while (j > 0) do
if MASS[j] = Edit2Text) then
break
else
dec(j);


 
default ©   (2003-10-28 13:29) [2]

код Pos-а можешь взять(если только допустим массив символов)


 
Rradion   (2003-10-28 14:05) [3]

Pochenil, Spasibo Sandman!

procedure TForm1.Button4Click(Sender: TObject);
begin

i:=0; Kluch:= StrToInt( Edit2.Text );
nashel:=1; // 1- ischim ; 2- nashli ; 3- nashli v neotsort. ; 0- ne nashli

while MASS[i] < Kluch do i:=i+10; /// pereshli cherez kljuch

j:=i;

while j > 0 do if MASS[j] = Kluch then
begin
nashel:=2; /// esli nashli kljuch, to nashli:=2
break
end
else j:=j-1; /// poshli of j k 0

If j = 0 then /// esli ne nashli...
begin
j:=i;
while j < N do if MASS[j] = Kluch then
begin
nashel:=3; /// esli nashli kljuch, to nashli:=3
break
end
else j:=j+1; /// poshli ot j k N
end;

If (j=N) and (MASS[N]<>Kluch) then nashel:=0;

if nashel=0 then
MessageDlg( "Not Found!" , mtinformation , [mbOK], 5 ); // ne naiden

if ( nashel=2 ) or ( nashel=3 ) then ListBox1.ItemIndex:=j; // esli naiden, pokazivaem v LB1.

if nashel=2 then
MessageDlg( "Found in Sorted Mass, at "+IntToStr(j+1), mtinformation , [mbOK], 5 ); // naiden

if nashel=3 then
MessageDlg( "Found in Unsorted Mass, at "+IntToStr(j+1), mtinformation , [mbOK], 5 ); // naiden

end;



Страницы: 1 вся ветка

Текущий архив: 2003.11.13;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.033 c
3-41059
Новичок
2003-10-24 06:22
2003.11.13
Проблема с SQL-запросами. Виснут.


8-41762
Zorik
2003-06-26 16:30
2003.11.13
Как отобразить большой Bitmap на PaintBox.Canvas (100-200 Mb)


3-40969
Raduga
2003-10-17 07:46
2003.11.13
Ошибка при работе в w2k (ADO+mdb-files)


1-41656
Ivolg
2003-11-04 08:22
2003.11.13
BorderStyle bsNone не перидвигается


3-40818
Man
2003-10-25 15:47
2003.11.13
Как в SQL выгребсти записи с n1 по n2