247 lines
5.9 KiB
ObjectPascal
247 lines
5.9 KiB
ObjectPascal
|
|
unit AlgorithmsExampleMain;
|
||
|
|
|
||
|
|
interface
|
||
|
|
|
||
|
|
uses
|
||
|
|
{$IFDEF WIN32}
|
||
|
|
Windows, Messages, Forms, ComCtrls, Graphics, Controls,
|
||
|
|
Dialogs, StdCtrls,
|
||
|
|
{$ENDIF}
|
||
|
|
{$IFDEF LINUX}
|
||
|
|
QForms, QStdCtrls, QControls, QComCtrls,
|
||
|
|
{$ENDIF}
|
||
|
|
SysUtils, Classes,
|
||
|
|
JclContainerIntf, JclArrayLists, JclLinkedLists;
|
||
|
|
|
||
|
|
type
|
||
|
|
TMainForm = class(TForm)
|
||
|
|
PageControl1: TPageControl;
|
||
|
|
tbsApply: TTabSheet;
|
||
|
|
tbsFind: TTabSheet;
|
||
|
|
tbsCountObject: TTabSheet;
|
||
|
|
tbsCopy: TTabSheet;
|
||
|
|
tbsReverse: TTabSheet;
|
||
|
|
tbsSort: TTabSheet;
|
||
|
|
btnApplyGenerate: TButton;
|
||
|
|
btnApply: TButton;
|
||
|
|
lbxApply: TListBox;
|
||
|
|
btnFindGenerate: TButton;
|
||
|
|
btnFind: TButton;
|
||
|
|
lbxFind: TListBox;
|
||
|
|
edtFind: TEdit;
|
||
|
|
btnCountGenerate: TButton;
|
||
|
|
btnCount: TButton;
|
||
|
|
lbxCount: TListBox;
|
||
|
|
edtCount: TEdit;
|
||
|
|
btnCopyGenerate: TButton;
|
||
|
|
btnCopy: TButton;
|
||
|
|
lbxCopySrc: TListBox;
|
||
|
|
lbxCopyDes: TListBox;
|
||
|
|
btnReverseGenerate: TButton;
|
||
|
|
btnReverse: TButton;
|
||
|
|
lbxReverse: TListBox;
|
||
|
|
btnSortGenerate: TButton;
|
||
|
|
btnSort: TButton;
|
||
|
|
lbxSort: TListBox;
|
||
|
|
lblFound: TLabel;
|
||
|
|
lblCount: TLabel;
|
||
|
|
edtApply: TEdit;
|
||
|
|
procedure btnApplyGenerateClick(Sender: TObject);
|
||
|
|
procedure FormCreate(Sender: TObject);
|
||
|
|
procedure btnApplyClick(Sender: TObject);
|
||
|
|
procedure btnFindGenerateClick(Sender: TObject);
|
||
|
|
procedure btnFindClick(Sender: TObject);
|
||
|
|
procedure btnCountGenerateClick(Sender: TObject);
|
||
|
|
procedure btnCountClick(Sender: TObject);
|
||
|
|
procedure btnCopyGenerateClick(Sender: TObject);
|
||
|
|
procedure btnCopyClick(Sender: TObject);
|
||
|
|
procedure btnReverseGenerateClick(Sender: TObject);
|
||
|
|
procedure btnReverseClick(Sender: TObject);
|
||
|
|
procedure btnSortGenerateClick(Sender: TObject);
|
||
|
|
procedure btnSortClick(Sender: TObject);
|
||
|
|
private
|
||
|
|
public
|
||
|
|
List: IJclList;
|
||
|
|
end;
|
||
|
|
|
||
|
|
var
|
||
|
|
MainForm: TMainForm;
|
||
|
|
|
||
|
|
implementation
|
||
|
|
|
||
|
|
{$R *.dfm}
|
||
|
|
|
||
|
|
uses JclAlgorithms;
|
||
|
|
|
||
|
|
procedure TMainForm.btnApplyGenerateClick(Sender: TObject);
|
||
|
|
var
|
||
|
|
I: Integer;
|
||
|
|
It: IJclIterator;
|
||
|
|
begin
|
||
|
|
List.Clear;
|
||
|
|
for I := 1 to 10 do
|
||
|
|
List.Add(TObject(I));
|
||
|
|
lbxApply.Items.Clear;
|
||
|
|
It := List.First;
|
||
|
|
while It.HasNext do
|
||
|
|
lbxApply.Items.Add(IntToStr(Integer(It.Next)));
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure TMainForm.FormCreate(Sender: TObject);
|
||
|
|
begin
|
||
|
|
List := TJclArrayList.Create(16, False);
|
||
|
|
end;
|
||
|
|
|
||
|
|
function Add2(AObject: TObject): TObject;
|
||
|
|
begin
|
||
|
|
Result := TObject(Integer(AObject) + 2);
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure TMainForm.btnApplyClick(Sender: TObject);
|
||
|
|
var
|
||
|
|
It: IJclIterator;
|
||
|
|
Value: Integer;
|
||
|
|
begin
|
||
|
|
Value := StrToIntDef(edtApply.Text, 0);
|
||
|
|
JclAlgorithms.Apply(List.First, Value, Add2);
|
||
|
|
lbxApply.Items.Clear;
|
||
|
|
It := List.First;
|
||
|
|
while It.HasNext do
|
||
|
|
lbxApply.Items.Add(IntToStr(Integer(It.Next)));
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure TMainForm.btnFindGenerateClick(Sender: TObject);
|
||
|
|
var
|
||
|
|
I: Integer;
|
||
|
|
It: IJclIterator;
|
||
|
|
begin
|
||
|
|
List.Clear;
|
||
|
|
for I := 1 to 10 do
|
||
|
|
List.Add(TObject(I));
|
||
|
|
lbxFind.Items.Clear;
|
||
|
|
It := List.First;
|
||
|
|
while It.HasNext do
|
||
|
|
lbxFind.Items.Add(IntToStr(Integer(It.Next)));
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure TMainForm.btnFindClick(Sender: TObject);
|
||
|
|
var
|
||
|
|
It: IJclIterator;
|
||
|
|
Value: Integer;
|
||
|
|
begin
|
||
|
|
Value := StrToIntDef(edtFind.Text, 0);
|
||
|
|
It := JclAlgorithms.Find(List.First, List.Size, TObject(Value), SimpleCompare);
|
||
|
|
if It = nil then
|
||
|
|
lblFound.Caption := 'Not found'
|
||
|
|
else
|
||
|
|
lblFound.Caption := 'Found';
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure TMainForm.btnCountGenerateClick(Sender: TObject);
|
||
|
|
var
|
||
|
|
I: Integer;
|
||
|
|
It: IJclIterator;
|
||
|
|
begin
|
||
|
|
Randomize;
|
||
|
|
List.Clear;
|
||
|
|
for I := 1 to 10 do
|
||
|
|
List.Add(TObject(Random(10) + 1));
|
||
|
|
lbxCount.Items.Clear;
|
||
|
|
It := List.First;
|
||
|
|
while It.HasNext do
|
||
|
|
lbxCount.Items.Add(IntToStr(Integer(It.Next)));
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure TMainForm.btnCountClick(Sender: TObject);
|
||
|
|
var
|
||
|
|
Count: Integer;
|
||
|
|
Value: Integer;
|
||
|
|
begin
|
||
|
|
Value := StrToIntDef(edtCount.Text, 0);
|
||
|
|
Count := JclAlgorithms.CountObject(List.First, List.Size, TObject(Value), SimpleCompare);
|
||
|
|
lblCount.Caption := IntToStr(Count);
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure TMainForm.btnCopyGenerateClick(Sender: TObject);
|
||
|
|
var
|
||
|
|
I: Integer;
|
||
|
|
It: IJclIterator;
|
||
|
|
begin
|
||
|
|
Randomize;
|
||
|
|
List.Clear;
|
||
|
|
for I := 1 to 10 do
|
||
|
|
List.Add(TObject(Random(10) + 1));
|
||
|
|
lbxCopySrc.Items.Clear;
|
||
|
|
It := List.First;
|
||
|
|
while It.HasNext do
|
||
|
|
lbxCopySrc.Items.Add(IntToStr(Integer(It.Next)));
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure TMainForm.btnCopyClick(Sender: TObject);
|
||
|
|
var
|
||
|
|
AnotherList: IJclList;
|
||
|
|
It: IJclIterator;
|
||
|
|
begin
|
||
|
|
AnotherList := TJclArrayList.Create(16, False);
|
||
|
|
JclAlgorithms.Generate(AnotherList, 10, TObject(0));
|
||
|
|
JclAlgorithms.Copy(List.First, List.Size, AnotherList.First);
|
||
|
|
lbxCopyDes.Items.Clear;
|
||
|
|
It := AnotherList.First;
|
||
|
|
while It.HasNext do
|
||
|
|
lbxCopyDes.Items.Add(IntToStr(Integer(It.Next)));
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure TMainForm.btnReverseGenerateClick(Sender: TObject);
|
||
|
|
var
|
||
|
|
I: Integer;
|
||
|
|
It: IJclIterator;
|
||
|
|
begin
|
||
|
|
List.Clear;
|
||
|
|
for I := 1 to 10 do
|
||
|
|
List.Add(TObject(I));
|
||
|
|
lbxReverse.Items.Clear;
|
||
|
|
It := List.First;
|
||
|
|
while It.HasNext do
|
||
|
|
lbxReverse.Items.Add(IntToStr(Integer(It.Next)));
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure TMainForm.btnReverseClick(Sender: TObject);
|
||
|
|
var
|
||
|
|
It: IJclIterator;
|
||
|
|
begin
|
||
|
|
JclAlgorithms.Reverse(List.First, List.Last);
|
||
|
|
lbxReverse.Items.Clear;
|
||
|
|
It := List.First;
|
||
|
|
while It.HasNext do
|
||
|
|
lbxReverse.Items.Add(IntToStr(Integer(It.Next)));
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure TMainForm.btnSortGenerateClick(Sender: TObject);
|
||
|
|
var
|
||
|
|
I: Integer;
|
||
|
|
It: IJclIterator;
|
||
|
|
begin
|
||
|
|
Randomize;
|
||
|
|
List.Clear;
|
||
|
|
for I := 1 to 10 do
|
||
|
|
List.Add(TObject(Random(10) - 5));
|
||
|
|
lbxSort.Items.Clear;
|
||
|
|
It := List.First;
|
||
|
|
while It.HasNext do
|
||
|
|
lbxSort.Items.Add(IntToStr(Integer(It.Next)));
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure TMainForm.btnSortClick(Sender: TObject);
|
||
|
|
var
|
||
|
|
It: IJclIterator;
|
||
|
|
begin
|
||
|
|
JclAlgorithms.Sort(List, 0, 9, IntegerCompare);
|
||
|
|
lbxSort.Items.Clear;
|
||
|
|
It := List.First;
|
||
|
|
while It.HasNext do
|
||
|
|
lbxSort.Items.Add(IntToStr(Integer(It.Next)));
|
||
|
|
end;
|
||
|
|
|
||
|
|
end.
|
||
|
|
|