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

Ответить

Код подтверждения
Введите код в точности так, как вы его видите. Регистр символов не имеет значения.

BBCode ВКЛЮЧЁН
[img] ВКЛЮЧЁН
[url] ВКЛЮЧЁН
Смайлики ОТКЛЮЧЕНЫ

Обзор темы
   

Развернуть Обзор темы: Бинарный поиск в сортированном массиве. Delphi

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

Tanja » 05 май 2009, 14:08

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

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

GRIPH » 13 апр 2009, 22:00

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

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

Игорь Акопян » 13 апр 2009, 11:05

я щаз ваш пост отредактирую поставив нормальные отступы и будет понятнее ;)

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

GRIPH » 12 апр 2009, 15:22

Все равно никак не могу разобраться... Всю голову уже переломал...

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

Naeel Maqsudov » 10 апр 2009, 23:55

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

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

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

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

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

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

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

GRIPH » 10 апр 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.

Вернуться к началу