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

Общие вопросы: версии и диалекты, синтаксис языка, cтруктуры и типы данных (массивы, строки, списки...), обработка данных и т.д.
Ответить
GRIPH
Сообщения: 9
Зарегистрирован: 10 апр 2009, 17:42

В общем на кнопку забил процедуру:

Код: Выделить всё

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
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

Тема перемещена в более подходящий раздел.

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

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

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

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

Номер найденного элемента - это m
GRIPH
Сообщения: 9
Зарегистрирован: 10 апр 2009, 17:42

Все равно никак не могу разобраться... Всю голову уже переломал...
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

я щаз ваш пост отредактирую поставив нормальные отступы и будет понятнее ;)
Изображение
GRIPH
Сообщения: 9
Зарегистрирован: 10 апр 2009, 17:42

Всё :) Спасибо, дело все было в операторных скобках после while... забыл, и поэтому ничего остальное не выполнялась, у меня теперь другая проблема.. В другой теме написал :)
Tanja
Сообщения: 1
Зарегистрирован: 05 май 2009, 13:47

Здравствуйте помогите пожалуйста составить программу для нахождения минимвального числа в одномерном массиве состоящем из n-натуральных чисел полученных случайным образом. на Паскале. Очень срочно надо.
Ответить