Хеш пошук

[ виправити ] текст може містити помилки, будь ласка перевіряйте перш ніж використовувати.

скачати

Міністерство освіти і науки РФ
Академія управління «ТИСБИ»
Факультет інформаційних технологій
Курсова робота
з предмету «Об'єктно-орієнтоване програмування»
тема: «Об'єктна реалізація хеш-пошуку»
Виконав: студент групи І-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) = (ai mod m) + 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. Заголовок класу з ім'ям класу
Приклад: type MyMasClass = class.
2. Тіло класу, що містить перелік властивостей (поля даних) і перелік методів звичайно задаються тільки своїми заголовками.
Приклад:
private
mas: array [1 .. 10] of TList; / / властивість
public
Constructor Create (aKey: string); / / методи
***
еnd;
3. Програмна реалізація методів (код методу).
Приклад:
constructor TMas.Create (aKey: string);
var i: integer;
begin
for i: = 1 to 10 do mas [i]: = TList.Create (aKey);
end;
Методи, які не мають програмної реалізації, називаються абстрактними.
Клас, що має хоча б один абстрактний метод, називається абстрактним. Об'єкти-примірники такого класу створювати не можна.
3. Композиція класів.
Композиція виникає, коли один або декілька властивостей класу представляють із себе об'єктів будь-яких інших класів.
Механізм композиції дозволяє створювати складні з більш простих об'єктів. Перевагою композиції є можливість використання раніше створеного коду.
Для створення програми в котом використовується композиція треба:
· При описі нового класу включити в набір його властивостей хоча б одне об'єктне властивість
· При написанні нового об'єкта заздалегідь повинні бути оголошені входять до його підпорядкування об'єкти.
· Використання методів вкладених об'єктів
Приклад:
private
mas: array [1 .. 10] of TList;
Тут оголошується масив c об'єктної змінної mas лінійних списків, який належить класу TList.
4. Контейнери.
Об'єкт, призначенням якого є зберігання об'єктів інших типів і керування ними, називають контейнером. Іноді вміст контейнерів називають послідовностями.
Контейнерні класи - поширений прийом розробки класів, що використовує механізми композиції і наповнення для підключення деяких об'єктів до керуючого об'єкту-контейнера.
Контейнерний клас містить в своєму визначенні кілька об'єктних полів і полів-покажчиків на об'єкти. Якщо контейнерний клас використовує механізм композиції, то тип і кількість керованих об'єктів жорстко визначені типом і кількістю об'єктних полів. Якщо він використовує механізм наповнення, то підключення реалізується через покажчики, отже, контейнер може управляти як об'єктами деякого базового, так і об'єктами всіх нащадків цього класу.
Контейнерні класи реалізують деякі типові структури, такі як, масив, стек або список, і типові операції над даними, які можуть бути записані в ці структури або прочитані з них.
Основна операція контейнерного класу - послідовна обробка об'єктів. Така обробка забезпечується 2 способами:
1. Базується на створенні спеціальної процедури перегляду всіх елементів контейнера. У цю процедуру як параметр передається ім'я функції або процедури, що реалізує необхідної обробки елемента контейнера.
2. Реалізується через визначення ітератора або класу ітераторів, відповідного для даного виду контейнера.
Приклад контейнерного класу:
TContainer = class
private
Arrs: array [1 .. 100] of TFigure; / / масив поліморфних покажчиків
/ / На графічні фігури;
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
divvios: = Head;
current: = Head.Getnext;
Temp: = TItem.Create (current, aKey);
Temp.next: = current;
divvios.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.
Опис 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;
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
Додати в блог або на сайт

Цей текст може містити помилки.

Програмування, комп'ютери, інформатика і кібернетика | Курсова
57.2кб. | скачати


Схожі роботи:
Пошук підрядка в рядку за допомогою хеш-функції
Автотекс автозаміна та пошук слів Використання автотексту автозаміни та пошук слів у тексті
Хеш-функция UMAC
Хеш-функції в криптосистемах
Пошук інформації в Інтернеті
Пошук інформації в Інтернеті
Пошук зразка в рядку
Пошук інформації в Інтернет
Пошук оптимальних рішень
© Усі права захищені
написати до нас