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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.04.2008, 13:10   #1
sergey31
Пользователь
 
Аватар для sergey31
 
Регистрация: 27.04.2008
Сообщений: 24
По умолчанию Нужен совет(бинарный поиск в 2-d массиве)

Добрый день. Столкнулся с небольшой проблемой, выполняя лабараторную работу по бинарному поиску. Задача: создать форму с 4-мя кнопками(заполнить массив случайными числами, сортировать массив, кнопка по нажатию которой начинается поиск и выход), edit-ом(для ввода искомого элемента), memo(для вывода координат элемента), stringgrid-ом.Написал программу, но если искомый элемент находится во 2-м столбце, то программа выдает сообщение, что его нет, помогите пожалуйста разобратся в чем дело.
Ниже идет текст программы:
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    Edit1: TEdit;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Memo1: TMemo;
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
const
  n=4;
  m=4;
var
  Form1: TForm1;
  z:real;
  i,j,q,x,min,sred,max:integer;
  T:array[1..n,1..m] of integer;
implementation

{$R *.dfm}

procedure TForm1.Button2Click(Sender: TObject);{Заполнение сл.числами}
begin
  for i:=1 to n do
  for j:=1 to m do
    begin
      T [i,j]:=random(1000);
      StringGrid1.Cells[j,i]:=inttostr(T[i,j]);
    end;
end;
procedure TForm1.Button3Click(Sender: TObject);{Сортировка}
begin
for q:=1 to n do
        for i:=2 to m do
                begin
                x:=T[q,i];
                j:=i-1;
                while (x<T[q,j]) and (j>0) do
                        begin
                        T[q,j+1]:=T[q,j];
                        j:=j-1;
                        end;
                T[q,j+1]:=x;
                end;
        for i:=1 to n do
        for j:=1 to m do
        StringGrid1.Cells[j,i]:= inttostr(T [i,j]);
end;

procedure TForm1.Button4Click(Sender: TObject);{Закрытие}
begin
Form1.Close;
end;

procedure TForm1.Button1Click(Sender: TObject); {Поиск элемента}
begin
z:=strtofloat(edit1.text);
edit1.text:=' ';
for i:=1 to n do
  begin
  min:=1;
  max:=n;
  while min<=max do
    begin
    sred:=(min+max)div 2;
    if T [i,sred]<z then
    min:=sred+1
    else max:=sred-1;
    end;
  if T [i,sred]=z then
  begin
  memo1.text:='Элемент имеет координаты('+inttostr(i)+';'+inttostr(sred)+')';
  end
  else
  memo1.text:=floattostr(z)+' нет';
  if T [i,sred]=z then break
  end;
end;


end.

Последний раз редактировалось sergey31; 27.04.2008 в 13:15.
sergey31 вне форума Ответить с цитированием
Старый 27.04.2008, 13:37   #2
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,689
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject); {Поиск элемента}
begin
z:=strtofloat(edit1.text);
edit1.text:=' ';
for i:=1 to n do
begin
 min:=1;
 max:=m;  // не n
 while min<=max do
  begin
  sred:=(min+max)div 2;
  if T [i,sred]<z then
  min:=sred+1
  else if T [i,sred]>z then max:=sred-1 else break;//тут поправил чуток
 end;
 if T [i,sred]=z then
 begin
  memo1.text:='Элемент имеет координаты('+inttostr(i)+';'+inttostr(sred)+')';
 end
 else
 memo1.text:=floattostr(z)+' нет';
 if T [i,sred]=z then break
end;
end;
eoln вне форума Ответить с цитированием
Старый 27.04.2008, 13:49   #3
sergey31
Пользователь
 
Аватар для sergey31
 
Регистрация: 27.04.2008
Сообщений: 24
По умолчанию

Eoln, большое тебе спасибо, а то так и сидел бы пытаясь разобратся
sergey31 вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужен совет по С++ profi Помощь студентам 3 28.07.2008 19:20
Нужен совет Михаил Юрьевич Общие вопросы Delphi 2 07.06.2008 13:59
Нужен совет Михаил Юрьевич Общие вопросы Delphi 7 27.01.2008 10:25
Бинарный поиск в 1мерном массиве, ошибка в программе из книги ILDAR@GIZmo Помощь студентам 4 02.12.2007 22:22
Бинарный поиск Gendalf Помощь студентам 1 07.07.2007 22:09