Поиск минимального (максимального) элемента массива




Таблица 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. Примеры работы программы бинарного поиска в массиве



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-08-08 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: