Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
22
Добавлен:
02.05.2014
Размер:
96.77 Кб
Скачать

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

unit Unit1;

interface

uses

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

Dialogs, StdCtrls, Grids, DBGrids, ComCtrls, Buttons ;

type

TForm1 = class(TForm)

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Button1: TButton;

Button2: TButton;

Button3: TButton;

OpenDialog1: TOpenDialog;

Memo1: TMemo;

StringGrid2: TStringGrid;

StringGrid1: TStringGrid;

Button4: TButton;

Memo2: TMemo;

Edit1: TEdit;

Label4: TLabel;

Label5: TLabel;

Label6: TLabel;

procedure Button3Click(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure Button4Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

end;

var

Form1: TForm1;

ukazatel:integer;

koliz,sravn:integer;

implementation

{$R *.dfm}

procedure TForm1.Button3Click(Sender: TObject);

begin

{ Выход из программы }

Close;

end;

procedure TForm1.Button1Click(Sender: TObject); {открытие файла}

begin

if OpenDialog1.Execute then Memo1.Lines.LoadFromFile(OpenDialog1.Filename)

end;

function Xesh(St:string):integer; {процедура вычисление значения хэш-функции}

var dlina:integer;

twosyb:char;

fivesyb:char;

begin

dlina:=length(St);

if dlina=0 then Result:=0 else

begin

if dlina>=4 then begin

twosyb:=St[2];

fivesyb:=St[5];

end

else begin

twosyb:=St[2];

Result:=ord( twosyb);

end;

Result:=ord(fivesyb)+ord(twosyb);

end;

end;

procedure TForm1.Button4Click(Sender: TObject); { процедура заполнения таблиц}

var i,g,dlina,hash,ukaz:integer;

stroka:string;

label 1,2;

begin

ukazatel:=1;

with StringGrid1 do begin

Cells[0,0]:='Номер';

Cells[1,0]:='Индефикатор';

Cells[2,0]:='лево';

Cells[3,0]:='право';

end;

with StringGrid2 do begin

Cells[0,0]:='Номер';

Cells[1,0]:='Индеф';

end;

for g:=0 to 400 do begin

StringGrid2.Cells[0,g]:=IntToStr(g);

StringGrid1.Cells[0,g]:=IntToStr(g);

end;

dlina:=memo1.Lines.Count; { Определяем количество записей }

if dlina<>0 then

begin

StringGrid1.RowCount:=dlina+1; { кол-во строк }

for i:=1 to dlina do begin { заполняем номера строк }

StringGrid1.Cells[0,i]:=IntToStr(i);

end;

for i:=0 to dlina-1 do begin { заполняет в строки текст }

stroka:=memo1.Lines[i];

hash:=Xesh(stroka);

if StringGrid2.cells[1,hash-65]='' then begin { проверяем состояние ячейки в ХТ, выполняем если пусто }

StringGrid2.cells[1,hash-65]:=IntToStr(ukazatel); {заносим указатель в ХТ}

StringGrid1.cells[1,ukazatel]:=stroka; {Заносим запись в ТИ по значению указателя}

ukazatel:=ukazatel+1; { увеличение указателя на 1}

goto 1;

end;

if StringGrid2.cells[1,hash-65]<>'' then begin { выполняем если занята ячейка }

ukaz:=StrToInt(StringGrid2.cells[1,hash-65]);

2: if stroka=StringGrid1.Cells[1,ukaz] then { проверка на дубликаты }

begin

memo2.Lines[j]:='Удален '+stroka; { вывод в поле memo2 название дубликата }

end;

if stroka<StringGrid1.cells[1,ukaz] then { заполняем дерево в левую часть }

begin

if StringGrid1.cells[3,ukaz]='' then begin {если ле }

StringGrid1.cells[2,ukaz]:=IntToStr(ukazatel);

StringGrid1.cells[1,ukazatel]:=stroka;

ukazatel:=ukazatel+1;

goto 1;

end;

if StringGrid1.cells[3,ukaz]<>'' then begin

ukaz:=StrToInt(StringGrid1.cells[2,ukaz]);

goto 2;

end;

end;

if stroka>StringGrid1.cells[1,ukaz] then {заполняем дерево в правую часть }

begin

if StringGrid1.cells[3,ukaz]='' then begin

StringGrid1.cells[3,ukaz]:=IntToStr(ukazatel);

StringGrid1.cells[1,ukazatel]:=stroka;

ukazatel:=ukazatel+1;

goto 1;

end;

if StringGrid1.cells[3,ukaz]<>'' then begin

ukaz:=StrToInt(StringGrid1.cells[3,ukaz]);

goto 2;

end;

end;

end;

1: end;

end;

StringGrid1.RowCount:=ukazatel+1; { добавляем строку в таблицу индефикаторов }

end;

procedure TForm1.Button2Click(Sender: TObject); { процедура для ручной проверки получаемой хеш функции }

var sym:string;

sym1:integer;

begin

sym:=Edit1.Text;

label4.Visible:=True;

sym1:= Xesh(sym);

label4.Caption:='Хеш='+inttostr(sym1-65);

end;

end.

Выводы по проделанной работе: изучены основные методы организации таблиц идентификаторов, преимущества и недостатка, присущие различным методам организации таблиц символов (идентификаторов).

Написана программа, которая получает на входе набор идентификаторов, организует таблицу и позволяет осуществить многократный

поиск идентификатора в этой таблице. Список идентификаторов считать заданным в виде текстового файла.

Результат работы программы:

Цель работы: изучить основные методы организации таблиц идентификаторов, получить представление о преимуществах и недостатках, присущих различным методам организации таблиц символов (идентификаторов).

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

  1.  

Сумма кодов первого, пятого символа

Метод цепочек и бинарного дерева

Блок схема

Министерство образования и науки Российской Федерации

Уфимский государственный авиационный технический университет

Кафедра технической кибернетики

ОТЧЕТ

по лабораторной работе №1

АНАЛИЗ УРОВНЯ ТЕХНИЧЕСКИХ РЕШЕНИЙ В ОБЛАСТИ ЭЛЕМЕНТОВ СИСТЕМ УПРАВЛЕНИЯ НА ОСНОВЕ

ПАТЕНТНЫХ ИССЛЕДОВАНИЙ

Выполнил:

студенты

гр. УТС-411

Беляев В. В.

Зинатуллина Э.

Проверил:

Карамзина А. Г.

Уфа-2007

Соседние файлы в папке лабы мои