Курсовая работа - Структуры и алгоритмы обработки данных - файл n16.doc

Курсовая работа - Структуры и алгоритмы обработки данных
скачать (58.6 kb.)
Доступные файлы (16):
main_Unit.dfm.~1~
main_Unit.dfm.~2~
main_Unit.dfm.~3~
main_Unit.pas.~1~
main_Unit.dcu
main_Unit.dfm
main_Unit.pas
n8.bdsproj
rgz.bdsproj.local
n10.cfg
n11.dof
n12.dpr
n13.dsk
n14.res
n15.ind
n16.doc159kb.19.04.2010 01:00скачать

n16.doc

ЗАДАНИЕ К РГЗ

необходимо создать файл записей (структура записей приведена в варианте задания). Используя данные из файла выполнить следующие задачи:

1. Считать данные из файла в массив записей и отсортировать по заданным полям, каждым из указанных в варианте задания методом сортировки.

2. Для таблицы записей создать массивы-индексы по заданным полям и осуществить вывод исходной таблицы упорядоченной по этим же полям используя массивы-индексы.

3. Считывая данные из файла создать односвязный список. Для работы со списком реализовать следующие функции:

4. Считать данные из файла в таблицу. Осуществитть поиск записи в таблице по заданному ключу поиска. Для поиска использовать хэширование. Сравнить эффективность поиска, разрешая коллизии методом цепочек и методом открытой адресации с линейным опробыванием.

Содержание отчета:

  1. Титульный лист

  2. Листинг программы

  3. Результаты тестирования программы



№16

Регистрация абонентов на почте





абонента


Индекс издания


Наименов.

издания


Ф.И.О.


Цена


1


2


3


4


5

Методы сортировки: простыми включениями, простым выбором, быстрая сортировка.

Ключи сортировки: №1, №4.
Листинг программы


unit main_Unit;
interface
uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

Menus, Mask, StdCtrls, Grids, ExtCtrls;
type

Tabonent=record

num_abonent : Integer;

index_izd : Integer;

name_izd : string[80];

fio : string[80];

cost : Real;

end;
TList=^TNode;

TNode=record

elem:Tabonent;

next:TList;

end;

ind=record

index:Integer;

l: Integer;

end;
uk=^chepochka;

chepochka=record

key : Integer;

real_key : Integer;

next:uk;

end;

HT=record

key, real_key : Integer;

end;


onezero=-1..1; // порядк. значение

Tmain_Frm = class(TForm)

MainMenu1: TMainMenu;

N1: TMenuItem;

N2: TMenuItem;

N3: TMenuItem;

N4: TMenuItem;

N5: TMenuItem;

N6: TMenuItem;

N11: TMenuItem;

N41: TMenuItem;

N12: TMenuItem;

N42: TMenuItem;

N13: TMenuItem;

N43: TMenuItem;

N7: TMenuItem;

N8: TMenuItem;

N9: TMenuItem;

o1: TMenuItem;

N14: TMenuItem;

N15: TMenuItem;

N16: TMenuItem;

N17: TMenuItem;

N18: TMenuItem;

create_panel: TGroupBox;

Label2: TLabel;

num_abonent_Edit: TEdit;

Label3: TLabel;

index_Edit: TEdit;

Label4: TLabel;

name_izd_Edit: TEdit;

Label5: TLabel;

fio_Edit: TEdit;

Label6: TLabel;

cost_Edit: TEdit;

Button1: TButton;

Button2: TButton;

data_file_panel: TGroupBox;

data_Grid: TStringGrid;

spisok_panel: TGroupBox;

spisok_Grid: TStringGrid;

add_elem_in_spisok_panel: TGroupBox;

Label1: TLabel;

num_abonent_spisok_edit: TEdit;

Label7: TLabel;

index_spisok_edit: TEdit;

Label8: TLabel;

name_izd_spisok_edit: TEdit;

Label9: TLabel;

fio_spisok_Edit: TEdit;

Label10: TLabel;

cost_spisok_edit: TEdit;

Button4: TButton;

delete_elem_from_spisok_panel: TGroupBox;

Label11: TLabel;

num_delete_abonent_Edit: TEdit;

Button5: TButton;

index_GroupBox: TGroupBox;

index_grid: TStringGrid;

num_index_Panel: TPanel;

Label12: TLabel;

index_num_abonent_Edit: TEdit;

Button6: TButton;

hesh_GroupBox: TGroupBox;

hesh_Memo: TMemo;

Label13: TLabel;

Button3: TButton;

Label14: TLabel;
procedure Button2Click(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure N18Click(Sender: TObject);

procedure N2Click(Sender: TObject);

procedure N11Click(Sender: TObject);

procedure N12Click(Sender: TObject);

procedure N42Click(Sender: TObject);

procedure N13Click(Sender: TObject);

procedure N43Click(Sender: TObject);

procedure N41Click(Sender: TObject);

procedure N9Click(Sender: TObject);

procedure Button4Click(Sender: TObject);

procedure o1Click(Sender: TObject);

procedure N14Click(Sender: TObject);

procedure Button5Click(Sender: TObject);

procedure Button6Click(Sender: TObject);

procedure N7Click(Sender: TObject);

procedure N17Click(Sender: TObject);

procedure N16Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

private

{ Private declarations }

public

f : File of Tabonent;

mas_fast : array [1..100] of Tabonent;

n : Integer;

mas : Array of Tabonent;

l:TList;

a_ind:array [1..50] of ind;

records:array [1..50] of integer;

hesh_table : array [1..50] of HT;

hesh_table2 : array [1..50] of uk;

hesh_f : Word;

p,p_next : uk;
Procedure Bead(count:Word);

Procedure SimpleChoice(key:Integer);

Procedure FastSort(key:Integer);

Procedure Vvod_Spiska;

Procedure Obhod_Spiska;

Procedure Index(s,p:string);

Procedure OpenIndex(var count:word);

Function GetRecNumber(var count:word;l:real):longint;

Procedure OutRecs(count:word);

Procedure OutPut_Hesh;

Procedure OutPut_Hesh2;

{ Public declarations }

end;
var

main_Frm: Tmain_Frm;
implementation
{$R *.DFM}
procedure Tmain_Frm.Button2Click(Sender: TObject); // создание базы

begin

AssignFile(f,'text.txt'); // иниц. f - файл

Rewrite(f); // созд. файл

Label2.Enabled:=true;

num_abonent_Edit.Enabled:=true;

Label3.Enabled:=true;

index_Edit.Enabled:=true;

Label4.Enabled:=true;

name_izd_Edit.Enabled:=true;

Label13.Enabled:=true;

fio_Edit.Enabled:=true;

Label6.Enabled:=true;

cost_Edit.Enabled:=true;

Button1.Enabled:=true;

Button2.Enabled:=false;

Button3.Enabled:=true;

end;
procedure Tmain_Frm.Button1Click(Sender: TObject); // запись в файл

var z : Tabonent;

begin

z.num_abonent:= StrToint(num_abonent_Edit.Text);

z.index_izd:= StrToint(index_Edit.Text);

z.name_izd:= name_izd_Edit.Text;

z.fio:= fio_Edit.Text;

z.cost := StrToFloat(cost_Edit.Text);

Write(f,z);

num_abonent_Edit.Clear;

index_Edit.Clear;

name_izd_Edit.Clear;

fio_Edit.Clear;

cost_Edit.Clear;

end;
procedure Tmain_Frm.N18Click(Sender: TObject);

begin

create_panel.Visible:=true;

Button2.Enabled:=not FileExists('text.txt');
if Button1.Enabled then

begin

Label2.Enabled:=true;

num_abonent_Edit.Enabled:=true;

Label3.Enabled:=true;

index_Edit.Enabled:=true;

Label4.Enabled:=true;

name_izd_Edit.Enabled:=true;

Label13.Enabled:=true;

fio_Edit.Enabled:=true;

Label6.Enabled:=true;

cost_Edit.Enabled:=true;

end;

end;
procedure Tmain_Frm.N2Click(Sender: TObject); // загрузка из файла

var z : Tabonent;

begin

data_file_panel.Visible:=true;

AssignFile(f,'text.txt');

Reset(f); // если ф.уже открыт, перезапустить

data_Grid.RowCount:=1;

data_Grid.Cells[0,0]:='Номер абонента'; data_Grid.ColWidths[0]:=100;

data_Grid.Cells[1,0]:='Индекс издания'; data_Grid.ColWidths[1]:=100;

data_Grid.Cells[2,0]:='Наименование издания'; data_Grid.ColWidths[2]:=200;

data_Grid.Cells[3,0]:='ФИО'; data_Grid.ColWidths[3]:=200;

data_Grid.Cells[4,0]:='Цена'; data_Grid.ColWidths[4]:=50;
n:=0;

SetLength(mas, 0); // устан. объем пам.

while not Eof(f) do // пока не дойдем до конца ф.

begin

Read(f,z);

SetLength(mas, length(mas)+1);

mas[length(mas)-1]:=z;

n:=n+1;

data_Grid.RowCount:=data_Grid.RowCount+1;

data_Grid.Cells[0,data_Grid.RowCount-1]:=IntToStr(z.num_abonent);

data_Grid.Cells[1,data_Grid.RowCount-1]:=IntToStr(z.index_izd);

data_Grid.Cells[2,data_Grid.RowCount-1]:=z.name_izd;

data_Grid.Cells[3,data_Grid.RowCount-1]:=z.fio;

data_Grid.Cells[4,data_Grid.RowCount-1]:=FloatToStr(z.cost);

end;

if data_Grid.RowCount>1 then

data_Grid.FixedRows:=1;

CloseFile(f);

data_file_panel.Caption:='Данные из файла (Общее количество записей = ' +IntToStr(n)+')';

end;
Function Compare_fio(r1,r2:Tabonent):onezero; // сравн. полей fio

begin

if ord(r2.fio[1])>ord(r1.fio[1]) then Compare_fio:=1 else

if ord(r2.fio[1])=ord(r1.fio[1]) then Compare_fio:=0 else

Compare_fio:=-1;

end;
Function Compare_num_abonent(r1,r2:Tabonent):onezero; // сравн. полей num_abonent

begin

if r2.num_abonent>r1.num_abonent then Compare_num_abonent:=1 else

if r2.num_abonent=r1.num_abonent then Compare_num_abonent:=0 else

Compare_num_abonent:=-1;

end;

Procedure Tmain_Frm.SimpleChoice(key:Integer); // сорт. простым выбором

var

i,j,nummax:integer;

p:Tabonent;

begin

for i:=0 to n-1 do

begin

nummax:=i;

p:=mas[i];

for j:=i+1 to n-1 do

if key=1 then // 1 ключ

begin

if Compare_num_abonent(p,mas[j])=-1 then // нашли мин эл-т

begin // перемещ в нужную позицию

nummax:=j;

p:=mas[j];

end

end

else

begin // 4 ключ

if Compare_fio(p,mas[j])=-1 then

begin

nummax:=j;

p:=mas[j];

end;

end;

mas[nummax]:=mas[i];

mas[i]:=p;

end;

end;
procedure Tmain_Frm.N11Click(Sender: TObject); // сорт прост включ 1

var i,j:Integer;

l : Tabonent;

begin

for i:=0 to n-2 do

for j:=i+1 downto 1 do

if mas[j-1].num_abonent > mas[j].num_abonent then // выбор эл-та

begin // ставим на позицию

l:=mas[j-1];

mas[j-1]:=mas[j];

mas[j]:=l;

end;

for i:=1 to n do

begin

data_Grid.Cells[0,i]:=IntToStr(mas[i-1].num_abonent);

data_Grid.Cells[1,i]:=IntToStr(mas[i-1].index_izd);

data_Grid.Cells[2,i]:=mas[i-1].name_izd;

data_Grid.Cells[3,i]:=mas[i-1].fio;

data_Grid.Cells[4,i]:=FloatToStr(mas[i-1].cost);

end;

end;
procedure Tmain_Frm.N12Click(Sender: TObject);

var i: Integer;

begin

SimpleChoice(1);

for i:=1 to n do

begin

data_Grid.Cells[0,i]:=IntToStr(mas[i-1].num_abonent);

data_Grid.Cells[1,i]:=IntToStr(mas[i-1].index_izd);

data_Grid.Cells[2,i]:=mas[i-1].name_izd;

data_Grid.Cells[3,i]:=mas[i-1].fio;

data_Grid.Cells[4,i]:=FloatToStr(mas[i-1].cost);

end;

end;
procedure Tmain_Frm.N42Click(Sender: TObject);

var i: Integer;

begin

SimpleChoice(4);

for i:=1 to n do

begin

data_Grid.Cells[0,i]:=IntToStr(mas[i-1].num_abonent);

data_Grid.Cells[1,i]:=IntToStr(mas[i-1].index_izd);

data_Grid.Cells[2,i]:=mas[i-1].name_izd;

data_Grid.Cells[3,i]:=mas[i-1].fio;

data_Grid.Cells[4,i]:=FloatToStr(mas[i-1].cost);

end;

end;
Procedure Tmain_Frm.FastSort(key:Integer); // быстрая сорт

Procedure st(l,r:word);

var i,j:word;

t,x:Tabonent;
begin

i:=l;

j:=r;

x:=mas_fast[(l+r) div 2]; // определяющий эл-т (делим спис пополам)

Repeat // бескон цикл

if key=1 then

While Compare_num_abonent(x,mas_fast[i])=-1 do inc(i) // просматрив в поисках < x

else While Compare_fio(x,mas_fast[i])=-1 do inc(i);

if key=1 then

While Compare_num_abonent(x,mas_fast[j])=1 do j:=j-1

else While Compare_fio(x,mas_fast[j])=1 do j:=j-1;

if i<=j then

begin

t:=mas_fast[i];

mas_fast[i]:=mas_fast[j]; // меняем значения

mas_fast[j]:=t;

i:=i+1;

j:=j-1;

end;

Until i>j;

if l<j then st(l,j); // сортируем 2 подсписка

if i<r then st(i,r);

end;

begin

St(1,n);

end;
procedure Tmain_Frm.N13Click(Sender: TObject);

var i: Integer;

begin
data_Grid.RowCount:=n+1;

for i:=1 to n do

mas_fast[i]:=mas[i-1];

FastSort(1);

for i:=1 to n do

mas[i-1]:=mas_fast[i];

for i:=1 to n do

begin

data_Grid.Cells[0,i]:=IntToStr(mas[i-1].num_abonent);

data_Grid.Cells[1,i]:=IntToStr(mas[i-1].index_izd);

data_Grid.Cells[2,i]:=mas[i-1].name_izd;

data_Grid.Cells[3,i]:=mas[i-1].fio;

data_Grid.Cells[4,i]:=FloatToStr(mas[i-1].cost);

end;

end;
procedure Tmain_Frm.N43Click(Sender: TObject);

var i: Integer;

begin

data_Grid.RowCount:=n+1;

data_Grid.RowCount:=n+1;

for i:=1 to n do

mas_fast[i]:=mas[i-1];

FastSort(4);

for i:=1 to n do

mas[i-1]:=mas_fast[i];
for i:=1 to n do

begin

data_Grid.Cells[0,i]:=IntToStr(mas[i-1].num_abonent);

data_Grid.Cells[1,i]:=IntToStr(mas[i-1].index_izd);

data_Grid.Cells[2,i]:=mas[i-1].name_izd;

data_Grid.Cells[3,i]:=mas[i-1].fio;

data_Grid.Cells[4,i]:=FloatToStr(mas[i-1].cost);

end;

end;
procedure Tmain_Frm.N41Click(Sender: TObject); // сорт прост включ 1

var i,j:Integer;

l : Tabonent;

begin

for i:=0 to n-2 do

for j:=i+1 downto 1 do

if ord(mas[j-1].fio[1]) > ord(mas[j].fio[1]) then

begin

l:=mas[j-1];

mas[j-1]:=mas[j];

mas[j]:=l;

end;

for i:=1 to n do

begin

data_Grid.Cells[0,i]:=IntToStr(mas[i-1].num_abonent);

data_Grid.Cells[1,i]:=IntToStr(mas[i-1].index_izd);

data_Grid.Cells[2,i]:=mas[i-1].name_izd;

data_Grid.Cells[3,i]:=mas[i-1].fio;

data_Grid.Cells[4,i]:=FloatToStr(mas[i-1].cost);

end;

end;
Procedure Tmain_Frm.Vvod_Spiska;

var i:integer;

el,p:TList;

Begin

l:=nil;

for i:=0 to n-1 do

begin

new(el);

el^.elem:=mas[i];

el^.next:=nil;

if l=nil then

l:=el

else

begin

p:=l;

while p^.next<>nil do

p:=p^.next;

p^.next:=el;

end;

end;

End;
Procedure Tmain_Frm.Obhod_Spiska;

var

el : TList;

begin

el:=l;

spisok_Grid.Cells[0,0]:='Номер абонента'; spisok_Grid.ColWidths[0]:=100;

spisok_Grid.Cells[1,0]:='Индекс издания'; spisok_Grid.ColWidths[1]:=100;

spisok_Grid.Cells[2,0]:='Наименование издания'; spisok_Grid.ColWidths[2]:=200;

spisok_Grid.Cells[3,0]:='ФИО'; spisok_Grid.ColWidths[3]:=200;

spisok_Grid.Cells[4,0]:='Цена'; spisok_Grid.ColWidths[4]:=50;

spisok_Grid.RowCount:=1;

while el<>nil do

begin

spisok_Grid.RowCount:=spisok_Grid.RowCount+1;

spisok_Grid.Cells[0,spisok_Grid.RowCount-1]:=IntToStr(el^.elem.num_abonent);

spisok_Grid.Cells[1,spisok_Grid.RowCount-1]:=IntToStr(el^.elem.index_izd);

spisok_Grid.Cells[2,spisok_Grid.RowCount-1]:=el^.elem.name_izd;

spisok_Grid.Cells[3,spisok_Grid.RowCount-1]:=el^.elem.fio;

spisok_Grid.Cells[4,spisok_Grid.RowCount-1]:=FloatToStr(el^.elem.cost);

if spisok_Grid.RowCount>1 then

spisok_Grid.FixedRows:=1;

el:=el^.next;

end;

end;
procedure Tmain_Frm.N9Click(Sender: TObject);

begin

spisok_panel.Visible:=true;

Vvod_Spiska;

Obhod_Spiska;

end;
procedure Tmain_Frm.Button4Click(Sender: TObject); // добавление эл в список

var el : TList;

el_new:TList;

begin

if not spisok_panel.Visible then

begin

ShowMessage('Сначала создайте список!');

exit;

end;

el:=l;

while el^.next<>nil do

el:=el^.next;
new(el_new);

el_new^.elem.num_abonent:=StrToInt(num_abonent_spisok_edit.Text);

el_new^.elem.index_izd:=StrToInt(index_spisok_edit.Text);

el_new^.elem.name_izd:=name_izd_spisok_edit.Text;

el_new^.elem.fio:=fio_spisok_Edit.Text;

el_new^.elem.cost:=StrToFloat(cost_spisok_edit.Text);

el_new^.next:=nil;

el^.next:=el_new;
num_abonent_spisok_edit.Clear;

index_spisok_edit.Clear;

name_izd_spisok_edit.Clear;

fio_spisok_Edit.Clear;

cost_Edit.Clear;
Obhod_Spiska;

end;
procedure Tmain_Frm.o1Click(Sender: TObject);

begin

add_elem_in_spisok_panel.Visible:=true;

end;
procedure Tmain_Frm.N14Click(Sender: TObject);

begin

delete_elem_from_spisok_panel.Visible:=true;

end;
procedure Tmain_Frm.Button5Click(Sender: TObject); // удаление эл

var el : TList;

p,p_end:TList;

begin

if not spisok_panel.Visible then

begin

ShowMessage('Сначала создайте список!');

exit;

end;

if num_delete_abonent_Edit.Text=' ' then

begin

ShowMessage('Введите номер удаляемого элемента!');

exit;

end;
el:=l;

if el^.elem.num_abonent=StrToint(num_delete_abonent_Edit.Text) then

// значит удаляемый эл с головы списка

begin

p:=el;

l:=el^.next;

//Free(p);

end

else

begin

while (el^.next<>nil) and (el^.next^.elem.num_abonent<>StrToint(num_delete_abonent_Edit.Text)) do

begin

p_end:=el;

el:=el^.next;

end;

if el^.next<> nil then

begin

p:=el;

el^.next:=el^.next^.next;

//free(p);

end else

begin //если это последний элемент списка

el:=p_end;

p:=el^.next;

el^.next:=nil;

///free(p);

end;

end;

Obhod_Spiska;

end;

Procedure Tmain_Frm.Bead(count:Word); // упорядочив массива индексов

var i,j:integer;

p:ind;

Function Compare(r1,r2:ind):onezero;

begin

if r1.l>r2.l then compare:=1 else

if r1.l=r2.l then compare:=0 else

compare:=-1;

end;

begin

for i:=1 to count do

begin

for j:=count downto i+1 do

if compare(a_ind[j],a_ind[j-1])=-1 then

begin

p:=a_ind[j];

a_ind[j]:=a_ind[j-1];

a_ind[j-1]:=p;

end;

end;

end;
Procedure Tmain_Frm.Index(s,p:string);

var //f:file of Tabonent;

o:file of ind;

j,count:word;

rec : Tabonent;

begin

AssignFile(f,s);

reset(f);

seek(f,0); // текущ позиция – в начало ф

j:=1;

while filepos(f)<=filesize(f)-1 do

begin

Read(f,rec);

a_ind[j].l:=rec.num_abonent; // индекс поабон

a_ind[j].index:=filepos(f);

inc(j);

end;

count:=j-1;

bead(count); // упорядочив

AssignFile(o,p);

rewrite(o);

for j:=1 to count do write(o,a_ind[j]);

CloseFile(o);

CloseFile(f);

end;
Procedure Tmain_Frm.OpenIndex(var count:word); // поиск по индексу (последов)

var i:word;

f : file of ind;

begin

AssignFile(f,'sss.ind');

reset(f);

i:=1;

while filepos(f)<=filesize(f)-1 do

begin

read(f,a_ind[i]);

inc(i);

end;

count:=i-1;

CloseFile(f);

end;

Function Tmain_Frm.GetRecNumber(var count:word;l:real):longint;

var

k:integer;

i:integer;

begin

k:=1;

for i:=1 to count do

if a_ind[i].l=l then

begin

records[k]:=a_ind[i].index;

inc(k);

end;

count:=k-1;

end;

Procedure Tmain_Frm.OutRecs(count:word);

var f:file of Tabonent;

p: Tabonent;

i,o:integer;

begin

AssignFile(f,'text.txt');

reset(f);

index_grid.RowCount:=1;

index_grid.Cells[0,0]:='Номер абонента'; index_grid.ColWidths[0]:=100;

index_grid.Cells[1,0]:='Индекс издания'; index_grid.ColWidths[1]:=100;

index_grid.Cells[2,0]:='Наименование издания'; index_grid.ColWidths[2]:=200;

index_grid.Cells[3,0]:='ФИО'; index_grid.ColWidths[3]:=200;

index_grid.Cells[4,0]:='Цена'; index_grid.ColWidths[4]:=50;

for i:=1 to count do

begin

o:=records[i];

seek(f,o-1);

read(f,p);

index_grid.RowCount:=index_grid.RowCount+1;

index_grid.Cells[0,index_grid.RowCount-1]:=IntToStr(p.num_abonent);

index_grid.Cells[1,index_grid.RowCount-1]:=IntToStr(p.index_izd);

index_grid.Cells[2,index_grid.RowCount-1]:=p.name_izd;

index_grid.Cells[3,index_grid.RowCount-1]:=p.fio;

index_grid.Cells[4,index_grid.RowCount-1]:=FloatToStr(p.cost);

end;

if index_grid.RowCount>1 then

index_grid.FixedRows:=1;

end;

procedure Tmain_Frm.Button6Click(Sender: TObject);

var kol : Word;

begin

Index('text.txt','sss.ind');

openindex(kol);

getrecnumber(kol,StrToint(index_num_abonent_Edit.Text));

outrecs(kol);

end;
procedure Tmain_Frm.N7Click(Sender: TObject);

begin

index_GroupBox.Visible:=true;

end;

Procedure Tmain_Frm.OutPut_Hesh;

Var i : Integer;

begin

for i:=0 to n-1 do

begin

hesh_Memo.Lines.Add('----------------------------');

hesh_Memo.Lines.Add(' номер абонента ='+IntToStr(mas[i].num_abonent));

hesh_Memo.Lines.Add(' Индекс издания='+ IntToStr(mas[i].index_izd));

hesh_Memo.Lines.Add(' Наименование издания='+ mas[i].name_izd);

hesh_Memo.Lines.Add(' ФИО абонента ='+mas[i].fio);

hesh_Memo.Lines.Add(' Стоимость ='+FloatToStr(mas[i].cost));

hesh_Memo.Lines.Add('----------------------------');

hesh_Memo.Lines.Add('хэш-таблица ');

hesh_Memo.Lines.Add(IntToStr(hesh_table[i+1].key)+' - '+IntToStr(hesh_table[i+1].real_key));

hesh_Memo.Lines.Add('----------------------------');

end;

end;
Procedure Tmain_Frm.OutPut_Hesh2;

Var i : Integer;

begin

for i:=1 to n do

begin

hesh_Memo.Lines.Add(IntToStr(i)+'----------------------------');

p:=hesh_table2[i];

if p<>nil then

begin

while p<> nil do

begin

hesh_Memo.Lines.Add(IntToStr(p^.key)+' : '+IntToStr(p^.real_key)+' ->');

p:=p^.next;

end;

end else hesh_Memo.Lines.Add('пусто');

end;

end;
procedure Tmain_Frm.N17Click(Sender: TObject); // хеширов метод откр адресации

Var i : Integer;

begin

hesh_GroupBox.Visible:=true;

{Создание хэш-таблицы по полю номер абонента с разрешением коллизий

методом открытой адресации с лин.опробованием}

for i:=1 to n do

begin

hesh_table[i].key:=0; hesh_table[i].real_key:=0; end; // помечаем яч как незанятые

for i:=1 to n do

begin

hesh_f:=mas[i-1].num_abonent mod n+1; // хеш-ф

if hesh_table[hesh_f].key=0 then

begin

hesh_table[hesh_f].key:=i;

hesh_table[hesh_f].real_key:=mas[i-1].num_abonent;

end

else

begin

while (hesh_f<=n)and(hesh_table[hesh_f].key<>0) do // перебор

begin

inc(hesh_f);

if hesh_f>n then hesh_f:=1;

end;

hesh_table[hesh_f].key:=i;

hesh_table[hesh_f].real_key:=mas[i-1].num_abonent;

end;

end;

hesh_Memo.Lines.Add('ХЭШ-ТАБЛИЦА по полю НОМЕР АБОНЕНТА');

OutPut_Hesh;

end;
procedure Tmain_Frm.N16Click(Sender: TObject); // хеширов метод цепочек

Var i : Integer;

begin

hesh_GroupBox.Visible:=true;

{Создание Хэш-таблицы с созданием списка}

for i:=1 to n do

hesh_table2[i]:=nil;

for i:=1 to n do

begin

hesh_f:=mas[i-1].num_abonent mod n+1;

if hesh_table2[hesh_f]=nil then

begin

new(p);

p^.key:=i;

p^.real_key:=mas[i-1].num_abonent;

p^.next:=nil;

hesh_table2[hesh_f]:=p;

end else

begin

new(p);

p^.key:=i;

p^.real_key:=mas[i-1].num_abonent;

p^.next:=nil;

p_next:=hesh_table2[hesh_f];

while hesh_table2[hesh_f]^.next<>nil do

hesh_table2[hesh_f]:=hesh_table2[hesh_f]^.next;

hesh_table2[hesh_f]^.next:=p;

hesh_table2[hesh_f]:=p_next;

end;

end;

hesh_Memo.Lines.Add('ХЭШ-ТАБЛИЦА по полю НОМЕР АБОНЕНТА');

OutPut_Hesh2;
end;
procedure Tmain_Frm.Button3Click(Sender: TObject);

begin

CloseFile(f);

end;
end.

Результаты тестирования программы



ЗАДАНИЕ К РГЗ
Учебный материал
© nashaucheba.ru
При копировании укажите ссылку.
обратиться к администрации