Смекни!
smekni.com

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