Реферат Хеш пошук

Міністерство освіти і науки РФ

Академія управління «>ТИСБИ»

Факультет інформаційних технологій

Курсова робота

на уроках «>Объектно-ориентированное програмування»

тема: «>Объектная реалізаціяхеш-поиска»

>Виполнил: студент групиИ-311

>Хуснутдинов А.І.

Викладач:

Козин О.Н

Казань 2006


>Оглавление.

1. Постановказадачи……………………………………………………....3

3. Пошук з допомогоюХеш-функций……………………………...3

2. Основні поняття об'єктної технології ……….…………………5

5. Описклассов………………………………………………………9

4. Опис користувальницькогоинтерфейса……………………….......11

6.Листинг і опис всіх класів бібліотеки наDP….…………….14

7. Список використаноїлитератури………………………………...25


1.         Постановка завдання.

Мета роботи: розробка набору взаємозалежних класів для реалізаціїHash-поиска як спеціалізованого контейнера. Дозвіл конфліктів з допомогою методу відкритогохеширования (методом ланцюжків).

Створення зручного користувальницького інтерфейсу й одержання навичок роботи з взаємопов'язаними класами.

Набір операцій:

1. Додавання:

>1.1.В початок списку;

>1.2.В кінець списку;

2. Видалення всього контейнера;

3. Пошук заданого елемента;

4. Повний прохід поHash таблиці;

5. Збереження таблиці в зовнішньому файлі;

6. Завантаження таблиці із зовнішнього файла;


>2.Поиск з допомогоюХеш-функций.

 

2.1. Основні поняття.

Методхеш-поиска вважатимуться майже ідеалом в серед пошукових методів. Він ось у чому. Деякі елементи розподіляються в масиві спеціальним чином. Для обчислення індексу розміщення осередки по вхідному ключу використовується спеціальна функція, що називаєтьсяхеш-функцией.

Масив, заповнений елементами, обумовленоюхеш-функцией, називаєтьсяхеш-таблицей.

Простахеш-функция:

>h(ai)=(aimodm) + 1;

Хорошою єхеш-функция, яка задовольняє наступним умовам:

· Функція має бути дуже простий з обчислювальної погляду

· Функція повинна розподіляти ключі вхеш-таблице максимально рівномірно.

Якщо дві різні ключа претендують однією й саму осередок масиву, така ситуація називається конфліктом ключів.

Важливим практичним прикладом без конфліктної ситуації є будування таблиці ключових слів впрограммах-трансляторах з мов програмування. Тут набір ключових слів постійне, змінюючись лише за зміні версії транслятора, з другого боку, обробка транслятором вхідного тексту мовою програмування вимагає багаторазового і дуже швидкого розпізнавання у цьому тексті ключових слів мови.

Аби вирішити проблеми з конфліктуючими ключами запропонували кілька методів, які можна згрупувати на дві основні групи:

· Відкритехеширование

· Внутрішнє змішування

У цьому курсової роботі ми подивимося відкритехеширование.

>2.2.Откритоехеширование.

Саму ідею відкритогохеширования проста: зв'язати все елементи з однією і тим самим значеннямхеш-функции у допоміжний лінійний список.

індекс ключ покажчики
1

>ai

>h(ai)=1

>aj,h(aj)=1

 

>at,h(at)=1

 

>af,h(af)=1

 
початок

кінець

2

>nil

>nil

3

>as

>h(as)=3

>nil

>nil

4

>ak

>h(ak)=4

>ar,h(ar)=4

 
початок

кінець

>m

>nil

>nil

Алгоритми побудови й пошукухеш таблиці.

Побудова:

· Знаходимо значенняхеш функції і з цього значенням входимо в таблицю

· Якщо вона порожня, то записуємо у ній ключ

· Якщо вона зайнята, то порівнюємо ключ з заданим ключем:

1. якщо ключі збігаються, то обробляємо повторний ключ

2. інакше додаємо новий ключ насамкінець списку

Пошук:

· Знаходимо значенняхеш функції для шуканого ключа і до цього значенням входимо в таблицю

· Якщо осередок порожня, то пошук закінчується невдачею

· Якщо вона порожня, то виконуємо порівняння ключів:

1. Якщо ключі збігаються, то пошук закінчується впродовж одного порівняння

2. Інакше організуємо перегляд допоміжного списку з позитивним або негативним результатом.

Для цього методу велике значення має тут рівномірність розподілу ключів похеш-таблице, який гарантує короткі допоміжні списки і тим самим зменшує число порівнянь у пошуку. Найгіршим є випадок, коли всім ключівхеш-функция дає те й теж значення, і всі елементи розподіляються на один довгий лінійний список.

Іншим чинником, впливає на ефективність відкритогохеширования, є розмірхеш-таблици стосовно числу вхідних даних. Якщо такі величини рівні, то теоретично можна уникнути лінійних списків, якщо розрив між ключами знімаються конфлікти. Насправді рекомендують вибирати розмірхеш-таблици рівнимn/2.


3. Основні поняття об'єктної технології

 

1.   Об'єкти і класи.

Об'єкт – це будь-яка сутність, має деякі набір властивостей і що має деяким поведінкою.

Властивість об'єкта описується, як звичайні поля даних. У цих полях зберігаються значення відповідних властивостей.

Типи полів:

1. Найпростіші примітивні типи.

2.Структурированние типи.

3.Объектние властивості які мають з себе об'єкти тієї ж самої або інший природи. (наявність об'єктних властивостей є виявом однієї з способів взаємодії об'єктів, саме композицією об'єктів, що використовується в курсової програмі)

Набір властивостей об'єкта створюється в описах об'єкта й о подальшому змінюється. Поведінка об'єкта описується набором методів. Кожен метод представляє з себе програмний код.

Об'єднання разом оброблюваних даних, і програмного коду їх опрацювання називається ознакоюинкапсуляции.

Можна виокремити такі типові методи об'єктів:

1.          Конструктори,деструктори

Конструктор відпо-відає створення нової об'єкта т. е за виділення йому пам'яті і завжди за початкову ініціалізацію цієї пам'яті. Конструктор викликається раніш від усіх інших методів. До сформування однієї й тієї ж об'єкта можна передбачити кілька різних конструкторів, які по-різномуинициализируют властивості створюваного об'єкта.

>Деструктор відпо-відає руйнація об'єкта тобто звільнення виділеної об'єкту пам'яті.

2.          Методи, з допомогою яких можна почути поточне значення тих чи інших властивостей. Зазвичай кожному за властивості створюється свій такий метод. Такі методи прийнято називати з префіксаGet. (Приклад:GetFIO)

3.          Методи, які змінюють значення однієї чи кількох властивостей. Такі методи прийнято називати з префіксаSet . (Приклад:SetFIO).

ВикористанняSet іGet методів пояснюється ось чим:

По принципам об'єктного підходу властивості об'єкта повинні бути закриті для стороннього прямого доступу. Доступ до властивостями дозволяється лише крізь викликиGet іSet методів. Це є ще однією проявом принципуинкапсуляции: приховування інформацію про об'єкті. У цьому вся випадки внутрішньо сховище даних об'єкта повністю закрито відпостореннего впливу. Набір методів доступу утворюють відкритий інтерфейс об'єкта.

Крім названих методів об'єкт може мати унікальні методи, що визначають його функціональність.

Клас представляє з себе шаблон описи однотипних об'єктів.

За підсумками одного класу можна створити будь-яке число об'єктів, званих екземплярами класів. Саме за описі класу перераховуються властивості і силові методи відповідних об'єктів. З описи класу починається написання будь-який об'єктної програми.

2.   Опис класів

Опис класів включає у собі:

1.          Заголовок десь із класу ім'ям класу

Приклад:typeMyMasClass =class.

2.          Тіло класу, що містить перелік властивостей (поля даних) і перелік методів зазвичай поставлених тільки свої заголовками.

Приклад:

private

 >mas:array [>1..10]ofTList;// властивість

 public

 >ConstructorCreate(aKey:string);// методи

***

>еnd;

3.          Програмна реалізація методів (код методу).

Приклад:

>constructorTMas.Create(aKey:string);

>vari:integer;

>begin

 >fori:=1 to 10domas[i]:=TList.Create(aKey);

end;

Методи, які мають програмної реалізації, називаються абстрактними.

Клас, що хоча б тільки абстрактний метод, називається абстрактним.Объекти-екземпляри такого класу створювати не можна.

 

3. Композиція класів.

Композиція виникає, коли той чи кілька властивостей класу представляють з себе об'єктів жодних інших класів.

Механізм композиції дозволяє створювати складні з простіших об'єктів. Перевагою композиції є зокрема можливість використання раніше створеного коду.

До сформування програми в котом використовується композиція треба:

· При описі нового класу включити в набір його властивостей хоча одне об'єктне властивість

· Під час написання об'єкта попередньо мали бути зацікавленими оголошено що входять до його підпорядкування об'єкти.

· Використання методів вкладених об'єктів

Приклад:

private

 >mas:array [1..10] ofTList;

Тут оголошується масив з об'єктної перемінноїmas лінійних списків, що належить класуTList.

4. Контейнери.

Об'єкт, призначенням якого є зберігання об'єктів інших типів і управління ними, називають контейнером. Іноді вміст контейнерів називають послідовностями.

>Контейнерние класи – поширений прийом розробки класів, використовує механізми композиції і наповнення для підключення деяких об'єктів до управляючому об'єкту- контейнера.

>Контейнерний клас містить у своїй ухвалі кілька об'єктних полів іполей-указателей на об'єкти. Якщо контейнерний клас використовує механізм композиції, то тип і кількість керованих об'єктів жорстко визначено типом і пишатися кількістю об'єктних полів. Якщо він використовує механізм наповнення, то підключення реалізується через покажчики, отже, контейнер може керувати як об'єктами деякого базового, і об'єктами всіх нащадків цього.

>Контейнерние класи реалізують деякі типові структури, такі як, масив, стік чи список, і типові операції над даними, які можна записані у ці структури чи прочитані їх.

Основна операція контейнерного класу – послідовна обробка об'єктів. Така обробка забезпечується 2 способами:

1.    Базується утворенні спеціальної процедури перегляду всіх елементів контейнера. У її як параметра передається ім'я функції чи процедури, реалізує необхідної обробки елемента контейнера.

2.    Реалізується через визначенняитератора чи класуитераторов, підходящого для цього виду контейнера.

Приклад контейнерного класу:

>TContainer =class

 private

 >Arrs :array [1..100] ofTFigure; // масив поліморфних покажчиків

 // на графічні постаті;

 >count :integer; // поточне число об'єктів в контейнері

 public

 >constructorCreate;

 >functionGetCount :integer;

 >functionAdd (>aFig :TFigure;ai :integer) :integer;

 >functionDelete (>ai :integer) :integer;

 >function Search (>aFig :TFigure) :integer;

 >procedureShowAll;

 >procedureMoveAll (>dx,dy :integer);

 >procedureFreeAll;

 end;

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

У цьому об'єктної програмі використовується 3 класу:

·TItem

·TList

·TMas

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

 >ConstructorCreate(aNext:TItem;aKey:string) - створення 1 елемента

 >functionGetnext:TItem - дати адресу на слід. елемент

 >procedureSetNext(aNext:TItem) - зміна адреси

 >FunctionGetKey:string – повернення ключа

КласTList є набір об'єктів класуTItem. Має у собі 1 властивість –Head, що є заголовком лінійного списку.

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

>constructorCreate(aKey:string) - створення порожнього списку з заголовком

>functionAddFirst(aKey:string):Boolean - додавання на початок списку.Возвращаетtrue при успішному додаванні.

>functionAddLast(aKey:string):boolean - додавання насамкінець списку.Возвращаетtrue при успішному додаванні.

>functionGetHead:TItem - дати заголовка

КласTMas є контейнерним класом. Має у собі 1 властивість – оголошення10ти елементного масиву типуTList. Інакше висловлюючись оголошуємо масив списків. Опис методів класу:

>ConstructorCreate(aKey:string) - створеннямасива покажчиків на списків

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

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

>functionSearch(aKey:string;varaCount:integer):string – Функція пошуку заданого елементаHesh-таблици.aCount – кількість порівнянь.Возвращает: ‘0’ – елемент знайдено, інакше сам ключ.

>procedureDeleteAll - видалення всієї структури

>ProcedureSaveHesh(FileName:String) - збереження контейнера в текстовому файлі безпосередньо з ім'ям файла

>ProcedureLoadHesh(FileName:String)- завантаження контейнери із текстового файла

>ProcedureExtract(varaIndex:integer;varaCur:TItem) – Процедура вилучення матриці елементів від використання вDemoUnit. Використовується висновку структури на екран. Висновок :>aIndex - поточний індекс масиву,aCur - поточний елемент лінійного списку

>UML – діаграма взаємодії класів:

>TItem
Елемент списку
Next
>Key


>TList
Лінійний список
>Head


>TMas
Контейнер
>Mas:Array[0..10]ofTList

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. Опис всіх класів.

>unitClassHeshProg;

>interface

>type

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

 private

 >key:string;

 next:TItem;

 public

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

 >functionGetnext:TItem;//дать адресу на слід. елемент

 >procedureSetNext(aNext:TItem);//изм. адресу

 >FunctionGetKey:string;//дать ключ

 end;

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

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

 private

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

 public

 >constructorCreate(aKey:string);//создание списку

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

 >functionAddLast(aKey:string):boolean;//добавление після заголовка

 >functionGetHead:TItem;// дати заголовка

 end;

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

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

 private

 >mas:array [>1..10]ofTList;

 public

 >ConstructorCreate(aKey:string);//созданиемасива покажчиків списків

 >functionHeshFunction(aKey:string):integer;virtual;//HESH-функция із можливістю перевизначення

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

 >functionSearch(aKey:string;varaCount:integer):string;//поиск елементаHesh-таблици

 >procedureDeleteAll;//удаление всієї таблиці

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

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

 >ProcedureExtract(varaIndex:integer;varaCur:TItem);//Вивод:aIndex-текуший індексмассива,aCur-текущийел-т списку

 end;

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

>varHesh:TMas;

>implementation

>usesMain,SysUtils,Dialogs;

>constructorTItem.Create(aNext:TItem;aKey:string);

>begin

 >next:=aNext;

 >Key:=aKey;

end;

>functionTItem.Getnext:TItem;

>begin

 >Result:=next;

end;

>procedureTItem.SetNext(aNext:TItem);

>begin

 >next:=aNext;

end;

>FunctionTItem.GetKey:string;

>begin

 >Result:=Key;

end;

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

>constructorTList.Create(aKey:String);

>begin

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

end;

>functionTList.AddFirst(aKey:string):boolean;

>varTemp,Current,Previos:TItem;

>begin

 >previos:=Head;

 >current:=Head.Getnext;

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

 >Temp.next:=current;

 >previos.next:=Temp;

 >result:=true;

end;

>functionTList.AddLast(aKey:string):boolean;

>varTemp,Current:TItem;

>begin

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

 >Current:=Head.Getnext;

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

 >Head.next:=Temp;

 >result:=true;

end;

>functionTList.GetHead:TItem;

>begin

 >Result:=Head;

end;

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

>constructorTMas.Create(aKey:string);

>vari:integer;

>begin

 >fori:=1 to 10domas[i]:=TList.Create(aKey);

end;

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

>varx,i,j:integer;

>begin

 x:= 0;

 >fori:=1 tolength(aKey)dox:=ord(aKey[i])+x; // Визначення значення рядки

 >j:=(xmod 10)+1; //Визначення елемента

 >result:=j;

end;

>functionTMas.Add(aKey:string;found:byte):byte;

>varj:integer;

>begin

 >j:=HeshFunction(aKey);

 >ifFound=0then

 >begin

 >ifmas[j].Head.next<>nilthenresult:=jelseresult:=0;

 >mas[j].AddFirst(aKey);

 endelse

 >iffound=1then

 >begin

 >ifmas[j].Head.next<>nilthenresult:=jelseresult:=0;

 >mas[j].AddLast(aKey);

 end;

end;

>functionTmas.Search(aKey:string;varaCount:integer):string;

>varj: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;

 >ifCur=nilthen

 >begin

 >result:='0';

 >Exit;

 endelse

 >begin

 >result:=Cur.key;

 exit;

 end;

end;

>procedureTMas.DeleteAll;//удаление контейнера

>vari:integer;Cur:TItem;

>begin

>fori:=1 to 10do

 >begin

 >cur:=mas[i].Head.Getnext;

 >WhileCur<>nildo

 >begin

 >mas[i].Head.next:=Cur.next;

 >Cur.Destroy;

 >cur:=mas[i].Head.next;

 end;

 end;

>Hesh.Destroy;

>Hesh:=nil;

end;

>ProcedureTMas.Extract(varaIndex:integer;varaCur:TItem);//Вивод:aIndex-текуший індексмассива,aCur-текущийел-т списку

>begin

 >aCur:=mas[aIndex].Head.next;

end;

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

>varCurrent:TItem;tf:TextFile;i:integer;

>begin

 >AssignFile(tf,FileName);

 >rewrite(tf);

 >fori:=1 to 10do

 >begin

 >Current:=mas[i].Head.Getnext;

 >whileCurrent<>Nildo

 >begin

 >Write(tf,Current.key+' ');

 >Current:=Current.next;

 end;

 >Writeln(tf);

 end;

 >CloseFile(tf);

end;

>ProcedureTMas.LoadHesh(FileName:String);//Загрузка контейнери із файла

>vartf:TextFile;s,si,Key:string;b,bf:Boolean;i:integer;

>begin

>b:=False;

>AssignFile(tf,FileName);

>Reset(tf);

>whileNotEof(tf)do

>begin

 >Readln(tf,s);

 >bf:=False;

 >si:='';

 >fori:=1 toLength(s)do

 >ifs[i]<>' 'thensi:=si+s[i]else

 >ifb=Falsethen

 >begin

 >b:=True;

 >Key:=si;

 >Hesh:=TMas.Create(Key);

 >bf:=true;

 >si:='';

 endelse

 >begin

 >ifbf=Falsethen

 >begin

 >bf:=True;

 >Key:=si;

 endelse

 >begin

 >Hesh.Add(SI,0);

 end;

 >si:='';

 end; {endFor}

>end;{endWhile}

>CloseFile(tf);

end;

end.

             ОписDemo-программи.

>unitMain;

>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;

 >procedureFormActivate(Sender:TObject);

 >procedureCloseButtonClick(Sender:TObject);

 >procedureInicialClick(Sender:TObject);

 >procedureFormCreate(Sender:TObject);

 >procedureSaveClick(Sender:TObject);

 >procedureLoadClick(Sender:TObject);

 >procedureCloseMenuClick(Sender:TObject);

 >procedureNewClick(Sender:TObject);

 >procedureOperationGroupClick(Sender:TObject);

 >procedureSavaBtnClick(Sender:TObject);

 >procedureLoadBtnClick(Sender:TObject);

 private

 {Privatedeclarations }

 public

 { Publicdeclarations }

 end;

>var

 >Form1:TForm1;

>Implementation

>usesClassHeshProg;

{$R *.>dfm}

>procedureOutput;

>vari,j:integer;Cur:TItem;

>begin

 >fori:=1 to 10do

 >begin

 >j:=1;

 >Hesh.Extract(i,Cur);

 >WhileCur<>nildo

 >begin

 >form1.StringGrid1.Cells[i-1,j]:=Cur.GetKey;

 >Cur:=Cur.Getnext;

 >inc(j);

 end;

 end;

end;

>procedureTForm1.FormActivate(Sender:TObject);

>vari:integer;

>begin

 >fori:=1 toform1.StringGrid1.ColCountdo

 >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;

>procedureTForm1.CloseButtonClick(Sender:TObject);

>begin

 >ifMessageDlg('Сохранитьизменения?',mtConfirmation,[mbYes,mbNo],0)=mrYesthen

 >begin

 >SaveClick(Sender);

 >NewClick(Sender);

 >Close; endelse

 >begin

 >Hesh.DeleteAll;

 >Close;

 end;

end;

>procedureTForm1.InicialClick(Sender:TObject);

>vari,j,count:integer;

>begin

 >ifHesh=nilthen

 >begin

 >MessageDlg('HESH-таблица не створена.Создаютаблицу.',MtError,[mbok],1);

 >Hesh:=TMas.Create(''); endelse

 >caseOperationGroup.ItemIndex of

 >0:begin {>Add}

 >IfEdit1.Text= ''thenMessageDlg('Введитезначение!',MtError,[mbOK],1)else

 >ifAddGroup.ItemIndex=0then

 >begin {>AddFirst}

 >j:=Hesh.Add(Edit1.Text,0);

 >ifj<>0thenMessageDlg('Конфликт в осередку '+>inttostr(j),MtInformation,[mbok],1);

 >MessageDlg('Ключ з значенням '+>Edit1.Text+'добавлен.',MtInformation,[mbok],1);

 endelse

 >begin {>AddLast}

 >j:=Hesh.Add(Edit1.Text,1);

 >ifj<>0thenMessageDlg('Конфликт в осередку '+>inttostr(j),MtInformation,[mbok],1);

 >MessageDlg('Ключ з значенням '+>Edit1.Text+'добавлен.',MtInformation,[mbok],1);

 end;

 >Output;

 end;

 >1:begin {Search}

 >IfEdit1.Text= ''thenMessageDlg('Введитезначение!',MtError,[mbOK],1)else

 >ifHesh.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;{endcase}

 >Edit1.SetFocus;

end;

>procedureTForm1.FormCreate(Sender:TObject);

>begin

 >Hesh:=TMas.Create('');

end;

>procedureTForm1.SaveClick(Sender:TObject);

>begin

 >ifSaveDialog1.Executethen

 >ifHesh<>Nilthenbegin

 >Hesh.SaveHesh(SaveDialog1.FileName);

 >NewClick(Sender); endelse

 >MessageDlg('HESH-таблица несоздана.',MtError,[mbok],1);

end;

>procedureTForm1.LoadClick(Sender:TObject);

>begin

 >NewClick(Sender);

 >ifOpenDialog1.Executethen

 >begin

 >Hesh.LoadHesh(OpenDialog1.FileName);

 >Output;

 end;

end;

>procedureTForm1.CloseMenuClick(Sender:TObject);

>begin

 >CloseButtonClick(Sender);

end;

>procedureTForm1.NewClick(Sender:TObject);

>vari,j:integer;

>begin

 >ifHesh<>nilthen

 >begin

 >Hesh.DeleteAll;

 >fori:=0 to 10doforj:=1 to 10do

 >begin

 >stringgrid1.Cells[i,j]:='';

 end;

 end;

end;

>procedureTForm1.OperationGroupClick(Sender:TObject);

>begin

 >caseOperationGroup.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;

>procedureTForm1.SavaBtnClick(Sender:TObject);

>begin

 >SaveClick(Sender);

end;

>procedureTForm1.LoadBtnClick(Sender:TObject);

>begin

 >LoadClick(Sender);

end;

end.


7. Список використаної літератури.

1. Іванов О.Г., Карпова А.В.,Семик В.П.,ФилиновЮ.Е.Объектно-ориентированная середовище програмування. Системи і кошти інформатики.Вип.2. М.: Наука, 1991.

2. Іванова Г.С.,НичушкинаТ.Н., Пугачов Є. «>Объектно-ориентированное програмування: Підручник для вузів Вид. 2-ге», М: МДТУ їм.Н.Э.Баумана

3.Фаронов В.В. Delphi 2005. Мова, середовище, розробка додатків. – СПб.: Пітер, 2005 р.

 4. Вірт М. Алгоритми і структури даних. – Вид. НевськийДиалект, 2001 р.

5. Козин А. М. «Структури і алгоритми обробки даних»ТИСБИ, 2003


Схожі реферати:

Навігація