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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.04.2010, 19:45   #1
kate-27
Пользователь
 
Регистрация: 23.03.2010
Сообщений: 24
По умолчанию Обработка одномерных массивов.2 уровень

Плиз если кто знает как напишите в консольном режиме)
Заданы целочисленный массив а1, а2,..., аn, упорядоченный по возрастанию(а1<a2<...<an) и целочисленная переменная q. Переменной k присвоить номер элемента массива А, равного q, или 0, если такого элемента нет. Использовать следующий алгоритм поиска: сравнить q со средним элементом массива( или элементом около середины); если эти числа равны, то поиск завершен, если же q меньше значения среднего элемента, то поиск теперь надо вести в левой половине массива, а иначе-в правой половине; к выбранной половине применить тот же алгоритм.
kate-27 вне форума Ответить с цитированием
Старый 06.04.2010, 09:53   #2
RUSt88
Участник клуба
 
Регистрация: 29.12.2009
Сообщений: 1,166
По умолчанию

пиши на мыло, договоримся, есть готовая реализация - то, что вы описали, называется бинарный поиск
прогер C\C++\C#\Delphi
ася: [семь 3]-[97]-[1 шесть]
RUSt88 вне форума Ответить с цитированием
Старый 06.04.2010, 10:13   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Этот алгоритм по-моему называется методом половинного деления
Код:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;
 var a:array[1..20] of integer;
  q,i,e:integer;
begin       {$o-}
 for i:=low(a) to high(a) do begin
  a[i]:=random(100);
  for q:=low(a) to i-1 do begin
   if a[q]>a[i] then begin e:=a[q];a[q]:=a[i];a[i]:=e;end;
  end;
 end;
 for i:=low(a) to high(a) do  write(a[i]:5);


 writeln;
 i:=high(a) div 2;
 q:=5;

 while (i<>2)and(q<>a[i]) do begin
  if a[i]>q then
    i:=i-i div 2
  else
    i:=i+i div 2
 end;
 writeln('q=',i);

  { TODO -oUser -cConsole Main : Insert code here }
  readln;
end.
Устроит?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.04.2010, 10:32   #4
RUSt88
Участник клуба
 
Регистрация: 29.12.2009
Сообщений: 1,166
По умолчанию

Stilet, может и так его еще называют, но это точно бинарный поиск
прогер C\C++\C#\Delphi
ася: [семь 3]-[97]-[1 шесть]
RUSt88 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Паскаль.Обработка одномерных массивов. popozoglo Помощь студентам 2 11.02.2010 22:49
Обработка одномерных массивов на Си/Си++ aka_Kiss Помощь студентам 1 23.11.2009 21:51
обработка одномерных массивов felmor Помощь студентам 16 05.02.2009 19:22