Таблица 5.4. Значения свойств компонента stringGrid1
Свойство | Значение | ||
ColCount | |||
FixedCols | |||
RowCount | |||
DefaultRowHeight | |||
Height | |||
DefaultColWidth | |||
Width | |||
Options. goEditing | True | ||
Options. AlwaysShowEditing | True | ||
Options.goTabs | True | ||
В листинге 5.6 приведена процедура обработки события Onclick для командной кнопки Button1, которая вводит массив, выполняет поиск минимального элемента и выводит результат — номер и значение минимального элемента массива.
Листинг 5.6. Поиск минимального элемента массива
unit lookmin_;
Interface
Windows, Messages, SysUtils, Classes, Graphics,
Controls, Forms, Dialogs, StdCtrls, Grids;
Type
TForm1 = class(TForm)
Label1: TLabel;
Button1: TButton;
Label2: TLabel;
StringGrid1: TStringGrid;
procedure Button1Click(Sender: TObject);
private { Private declarations)
public { Public declarations }
end;
Var
Form1: TForm1;
Implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
Const
SIZE=5;
Var
a:array[l..SIZE]of integer; // массив целых
min:integer; // номер минимального элемента массива
i:integer; // номер элемента, сравниваемого с минимальным
Begin
// ввод массива
for i:=1 to SIZE do
a[i]:=StrToInt(StringGrid1.Cells[i-1,0]);
// поиск минимального элемента
min:=1; // пусть первый элемент минимальный
for i:=2 to SIZE do
if a[i]< a[min] then min:=i;
// вывод результата
label2.caption:='Минимальный элемент массива:'
+IntToStr(a[min]) +#13+'Номер элемента:'+ IntToStr(min);
end;
End.
На рис. 5.8 приведен вид диалогового окна приложения после щелчка на кнопке Поиск.
Рис. 5.8. Окно приложения Поиск минимального элемента массива
Поиск в массиве заданного элемента
Рис. 5.9. Диалоговое окно программы Поиск в массиве
Листинг 5.7. Поиск в массиве
unit s_found_;
Interface
Uses
Windows, Messages, SysUtils, Classes,
Graphics, Controls, Forms, Dialogs,
StdCtrls, Grids;
Type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Button1: TButton;
Edit2: TEdit;
StringGrid1: TStringGrid;
procedure Button1Click(Sender: TObject);
private { Private declarations}
public { Public declarations)
end;
Var
Form1: TForm1;
Implementation
{$R *.DFM}
{ поиск в массиве перебором }
procedure TForm1.Button1Click(Sender: TObject);
Const
SIZE=5;
Var
a: array [1..SIZE] of integer; //массив
obr: integer; // образец для поиска
found: boolean; // TRUE — совпадение образца с элементом
// массива
i: integer; // индекс элемента массива
Begin
// ввод массива
for i:=1 to SIZE do
a[i]:= StrToInt(StringGridl.Cells[i-1,0]);
// ввод образца для поиска
obr:= StrToInt(edit2.text);
// поиск
found:= FALSE; // пусть нужного элемента в массиве нет
i:= 1;
Repeat
if a[i] = obr then found:= TRUE
else i:= i+1;
until (i > SIZE) or (found = TRUE);
if found then ShowMessage('Совпадение с элементом номер '
+IntToStr(i)+#13+'Поиск успешен.')
else ShowMessage('Совпадений с образцом нет.');
end;
End.
Рис. 5.13. Компонент CheckBox
Таблица 5.6. Значения свойств компонента CheckBox1
Свойство | Значение | ||
Caption Checked | Выводить протокол True | ||
Листинг 5.8. Бинарный поиск в массиве
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:=l to SIZE do
a[i]:=StrToInt(StringGrid1.Cells[i-l,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 + 'Сравнений '
+ 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 // курсор в следующую ячейку таблицы
StringGridl.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.
а
б
Рис. 5.14. Примеры работы программы бинарного поиска в массиве