Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 07.06.2017
Сообщений: 24
1

Поиск в StringGrid

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

Author24 — интернет-сервис помощи студентам
Есть просто поиск по третьему столбцу, а нужно сделать бинарный поиск.
Сначала столбец сортируется, происходит поиск и выносит результат в 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)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.07.2017, 21:30
Ответы с готовыми решениями:

Delphi 7 Stringgrid Нужно сделать цикл для заполнения Stringgrid данными из другого Stringgrid
Нужно чтобы из Stringgrid1 данные переносились в Stringgrid2 Но ТОЛЬКО ПО УСЛОВИЮ Таблицы...

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

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

Поиск в StringGrid
Добрый день! Подскажите, пожалуйста, как сделать поиск данных в StringGrid через Edit

7
пофигист широкого профиля
4732 / 3167 / 858
Регистрация: 15.07.2013
Сообщений: 18,251
13.07.2017, 01:18 2
Цитата Сообщение от Gregori7 Посмотреть сообщение
а нужно сделать бинарный поиск.
Бинарный поиск "где" нужно сделать?
В СтрингГриде бинарный поиск нужно сделать???
0
0 / 0 / 0
Регистрация: 07.06.2017
Сообщений: 24
13.07.2017, 01:34  [ТС] 3
northener, да
0
пофигист широкого профиля
4732 / 3167 / 858
Регистрация: 15.07.2013
Сообщений: 18,251
13.07.2017, 01:54 4
Цитата Сообщение от Gregori7 Посмотреть сообщение
northener, да
Какой может быть "бинарный" поиск в СтригГриде, где кроме текста ничего нет?
Кто вам дал такую задачу? Или с какого бодуна вы сами её придумали?
0
0 / 0 / 0
Регистрация: 07.06.2017
Сообщений: 24
13.07.2017, 02:10  [ТС] 5
northener, в определенном столбце, третьем - цифры, именно по ним идет бинарный поиск. А выделить или перенести в СтригГрид нужно уже всю строку.
0
пофигист широкого профиля
4732 / 3167 / 858
Регистрация: 15.07.2013
Сообщений: 18,251
13.07.2017, 02:44 6
Цитата Сообщение от Gregori7 Посмотреть сообщение
northener, в определенном столбце, третьем - цифры, именно по ним идет бинарный поиск
Да хоть цифры, хоть числа. В ячейках Стринггрида нет ничего, кроме текста.
И ни по тексту, ни по цифрам, ни по числам бинарный поиск не имеет смысла.
Процитируйте ваше учебное задание "слово в слово ".
0
Айлурофил
441 / 375 / 107
Регистрация: 27.05.2017
Сообщений: 2,155
Записей в блоге: 1
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
0 / 0 / 0
Регистрация: 07.06.2017
Сообщений: 24
13.07.2017, 15:21  [ТС] 8
Massaraksh7, Большое спасибо! Все работает
0
13.07.2017, 15:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.07.2017, 15:21
Помогаю со студенческими работами здесь

Поиск в Stringgrid
Здравствуйте! Подскажите, пожалуйста, как сделать поиск данных в Stringgrid по определенному...

StringGrid и поиск
Есть массив из 2 столбцов-зависимость давления от времени. Далее у нас есть время. Как, зная это...

Поиск в StringGrid
Есть код поиска, полностью рабочий, но он делает поиск по всем символам нужного параметра, а нужно...

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


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru