49414 (Хэш поиск), страница 2

2016-07-30СтудИзба

Описание файла

Документ из архива "Хэш поиск", который расположен в категории "". Всё это находится в предмете "информатика" из 1 семестр, которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "курсовые/домашние работы", в предмете "информатика, программирование" в общих файлах.

Онлайн просмотр документа "49414"

Текст 2 страницы из документа "49414"

count : integer; // текущее число объектов в контейнере

public

constructor Create;

function GetCount : integer;

function Add (aFig : TFigure; ai : integer) : integer;

function Delete (ai : integer) : integer;

function Search (aFig : TFigure) : integer;

procedure ShowAll;

procedure MoveAll (dx, dy : integer);

procedure FreeAll;

end;

5.Описание классов

В данной объектной программе используется 3 класса:

  • TItem

  • TList

  • TMas

Класс TItem хранит элемент вспомогательного линейного списка. Имеет в своем составе 2 закрытых свойства: Key – содержит ключ, Next – адрес на следующий элемент. Описание методов класса:

Constructor Create(aNext:TItem;aKey:string) - создание 1 элемента

function Getnext:TItem - дать адрес на след. элемент

procedure SetNext(aNext:TItem) - изменение адреса

Function GetKey:string – возврат ключа

Класс TList представляет собой набор объектов класса TItem. Имеет в своем составе 1 свойство – Head, который является заголовком линейного списка.

Описание методов класса:

constructor Create(aKey:string) - создание пустого списка с заголовком

function AddFirst(aKey:string):Boolean - добавление в начало списка. Возвращает true при успешном добавлении.

function AddLast(aKey:string):boolean - добавление в конец списка. Возвращает true при успешном добавлении.

function GetHead:TItem - дать заголовка

Класс TMas является контейнерным классом. Имеет в своем составе 1 свойство – объявление 10ти элементного массива типа TList. Иначе говоря объявляем массив списков. Описание методов класса:

Constructor Create(aKey:string) - создание масива указателей на списков

function HeshFunction(aKey:string):integer;virtual - HESH-функция с возможностью переопределения. Возвращает ячейку массива.

function Add(aKey:string;found:byte):byte – Функция добавления. Типы добавления: Found:0- в начало списка,1-в конец списка. Возвращает: 0 - без конфликтное добавление, иначе ячейку j

function Search(aKey:string;var aCount:integer):string – Функция поиска заданного элемента Hesh-таблицы. aCount – количество сравнений. Возвращает: ‘0’ – элемент найден, иначе сам ключ.

procedure DeleteAll - удаление всей структуры

Procedure SaveHesh(FileName:String) - сохранение контейнера в текстовом файле с именем файла

Procedure LoadHesh(FileName:String)- загрузка контейнера из текстового файла

Procedure Extract(var aIndex:integer;var aCur:TItem) – Процедура извлечения матрицы элементов для использования в Demo Unit. Используется для вывода структуры на экран. Вывод :aIndex - текущий индекс массива, aCur - текущий элемент линейного списка

UML – диаграмма взаимодействия классов:

TItem

Элемент списка

Next

Key


TList

Линейный список

Head


TMas

Контейнер

Mas:Array[0..10]of TList

4. Описание пользовательского интерфейса.

В данной программе используются следующие компоненты Label, Edit, StringGrid, Menu, BitBtn, RadioGroup, StatusBar.

Текстовой компоненты Label, Edit, StringGrid:

Метки(Label) предназначены для размещения на экране текстовой информации, содержащей различные пояснения, названия, заголовки и т.д.

Строка ввода Edit позволяет вводить и редактировать одну строку текста.

Таблица StringGrid представляет собой сетку в которой содержаться строки и столбцы.

RadioGroup – это набор зависимых между собой переключателей.

Кнопка Button: основное назначение кнопки – формирование события при нажатии на неё. Кнопка может быть размещена в любом месте формы, где есть необходимость выполнить какие-либо действия при её нажатии.

Кнопка BitBtn: на этой кнопке в отличие от Button можно размещать значки.

Добавление ключа: вводим в редактор Edit ключ, нажимаем кнопку «Добавить», в зависимости от значения ключа получаем результат в виде сообщения MessageDlg:



Поиск: задаем искомый ключ в редактор ввода Edit, нажимаем кнопку«Найти», выдается сообщение об успешности поиска, если элемент найден, то в панели задач указывается количество сравнений .

  1. Листинг и описание всех классов библиотеки на DP.

6.1. Описание всех классов.

unit ClassHeshProg;

interface

type

TItem=class{класс-элемент списка}

private

key: string;

next: TItem;

public

Constructor Create(aNext:TItem;aKey:string);//создание 1 элемента

function Getnext:TItem;//дать адрес на след. элемент

procedure SetNext(aNext:TItem);//изм. адрес

Function GetKey:string;//дать ключ

end;

{***********************************}

TList=class {класс списка}

private

Head:TItem;//заголовок списка

public

constructor Create(aKey:string);//создание списка

function AddFirst(aKey:string):boolean;//добавление перед заголовком

function AddLast(aKey:string):boolean;//добавление после заголовка

function GetHead:TItem;// дать заголовка

end;

{***********************************}

TMas=class {класс-контейнер массива списков}

private

mas:array [1..10]of TList;

public

Constructor Create(aKey:string);//создание масива указателей списков

function HeshFunction(aKey:string):integer;virtual;//HESH-функция с возможностью переопределения

function Add(aKey:string;found:byte):byte;//Found:0-до,1-перед, Возвращает:0-без конфликта,j-ячейка

function Search(aKey:string;var aCount:integer):string;//поиск элемента Hesh-таблицы

procedure DeleteAll;//удаление всей таблицы

Procedure SaveHesh(FileName:String);//сохранение контейнера в файле

Procedure LoadHesh(FileName:String);//загрузка контейнера из файла

Procedure Extract(var aIndex:integer;var aCur:TItem);//Вывод:aIndex-текуший индекс массива,aCur-текущий эл-т списка

end;

{***********************************}

var Hesh:TMas;

implementation

uses Main,SysUtils,Dialogs;

constructor TItem.Create(aNext:TItem;aKey:string);

begin

next:=aNext;

Key:=aKey;

end;

function TItem.Getnext:TItem;

begin

Result:=next;

end;

procedure TItem.SetNext(aNext:TItem);

begin

next:=aNext;

end;

Function TItem.GetKey:string;

begin

Result:=Key;

end;

{*************************************}

constructor TList.Create(aKey:String);

begin

Head:=TItem.Create(nil,aKey);

end;

function TList.AddFirst(aKey:string):boolean;

var Temp,Current,Previos:TItem;

begin

previos:=Head;

current:=Head.Getnext;

Temp:=TItem.Create(current,aKey);

Temp.next:=current;

previos.next:=Temp;

result:=true;

end;

function TList.AddLast(aKey:string):boolean;

var Temp,Current:TItem;

begin

// Внесение нового элемента в список

Current:=Head.Getnext;

Temp:=TItem.Create(Head.next,aKey);

Head.next:=Temp;

result:=true;

end;

function TList.GetHead:TItem;

begin

Result:=Head;

end;

{*************************************}

constructor TMas.Create(aKey:string);

var i:integer;

begin

for i:=1 to 10 do mas[i]:=TList.Create(aKey);

end;

function TMas.HeshFunction(aKey:string):integer; //Hesh-функция

var x,i,j:integer;

begin

x:= 0;

for i:=1 to length(aKey) do x:=ord(aKey[i])+x; // Определение значения строки

j:=(x mod 10)+1; //Определение элемента

result:=j;

end;

function TMas.Add(aKey:string;found:byte):byte;

var j:integer;

begin

j:=HeshFunction(aKey);

if Found=0 then

begin

if mas[j].Head.next<>nil then result:=j else result:=0;

mas[j].AddFirst(aKey);

end else

if found=1 then

begin

if mas[j].Head.next<>nil then result:=j else result:=0;

mas[j].AddLast(aKey);

end;

end;

function Tmas.Search(aKey:string;var aCount:integer):string;

var j:integer; Cur:TItem;

begin

//Поиск в списке

j:=HeshFunction(aKey);

aCount:=1;

Cur:= mas[j].GetHead.Getnext;

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.

    1. Описание Demo-программы.

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;

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Нет! Мы не выполняем работы на заказ, однако Вы можете попросить что-то выложить в наших социальных сетях.
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
4121
Авторов
на СтудИзбе
667
Средний доход
с одного платного файла
Обучение Подробнее