Бинарный поиск

Ответить
Оксана92
Сообщения: 5
Зарегистрирован: 07 мар 2010, 13:59

В массиве A(N) определите количество элементов, которые меньше заданного значения М.
Задачу надо решить с помощью бинарного поиска.
Кто откликнется буду очень признательна!
:p
dr.Jekill
Сообщения: 526
Зарегистрирован: 03 янв 2009, 23:17
Откуда: Voronezh
Контактная информация:

Вот Вам binarsearch. Переделаете под себя.

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

procedure BinarSearch;
{dvoichnyi poisk}
var left,right,middle:integer;
    first,last,kol:integer;
    s:string;
begin
  repeat
   write('Nuzhno naiti: ');
   readln(s);
   if s='' then writeln('Massiv NE soderzhit pustyh strok! Zadaite druguiu stroku.');
  until s<>'';
  left:=1;
  right:=N;
  repeat
    middle:=left+(right-left) div 2;
    if A[middle]>s then right:=middle
    else left:=middle;
  until right-left<=1;
  if s=A[align=left] then last:=left
  else if s=A[align=right] then last:=right
  else last:=0;
  if last>0 then
   begin
    first:=last;
    kol:=0;
    repeat
     if a[first]=a[last] then
      begin
       dec(first);
       inc(kol);
      end;
    until a[first]<>a[last];
    for i:=first+1 to last do writeln('Pozicia: ',i,'.');
    writeln('Vsego sovpadenii ',kol);
   end
   else writeln('Nichego NE naideno!');
end;
Нет религии выше истины
dr.Jekill
Сообщения: 526
Зарегистрирован: 03 янв 2009, 23:17
Откуда: Voronezh
Контактная информация:

Вам замечание за неправильное название темы - читайте правила. В следующий раз удалю.
Нет религии выше истины
Оксана92
Сообщения: 5
Зарегистрирован: 07 мар 2010, 13:59

dr.Jekill писал(а):Вам замечание за неправильное название темы - читайте правила. В следующий раз удалю.

Большое спасибо,с правилами ознакомлюсь! ;)
Оксана92
Сообщения: 5
Зарегистрирован: 07 мар 2010, 13:59

dr.Jekill писал(а):Вот Вам binarsearch. Переделаете под себя.

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

procedure BinarSearch;
{dvoichnyi poisk}
var left,right,middle:integer;
    first,last,kol:integer;
    s:string;
begin
  repeat
   write('Nuzhno naiti: ');
   readln(s);
   if s='' then writeln('Massiv NE soderzhit pustyh strok! Zadaite druguiu stroku.');
  until s<>'';
  left:=1;
  right:=N;
  repeat
    middle:=left+(right-left) div 2;
    if A[middle]>s then right:=middle
    else left:=middle;
  until right-left<=1;
  if s=A[align=left] then last:=left
  else if s=A[align=right] then last:=right
  else last:=0;
  if last>0 then
   begin
    first:=last;
    kol:=0;
    repeat
     if a[first]=a[last] then
      begin
       dec(first);
       inc(kol);
      end;
    until a[first]<>a[last];
    for i:=first+1 to last do writeln('Pozicia: ',i,'.');
    writeln('Vsego sovpadenii ',kol);
   end
   else writeln('Nichego NE naideno!');
end;
У меня почему-то программа не работает,как я думаю в программе надо заводить массив?
Но он,почему-то не создан,да и почему-то right:=N; (n)-нигде не описан в varе,помогите правильно переделать чтобы все работало.
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

Это просто процедура. Массив A и константу N надо задавать в соответствующих местах. А в самой программе нужно вызвать процедуру BinarSearch.
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Оксана92
Сообщения: 5
Зарегистрирован: 07 мар 2010, 13:59

Хыиуду писал(а):Это просто процедура. Массив A и константу N надо задавать в соответствующих местах. А в самой программе нужно вызвать процедуру BinarSearch.

как мне в эту процедуру или в (основную программу) впихнуть это:

for i:=1 to n do
for j:=1 to n do
if matrix[i,j] < M then
s:=S+1;

writeln(s);
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

Не понимаю, каким тут боком бинарный поиск, но "это" заменяет всю процедуру.
Вся программа будет выглядеть так:
const N=10;
M=20;
var i, j, s: integer;
matrix:array[1..N, 1..N] of integer;
begin
{Тут как-то заполняется матрица}
{Тут кусок, приведенный вами в последнем посте}
end.
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Оксана92
Сообщения: 5
Зарегистрирован: 07 мар 2010, 13:59

Хыиуду писал(а):Не понимаю, каким тут боком бинарный поиск, но "это" заменяет всю процедуру.
Вся программа будет выглядеть так:
const N=10;
M=20;
var i, j, s: integer;
matrix:array[1..N, 1..N] of integer;
begin
{Тут как-то заполняется матрица}
{Тут кусок, приведенный вами в последнем посте}
end.

Мне сказали что это делать надо через ключ!!!ПОМОГИТЕ!!!
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

Смотрите Википедию, статью Двоичный поиск. Там все есть.
Только ключа там никакого нет. Его в двоичном поиске нет вообще. В принципе. Скажите своему преподавателю, что не надо пытаться фотографировать с помощью утюга.
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Ответить