PDA

Просмотр полной версии : Бинарный поиск в сортированном массиве. Delphi



GRIPH
10.04.2009, 17:48
В общем на кнопку забил процедуру:


procedure TForm1.Button8Click(Sender: TObject);
var
L,R,m,x,N:integer;
found:boolean;
begin
x:=StrToInt(Edit2.Text);
L:=0;
N:=Length(Arr);
R:=N-1;
found := FALSE;
WHILE (L <= R) AND NOT found DO
m := (L + R) div 2;
IF Arr[m] = x THEN
begin
found := TRUE;
IF Arr[m] < x THEN L := m+1
ELSE R := m-1;
End;
if found then ShowMessage('FOUND!') else ShowMessage('Not FOUND!');
End;

Искать, он ищет, но выводить сообщение не хочет. И ещё помогите как узнать номер найденного элемента. Т.е. если найдет, то каким по счету он стоит в массиве.

Массив динамический. Берется из списка TList.

Naeel Maqsudov
10.04.2009, 23:55
Тема перемещена в более подходящий раздел.

Разберитесь с операторными скобками. У вас тут все наперекосяк получилось

WHILE (L <= R) AND NOT found DO
m := (L + R) div 2;

- это весь цикл.
После цикла условие Arr[m] = x не выполняется и всегда получается что found=false.

Погоняйте эту программу под отладчиком. F8 вам однозначно поможет все понять.

Номер найденного элемента - это m

GRIPH
12.04.2009, 15:22
Все равно никак не могу разобраться... Всю голову уже переломал...

Игорь Акопян
13.04.2009, 11:05
я щаз ваш пост отредактирую поставив нормальные отступы и будет понятнее ;)

GRIPH
13.04.2009, 22:00
Всё :) Спасибо, дело все было в операторных скобках после while... забыл, и поэтому ничего остальное не выполнялась, у меня теперь другая проблема.. В другой теме написал :)