while (Cur<>nil) and (Cur.key<>aKey) do
begin
inc(aCount);
Cur:= Cur.next;
end;
if Cur=nil then
begin
result:='0';
Exit;
end else
begin
result:=Cur.key;
exit;
end;
end;
procedure TMas.DeleteAll;//удалениеконтейнера
var i:integer; Cur:TItem;
begin
for i:=1 to 10 do
begin
cur:=mas[i].Head.Getnext;
While Cur<>nil do
begin
mas[i].Head.next:=Cur.next;
Cur.Destroy;
cur:=mas[i].Head.next;
end;
end;
Hesh.Destroy;
Hesh:=nil;
end;
Procedure TMas.Extract(var aIndex:integer;var aCur:TItem);//Вывод:aIndex-текушийиндексмассива,aCur-текущийэл-тсписка
begin
aCur:=mas[aIndex].Head.next;
end;
Procedure Tmas.SaveHesh(FileName:String);//сохранениеконтейнеравфайле
var Current:TItem;tf:TextFile;i:integer;
begin
AssignFile(tf,FileName);
rewrite(tf);
for i:=1 to 10 do
begin
Current:=mas[i].Head.Getnext;
while Current<>Nil do
begin
Write(tf,Current.key+' ');
Current:=Current.next;
end;
Writeln(tf);
end;
CloseFile(tf);
end;
Procedure TMas.LoadHesh(FileName:String);//Загрузкаконтейнераизфайла
var tf:TextFile;s,si,Key:string;b,bf:Boolean;i:integer;
begin
b:=False;
AssignFile(tf,FileName);
Reset(tf);
while Not Eof(tf) do
begin
Readln(tf,s);
bf:=False;
si:='';
for i:=1 to Length(s) do
if s[i]<>' ' then si:=si+s[i] else
if b=False then
begin
b:=True;
Key:=si;
Hesh:=TMas.Create(Key);
bf:=true;
si:='';
end else
begin
if bf=False then
begin
bf:=True;
Key:=si;
end else
begin
Hesh.Add(SI,0);
end;
si:='';
end; {end For}
end;{end While}
CloseFile(tf);
end;
end.
unit Main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls, Buttons, ExtCtrls, Menus, ComCtrls;
type
TForm1 = class(TForm)
Panel1: TPanel;
OperationGroup: TRadioGroup;
Edit1: TEdit;
Inicial: TBitBtn;
CloseButton: TBitBtn;
StringGrid1: TStringGrid;
MainMenu1: TMainMenu;
SaveDialog1: TSaveDialog;
OpenDialog1: TOpenDialog;
AddGroup: TRadioGroup;
N5: TMenuItem;
Save: TMenuItem;
Load: TMenuItem;
CloseMenu: TMenuItem;
StatusBar1: TStatusBar;
New: TMenuItem;
SavaBtn: TBitBtn;
LoadBtn: TBitBtn;
procedure FormActivate(Sender: TObject);
procedure CloseButtonClick(Sender: TObject);
procedure InicialClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure SaveClick(Sender: TObject);
procedure LoadClick(Sender: TObject);
procedure CloseMenuClick(Sender: TObject);
procedure NewClick(Sender: TObject);
procedure OperationGroupClick(Sender: TObject);
procedure SavaBtnClick(Sender: TObject);
procedure LoadBtnClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Implementation
uses ClassHeshProg;
{$R *.dfm}
procedure Output;
var i,j:integer;Cur:TItem;
begin
for i:=1 to 10 do
begin
j:=1;
Hesh.Extract(i,Cur);
While Cur<>nil do
begin
form1.StringGrid1.Cells[i-1, j]:=Cur.GetKey;
Cur:=Cur.Getnext;
inc(j);
end;
end;
end;
procedure TForm1.FormActivate(Sender: TObject);
var i:integer;
begin
for i:=1 to form1.StringGrid1.ColCount do
begin
form1.StringGrid1.Cols[i-1].Add(inttostr(i));
end;
form1.StatusBar1.Panels.Add.Text:='Объектнаяреализация HESH-поиска.';
form1.OperationGroup.ItemIndex:=0;
form1.AddGroup.ItemIndex:=1;
end;
procedure TForm1.CloseButtonClick(Sender: TObject);
begin
if MessageDlg('Сохранитьизменения?',mtConfirmation,[mbYes, mbNo],0)=mrYes then
begin
SaveClick(Sender);
NewClick(Sender);
Close; end else
begin
Hesh.DeleteAll;
Close;
end;
end;
procedure TForm1.InicialClick(Sender: TObject);
var i,j,count:integer;
begin
if Hesh=nil then
begin
MessageDlg('HESH-таблица не создана. Создаю таблицу.',MtError,[mbok],1);
Hesh:=TMas.Create(''); end else
case OperationGroup.ItemIndex of
0:begin {Add}
If Edit1.Text= '' then MessageDlg('Введитезначение!',MtError,[mbOK],1) else
if AddGroup.ItemIndex=0 then
begin {AddFirst}
j:=Hesh.Add(Edit1.Text,0);
if j<>0 then MessageDlg('Конфликтвячейке '+inttostr(j),MtInformation,[mbok],1);
MessageDlg('Ключсзначением '+Edit1.Text+' добавлен.',MtInformation,[mbok],1);
end else
begin {AddLast}
j:=Hesh.Add(Edit1.Text,1);
if j<>0 then MessageDlg('Конфликтвячейке '+inttostr(j),MtInformation,[mbok],1);
MessageDlg('Ключсзначением '+Edit1.Text+' добавлен.',MtInformation,[mbok],1);
end;
Output;
end;
1:begin {Search}
If Edit1.Text= '' then MessageDlg('Введитезначение!',MtError,[mbOK],1) else
if Hesh.Search(Edit1.Text,Count)='0' then
MessageDlg('Элементненайден!',MtError,[mbok],1) else
begin
MessageDlg('Элементнайденсозначением '+Edit1.Text,MtInformation,[mbok],1);
StatusBar1.Panels.Clear;
StatusBar1.Panels.Add.Text:='Количествосравнений : '+inttostr(Count);
end;
end;
2: begin {Clear}
NewClick(Sender);
end;
end;{end case}
Edit1.SetFocus;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Hesh:=TMas.Create('');
end;
procedure TForm1.SaveClick(Sender: TObject);
begin
if SaveDialog1.Execute then
if Hesh<>Nil then begin
Hesh.SaveHesh(SaveDialog1.FileName);
NewClick(Sender); end else
MessageDlg('HESH-таблицанесоздана.',MtError,[mbok],1);
end;
procedure TForm1.LoadClick(Sender: TObject);
begin
NewClick(Sender);
if OpenDialog1.Execute then
begin
Hesh.LoadHesh(OpenDialog1.FileName);
Output;
end;
end;
procedure TForm1.CloseMenuClick(Sender: TObject);
begin
CloseButtonClick(Sender);
end;
procedure TForm1.NewClick(Sender: TObject);
var i,j:integer;
begin
if Hesh<>nil then
begin
Hesh.DeleteAll;
for i:=0 to 10 do for j:=1 to 10 do
begin
stringgrid1.Cells[i,j]:='';
end;
end;
end;
procedure TForm1.OperationGroupClick(Sender: TObject);
begin
case OperationGroup.ItemIndex of
0:begin
Inicial.Caption:='Добавить';
Edit1.Text:='';
end;
1:begin
Inicial.Caption:='Найти';
Edit1.Text:='';
end;
2:begin
Inicial.Caption:='Очистить';
Edit1.Text:='';
end;
end;
end;
procedure TForm1.SavaBtnClick(Sender: TObject);
begin
SaveClick(Sender);
end;
procedure TForm1.LoadBtnClick(Sender: TObject);
begin
LoadClick(Sender);
end;
end.
7. Список использованной литературы.
1. Иванов А.Г., Карпова А.В., Семик В.П., Филинов Ю.Е. Объектно-ориентированная среда программирования. Системы и средства информатики. Вып.2. М.: Наука, 1991.
2. Иванова Г.С., Ничушкина Т.Н., Пугачев Е. «Объектно-ориентированное программирование: Учебник для вузов Изд. 2-е», М: МГТУ им. Н.Э.Баумана
3. Фаронов В.В. Delphi 2005. Язык, среда, разработка приложений. – СПб.: Питер, 2005 г.
4. Вирт Н. Алгоритмы и структуры данных. – Изд. Невский Диалект, 2001 г.
5. Козин А. Н. «Структуры и алгоритмы обработки данных» ТИСБИ, 2003