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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.05.2013, 19:17   #1
Андрос
Пользователь
 
Регистрация: 19.04.2009
Сообщений: 45
Печаль бин. поиск Делфи 7, вопросик

Всем доброго времени суток, проблема вот в чем - я нашел код на бин поиск, но там нету сортировки массива по возростанию, как я понял без нее нормально работать прога не будет, и нету возможности выбрать количество элементов массива в ручную, чтоб пользователь ввел в едит количество элементов...вот код делфи просто бин поиска, помогите его откорректировать так как надо...С уважением, Андрей(((((((
Наверное стоит проверить что числа возрастают (или убывают), а затем вывести сообщение что "бинарный поиск не может работать в не отсортированном массиве".
Дальше идет бинарный поиск. вот функцию надыбал... Уважаемые форумчане, помогите склепать прогу(
Код:
function WithOutSort (const a : TArr; const n : Integer) : Boolean;

var
        Up, Down : Boolean;
        i : Integer;


begin

        i := 2;
        while (i <= n) and (a[i] > a[i-1]) do
                Inc (i);

        Up := i > n;

        i := n;
        while (i >= 2) and (a[i] < a[i-1]) do
                Dec (i);

        Down := i = 1;

        WithOutSort := Up or Down;

end;

бин поиск
Код:
unit b_found_;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Grids;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Button1: TButton;
    Label3: TLabel;
    CheckBox1: TCheckBox;
    StringGrid1: TStringGrid;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);

    procedure StringGrid1KeyPress(Sender: TObject; var Key: Char);
    procedure Edit1KeyPress(Sender: TObject; var Key: Char);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

{ Бинарный поиск в массиве }
procedure TForm1.Button1Click(Sender: TObject);
const
   SIZE=10;
var
   a:array[1..SIZE] of integer; { массив }
   obr:integer;                 { образец для поиска}

   verh:integer; { верхняя граница поиска }
   niz: integer; { нижняя граница поиска }
   sred:integer; { номер среднего элемента }

   found:boolean;{ TRUE - совпадение образца с элементом массива }
   n:integer;    {  число сравнений с образцом }

   i:integer;

begin
   // ввод массива и образца
   for i:=1 to SIZE do
       a[i]:=StrToInt(StringGrid1.Cells[i-1,0]);
   obr := StrToInt(Edit1.text);

   // поиск
   verh:=1;
   niz:=SIZE;
   n:=0;
   found:=FALSE;
   label3.caption:='';


   if CheckBox1.State = cbChecked
      then Label3.caption:='verh'+#9+'niz'#9'sred'#13;

   // бинарный поиск в массиве
   repeat
     sred:=Trunc((niz-verh)/2)+verh;
     if CheckBox1.Checked
       then Label3.caption:=label3.caption
                 +IntToStr(verh) + #9
                 +IntToStr(niz) + #9
                 +IntToStr(sred) + #13;
     n:=n+1;
     if a[sred] = obr
        then found:=TRUE
        else
           if obr < a[sred]
              then niz:=sred-1
	      else verh:=sred+1;
   until (verh > niz) or found;

   if found
       then label3.caption:=label3.caption
                          +'Совпадение с элементом номер '
                          + IntToStr(sred)+#13
                          + 'Cравнений ' + IntToStr(n)
       else label3.caption:=label3.caption
                          +'Образец в массиве не найден.';
end;


// нажатие клавиши в ячейке StringGrid
procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
    if Key = #13 then  // нажата клавиша <Enter>
        if StringGrid1.Col < StringGrid1.ColCount - 1
            then // курсор в следующую ячейку таблицы
                 StringGrid1.Col := StringGrid1.Col +1
            else // курсор в поле Edit1, в поле ввода образца
                 Edit1.SetFocus; // п

end;

// нажатие клавиши в поле Edit1
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
   if Key = #13 // нажата <Enter>
      then  // сделать активной командную кнопку
            Button1.SetFocus;
end;

end.
Андрос вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск на делфи WINCHES Помощь студентам 10 06.03.2011 01:22
Поиск бд делфи Jereme БД в Delphi 2 01.03.2011 22:22
Вопрос(бин.дерево) mike_tihomirov Общие вопросы C/C++ 5 05.07.2010 14:33
Рекурсивная суммация цисел в узлах Бин.Дерева интеграл Помощь студентам 0 11.05.2010 10:09