Главная страница
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.023 c
3-40927
Sulimxar
2003-10-12 23:21
2003.11.13
Перенос преложений БД на другие машины


1-41310
Zeus
2003-10-31 10:29
2003.11.13
Как найти разницу


14-42044
gagarin
2003-10-16 07:14
2003.11.13
Определители аккордов


1-41165
operator
2003-11-02 19:13
2003.11.13
InsertComponent


11-41131
Kladov
2003-02-16 09:13
2003.11.13
Версия 1.68