Курсовые проекты / лабы мои / отчёт лаб1
.docЛистинг программы:
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
АНАЛИЗ УРОВНЯ ТЕХНИЧЕСКИХ РЕШЕНИЙ В ОБЛАСТИ ЭЛЕМЕНТОВ СИСТЕМ УПРАВЛЕНИЯ НА ОСНОВЕ
ПАТЕНТНЫХ ИССЛЕДОВАНИЙ
Выполнил:
студенты
гр. УТС-411
Беляев В. В.
Зинатуллина Э.
Проверил:
Карамзина А. Г.
Уфа-2007