Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
Gregori7
0 / 0 / 0
Регистрация: 07.06.2017
Сообщений: 10
1

Поиск в StringGrid

12.07.2017, 21:30. Просмотров 807. Ответов 7
Метки нет (Все метки)

Есть просто поиск по третьему столбцу, а нужно сделать бинарный поиск.
Сначала столбец сортируется, происходит поиск и выносит результат в StringGrid2.
Как сделать бинарный?
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids;
 
type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    Button1: TButton;
    StringGrid2: TStringGrid;
    Edit1: TEdit;
    Button2: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.FormCreate(Sender: TObject);
var
  i : integer;
begin
  for i := 1 to 14 do
  begin
    StringGrid1.Cells[0, i] := IntToStr(i);
    StringGrid1.Cells[0, 0] := 'Номер';
    StringGrid1.Cells[1, 0] := 'ФИО';
    StringGrid1.Cells[2, 0] := 'Дата рождения';
    StringGrid1.Cells[3, 0] := 'Табельный номер';
//так же заполняется все остальное
 
  end;
end;
 
 
procedure TForm1.Button1Click(Sender: TObject);
var i,j:integer;
    tmp:string;
begin
for i:=1 to StringGrid1.RowCount-2 do
for j:=i+1 to StringGrid1.RowCount-1 do
if StringGrid1.Cells[3,i]>StringGrid1.Cells[3,j] then
 begin
  tmp:=StringGrid1.Rows[i].Text;
  StringGrid1.Rows[i].Text:=StringGrid1.Rows[j].Text;
  StringGrid1.Rows[j].Text:=tmp;
 end;
end;
 
 
procedure TForm1.Button2Click(Sender: TObject);
var
 i : integer;
begin
 for i := StringGrid1.FixedRows to StringGrid1.RowCount - 1 do
 if StringGrid1.Cells[3, i] = Edit1.Text
  then begin
        StringGrid2.Rows[StringGrid2.RowCount - 1].CommaText := StringGrid1.Rows[i].CommaText;
        StringGrid2.RowCount := StringGrid2.RowCount + 1;
       end;
end;
 
end.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.07.2017, 21:30
Ответы с готовыми решениями:

Поиск в StringGrid
procedure FindClick(Sender: TObject); var i:integer; e:string; Col, Row :...

Поиск в StringGrid-де
Здравствуйте, тут такая проблемка, мне нужно найти в гриде определенные записи...

Поиск в StringGrid
Не получается осуществить вывод в memo ударников. Сделала отличников, не...

Поиск в StringGrid
Здравствуйте, помогите пожалуйста. Дан PageControl в нем на первой вкладке...

Поиск в StringGrid
Доброго времени суток ! Подскажите как можно организовать поиск так, чтоб...

7
northener
пофигист широкого профиля
3427 / 2326 / 631
Регистрация: 15.07.2013
Сообщений: 13,775
13.07.2017, 01:18 2
Цитата Сообщение от Gregori7 Посмотреть сообщение
а нужно сделать бинарный поиск.
Бинарный поиск "где" нужно сделать?
В СтрингГриде бинарный поиск нужно сделать???
0
Gregori7
0 / 0 / 0
Регистрация: 07.06.2017
Сообщений: 10
13.07.2017, 01:34  [ТС] 3
northener, да
0
northener
пофигист широкого профиля
3427 / 2326 / 631
Регистрация: 15.07.2013
Сообщений: 13,775
13.07.2017, 01:54 4
Цитата Сообщение от Gregori7 Посмотреть сообщение
northener, да
Какой может быть "бинарный" поиск в СтригГриде, где кроме текста ничего нет?
Кто вам дал такую задачу? Или с какого бодуна вы сами её придумали?
0
Gregori7
0 / 0 / 0
Регистрация: 07.06.2017
Сообщений: 10
13.07.2017, 02:10  [ТС] 5
northener, в определенном столбце, третьем - цифры, именно по ним идет бинарный поиск. А выделить или перенести в СтригГрид нужно уже всю строку.
0
northener
пофигист широкого профиля
3427 / 2326 / 631
Регистрация: 15.07.2013
Сообщений: 13,775
13.07.2017, 02:44 6
Цитата Сообщение от Gregori7 Посмотреть сообщение
northener, в определенном столбце, третьем - цифры, именно по ним идет бинарный поиск
Да хоть цифры, хоть числа. В ячейках Стринггрида нет ничего, кроме текста.
И ни по тексту, ни по цифрам, ни по числам бинарный поиск не имеет смысла.
Процитируйте ваше учебное задание "слово в слово ".
0
Massaraksh7
311 / 264 / 87
Регистрация: 27.05.2017
Сообщений: 1,350
13.07.2017, 05:27 7
Лучший ответ Сообщение было отмечено Gregori7 как решение

Решение

Ну, я бы не был так категоричен. Текст стринггрида вполне можно интерпретировать, как структуру данных.

Добавлено через 1 час 38 минут
56 строку заменить на
Delphi
1
if StrToInt(StringGrid1.Cells[3,i])>StrToInt(StringGrid1.Cells[3,j]) then
Добавить код
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
function BinSearch(min,max,val:integer):integer;
var mid,n:integer;
begin
n:=max;inc(max);inc(n);
while (max>min) do
   begin
   mid:=min+(max-min) div 2;
   if val<=StrToInt(Form1.StringGrid1.Cells[3,mid]) then max:=mid else min:=mid+1;
   end;
 if (max<n) and (StrToInt(Form1.StringGrid1.Cells[3,max])=val) then Result:=max
 else Result:=-1;
end;
обработку Button2Click заменить на
Delphi
1
2
3
4
5
6
7
8
9
procedure TForm1.Button2Click(Sender: TObject);
var
 i,n : integer;
begin
n:=BinSearch(1,14,StrToInt(Edit1.Text));
if n<0 then exit;
StringGrid2.Rows[StringGrid2.RowCount - 1].CommaText := StringGrid1.Rows[n].CommaText;
StringGrid2.RowCount := StringGrid2.RowCount + 1;
end;
1
Gregori7
0 / 0 / 0
Регистрация: 07.06.2017
Сообщений: 10
13.07.2017, 15:21  [ТС] 8
Massaraksh7, Большое спасибо! Все работает
0
13.07.2017, 15:21
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.07.2017, 15:21

Поиск Stringgrid
Не пойму как отобразить найденные строки (поиск идет по 2 столбцу) ...

Поиск в stringgrid
Есть заполненный стрингрид с событием StringGrid1SelectCell, нужно сделать...

Поиск в StringGrid
Доброго вечера всем. У меня просьба: помогите сделать поиск в таком стиле как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru