Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.10.2016, 14:31   #1
povaki
Пользователь
 
Регистрация: 25.11.2015
Сообщений: 12
По умолчанию двоичный поиск

двоичный поиск с выведением кол-ва сравнений. программа всегда выводит кол-во сравнений 4. где ошибка? например, введя ключи от 1 до 16 по порядку, при поиске ключа 8, кол-во сравнений должно =1.

Код:
const n = 16;
var i,l,r,x,m: integer;
a:array [1..n] of integer;
begin
for i:= 1 to n do begin
write (i,' число---> ');
read (a[i]);
end; m:=0;
L:=1;
R:=16;
write('введите искомый ключ: ');
read(x);
while L<R do begin
i:= (R+L) div 2;
if a[i]<x then begin
L:=i+1; m:=m+1; end
else begin
R:=i; m:=m+1; end;
end;
if a[R]=x then writeln (r,' ключ = ',x,'; количество сравнений= ', m)
else
writeln ('ключ',x,'отсутствует');
end.

Последний раз редактировалось Аватар; 17.10.2016 в 14:41.
povaki вне форума Ответить с цитированием
Старый 17.10.2016, 14:49   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Проверки на равенство нет, вот цикл и идет до упора
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 17.10.2016, 14:51   #3
povaki
Пользователь
 
Регистрация: 25.11.2015
Сообщений: 12
По умолчанию

можете помочь исправить?
povaki вне форума Ответить с цитированием
Старый 17.10.2016, 15:04   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

так, навскидку, попробуйте:

Код:
while L<R do begin
   i:= (R+L) div 2;
   inc(m);
   if a[i]=x then begin R:=i; Break end;
   if a[i]<x then L:=i+1
   else R:=i;
end;
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Двоичный поиск Annushka1 Паскаль, Turbo Pascal, PascalABC.NET 2 22.01.2012 11:47
Двоичный поиск mikebrownen Общие вопросы C/C++ 8 20.10.2011 22:44
Двоичный поиск mikebrownen Помощь студентам 8 22.09.2011 23:07
Двоичный поиск в Turbo C++ 3.0 Xeon332 Помощь студентам 3 29.01.2009 04:19