РефератыИнформатика, программированиеСтСтруктуры и организация данных в ЭВМ

Структуры и организация данных в ЭВМ

1. Состав Dеlphi-проекта


Программа включает одну форму: главную, на которой и реализован интерфейс программы



На форме пристутствуют следующие компоненты:


2 компоненты TstringGrid: для отображения результатов работы программа в виде двух таблиц со значениями;


6 компонент TLabel: для отображения поясняющих надписей;


1 компонента TButton: для включения режима поиска;


1 компонента: TBitBtn: для закрытия формы и выхода из приложения;


4 компоненты TRadioButton: для выбора режима отображения кривых на компонентах Tchart (вывод графиков вместе и по отдельности);


4 компоненты TEdit: для ввода данных пользователем;


2 компоненты TChart: для отображения графиков функций;


2 компоненты TComboBox: для выбора графика, отображаемого на компоненте Tchart в режиме «показывать по отдельности»;


2 компоненты TPanel: для группировки компонент TRadioButton.


Программа содержит два модуля: главный модуль программы Project.dpr и модуль MainForm.pas, в котором непосредственно реализуются действия, связанные с поиском.


2. Статические данные и структуры

A: file of Word - файл из N элементов, интерпретируется как таблица, содержащая только целые ключи (N изменяется от Nmin до Nmax )(N*2 байта);


B : array of Word - вектор из К элементов, представляет собой набор аргументов поиска (K*2 байта);


arA : array of Word - массив для временного хранения данных в процедуре сортировки файла A (N*2 байта);


Nmin : Word – минимальное число элементов в таблице A (2 байта);


Nmax : Word – максимальное число элементов в таблице A (2 байта);


Step : Word – шаг изменения числа элементов в таблице A (2 байта);


K : Word - число элементов в векторе B (2 байта);


T, i: Word – счётчики (2 байта);


rnd : Word – переменная, содержащая случайное значение, генерируемое датчиком RANDOM случайных чисел из диапазона [0, 64000] (2 байта);


Fval : Word – значение текущего элемента файла A (2 байта);


SortA1, SortA2, SortAB : array [0..1, 1..4, 1..65535] of Word – значения текущего времени перед выполнением сотвуетствующего вида сортировки в цикле (2*4*65536*2 байта = 1048560 байт);


LinF1, LinF2, BinF, LinFAcc: array [0..1, 1..4, 1..65535] of Word значения текущего времени перед очередным циклом и после него в соответствующих видах поиска (2*4*65535*2 байта = 1048560 байт);


TSortA1, TSortA2, TSortAB array [1..65535] of Word – значения периодов времени, затраченного на соответствующий вид сортировки в цикле (65535*2 байта = 131070 байт);


TLinF1, TLinF2, TBinF, TLinFAcc: array [1..65535] of Word – значения периодов времени, затраченного на соответствующий вид поиска в цикле (65535*2 байта = 131070 байт);


Acc : array [1..3, 1..65535] of Word – массив, накапливающий запросы (3*65535*2 байта = 393210 байт).


3. Логические структуры данных

Логическая схема структуры файла A:



Количество элементов в файле N в процессе выполнения программы изменяется от Nmin до Nmax, т.е. создаётся файл из N=Nmin элементов, затем после необходимых процедур уничтожается и создаётся файл из



Nmin+1 элементов и так, пока N не достигнет значения Nmax



Логическая схема структуры вектора B



4. Алгоритмы обработки основных структур


procedure tform1.fill;


var


r : integer;


begin


rewrite(a);


for r:=1 to i do //наполнение файла


begin //случайными значениями


fval:=random(64000);


write(a, fval);


end;


end;


Данная процедура наполняет файл i значениями, сгенерированными датчиком Random.



Файл A после выполнения первой итерации.



Файл A после выполнения второй итерации.



Файл A после выполнения последней итерации.


procedure tform1.linfind; //линейный поиск


var


s1, s2 : word;


begin


for s1:=0 to k-1 do


for s2:=0 to i-1 do


begin


seek(a, s2);


read(a, fval);


if (b[s1]=fval) then exit;


end;


end;


Процедура перебирает значения из вектора В, сранивая их поэлементно со значениями из файла А.


Состояние вектора и файла при:



первой итерации второй итерации i-й итерации



1*i+1-й итерации 1*i+2-й итерации 1*i+3-й итерации



k*i+1-й итерации k *i+2-й итерации k*i+3-й итерации


procedure tform1.binfind; //двоичный поиск


var


s1, cou, cou1, cou2 : integer;


label


1;


begin


for s1:=0 to k-1 do


begin


cou1:=0;


cou2:=i-1;


while cou1<=cou2 do


begin


cou:=(cou2+cou1) div 2;


seek(a, cou);


read(a, fval);


if (fval=b[s1]) then goto 1


else if fval<b[s1] then cou1:=cou+1


else cou2:=cou-1;


end;


1 : end;


end;


Процедура перебирает значения из вектора В, сранивая их поэлементно со значениями из файла А (файл А должен быть предварительно отсортирован), причём делит файл А пополам и сравнивает значения. Если значение из вектора В больше значения из файла А, то таким же образом исследуется левая половина файла, в противном случае – правая и т.д.


Состояние вектора и файла при:



первой итерации



второй итерации


procedure tform1.linfindacc; //линейный поиск с накоплением


var


s1, s2, cou : word;


begin


cou:=1;


for s1:=0 to k-1 do


for s2:=0 to i-1 do


begin


seek(a, s2);


read(a, fval);


if (b[s1]=fval) then


begin


acc[1, cou]:=s2;


acc[2, cou]:=s1;


acc[3, cou]:=fval;


cou:=cou+1;


end;


end;


end;


Алгоритм процедуры аналогичен алгоритму процедуры tform1.linfind с той разницей, что при совпадении значения в векторе и файле в двухмерный массив аcc записываются индексы файла и вектора, а также совпавшее значение.


procedure tform1.sorta; //сортировка файла a


var


r, d : integer;


tmp, val : word;


begin


setlength(ara, i);


for r:=0 to i-1 do


begin


seek(a, r);


read(a, val);


ara[r]:=val;


end;


for r:=0 to i-2 do


for d:=r+1 to i-1 do


begin


if (ara[r]>ara[d]) then


begin


tmp:=ara[r];


ara[r]:=ara[d];


ara[d]:=tmp;


end;


end;


rewrite(a);


for r:=0 to i-1 do write(a, ara[r]);


end;


Процедура перебирает значения файла, одновременно организуя второй цикл и перебирает значения этой же таблицы, начиная со следующего элемента. Встречая во втором цикле меньшее значение пересылает его во временный файл, значение из первого цикла пересылается в освободившуюся ячейку второго цикла. А его место, в свою очередь, занимает значение из временного файла.



procedure tform1.sortb; //сортировка вектора b


var


r, d : integer;


tmp : word;


begin


for r:=0 to k-2 do


for d:=r+1 to k-1 do


begin


if (b[r]>b[d]) then


begin


tmp:=b[r];


b[r]:=b[d];


b[d]:=tmp;


end;


end;


end;


Алгоритм сортировки вектора аналогичен вышеописанному методу сортировки файла.


5 Руководство пользователя

Описывается сценарий интерфейсного диалога пользователя с программой. Изложение подробно иллюстрируется копиями диалоговых форм, полученных в ходе выполнения программы.


1. Ввод необходимых данных.


Для правильной работы программы необходимо ввести следующие данные: минимальное число элементов в файле A, максимальное число элементов в файле A, шаг изменения количества элементов в файле A от минимального до максимального, число элементов в векторе B.



В случае введения неверной информации программа выдаст соответствующее диалоговое окно:


а) при незаполнении одного из полей:



б) при введении в одно из полей символа(ов), не являющегося(ихся) цифрой(ами):



в) при введении в поле Nmin значения, превышающего значение в поле Nmax:



г) при введении неположительного числа(чисел) либо числа(чисел), превышающего(их) максимально допустимое значение - 65535:



2. Поиск и вычисление времени, затраченного на поиск и сортировку


Для включения режима поиска необходимо нажать кнопку с надписью «ПОИСК»



При верно введенных данных режим поиска успешно начнёт работу, о чём будет свидетельствовать отсутствие диалоговых окон после нажатия кнопки «ПОИСК». После окончания вышеуказанного процесса результаты будут представлены в таблицы 1 и 2, а также выведены в виде графиков соответствующих функций для дальнейшего анализа.


3. Анализ.


Как уже было сказано ранее, данные для анализа будут представлены в таблицах 1 и 2, а также в виде кривых.


Таблица 1 состоит из следующих граф:


- N (длина таблицы),


- tЛП1
(N) – время первого линейного поиска,


- tлп2
(N) – время второго линейного поиска,


- tДП
(N) – время двоичного поиска,


tЛП-М
(N) – время поиска с накоплением запросов.



Вторая таблица имеет следующие графы:


- N,


- tлп2
(N)+ tсА
(N), где tСА
(N) – время сортировки файла А,


- tДп
(N)+ tсА
(N),


- tлп-М
(N)+ tсА
(N)+ tсВ
(N).



Справа от каждой таблицы изображены графики соответствующих функций, которые можно просматривать как вместе, так и по отдельности, для чего необходимо выбрать соответствующее положение кнопки(ок) RadioButton:



или так:



Для просмотра определённого графика необходимо выбрать соответствующее название в выпадающем списке справа от панели с кнопками переключения режима вывода графиков (при этом, конечно, должен быть включен режим «ПО ОТДЕЛЬНОСТИ»).



При удовлетворительных результатах можно перейти к завершению приложения, в противном случае же – ввести новые данные и начать новый поиск (см. п.1).


4. Выход из программы.


Для завершения приложения необходимо нажать на кнопку «ЗАКРЫТЬ» или на крестик в правом верхнем углу.



ЗАКЛЮЧЕНИЕ


Приложение (исходные тексты всех модулей)


Исходный текст модуля Project.dpr:


program Project;


uses


Forms,


MainForm in 'MainForm.pas' {Form1};


{$R *.res}


begin


Application.Initialize;


Application.CreateForm(TForm1, Form1);


Application.Run;


end.


Исходный текст модуля MainForm.pas:


unit MainForm;


interface


uses


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


Dialogs, StdCtrls, ExtCtrls, TeeProcs, TeEngine, Chart, Buttons, Grids,


Series;


type


TForm1 = class(TForm)


sgTb2: TStringGrid;


sgTb1: TStringGrid;


Label1: TLabel;


Label2: TLabel;


btFind: TButton;


btClose: TBitBtn;


rbTog1: TRadioButton;


rbEve1: TRadioButton;


cbSel1: TComboBox;


edNmin: TEdit;


edNmax: TEdit;


edLen: TEdit;


Label4: TLabel;


Chart1: TChart;


Series1: TLineSeries;


Series2: TLineSeries;


Series3: TLineSeries;


Series4: TLineSeries;


edStep: TEdit;


Label5: TLabel;


Label6: TLabel;


Label7: TLabel;


Chart2: TChart;


rbTog2: TRadioButton;


rbEve2: TRadioButton;


cbSel2: TComboBox;


Series5: TLineSeries;


Series6: TLineSeries;


Series7: TLineSeries;


Panel1: TPanel;


Panel2: TPanel;


procedure rbEve1Click(Sender: TObject);


procedure rbTog1Click(Sender: TObject);


procedure btFindClick(Sender: TObject);


procedure LinFind;


procedure BinFind;


procedure LinFindAcc;


procedure SortA;


procedure SortB;


procedure Verify;


procedure rbValClick(Sender: TObject);


procedure rbIntClick(Sender: TObject);


procedure Fill;


procedure FormCreate(Sender: TObject);


procedure cbSel1Change(Sender: TObject);


procedure rbTog2Click(Sender: TObject);


procedure rbEve2Click(Sender: TObject);


procedure cbSel2Change(Sender: TObject);


private


{ Private declarations }


public


{ Public declarations }


end;


var


Form1: TForm1;


A : file of Word;


B, arA : array of Word;


Nmin, Nmax, Step, K, t, i, rnd, Fval : Word;


SortA1, SortA2, SortAB, LinF1, LinF2, BinF, LinFAcc: array [0..1, 1..4, 1..65535] of Word;


TSortA1, TSortA2, TSortAB, TLinF1, TLinF2, TBinF, TLinFAcc: array [1..65535] of Word;


Acc : array [1..3, 1..65535] of Word;


implementation


{$R *.dfm}


pr

ocedure TForm1.Fill;


var


r : Integer;


begin


Rewrite(A);


for r:=1 to i do //Наполнение файла


begin //случайными значениями


Fval:=Random(64000);


Write(A, Fval);


end;


end;


procedure TForm1.LinFind; //Линейный поиск


var


s1, s2 : Word;


begin


for s1:=0 to K-1 do


for s2:=0 to i-1 do


begin


Seek(A, s2);


Read(A, Fval);


if (B[s1]=Fval) then Exit;


end;


end;


procedure TForm1.BinFind; //Двоичный поиск


var


s1, cou, cou1, cou2 : integer;


label


1;


begin


for s1:=0 to K-1 do


begin


cou1:=0;


cou2:=i-1;


While cou1<=cou2 do


begin


cou:=(cou2+cou1) div 2;


Seek(A, cou);


Read(A, Fval);


if (Fval=B[s1]) then goto 1


else if Fval<B[s1] then cou1:=cou+1


else cou2:=cou-1;


end;


1 : end;


end;


procedure TForm1.LinFindAcc; //Линейный поиск с накоплением


var


s1, s2, cou : Word;


begin


cou:=1;


for s1:=0 to K-1 do


for s2:=0 to i-1 do


begin


Seek(A, s2);


Read(A, Fval);


if (B[s1]=Fval) then


begin


Acc[1, cou]:=s2;


Acc[2, cou]:=s1;


Acc[3, cou]:=Fval;


cou:=cou+1;


end;


end;


end;


procedure TForm1.SortA; //Сортировка файла A


var


r, d : integer;


tmp, val : Word;


begin


SetLength(arA, i);


for r:=0 to i-1 do


begin


Seek(A, r);


Read(A, val);


arA[r]:=val;


end;


for r:=0 to i-2 do


for d:=r+1 to i-1 do


begin


if (arA[r]>arA[d]) then


begin


tmp:=arA[r];


arA[r]:=arA[d];


arA[d]:=tmp;


end;


end;


Rewrite(A);


for r:=0 to i-1 do Write(A, arA[r]);


end;


procedure TForm1.SortB; //Сортировка вектора B


var


r, d : integer;


tmp : Word;


begin


for r:=0 to K-2 do


for d:=r+1 to K-1 do


begin


if (B[r]>B[d]) then


begin


tmp:=B[r];


B[r]:=B[d];


B[d]:=tmp;


end;


end;


end;


procedure TForm1.Verify; //Проверка


begin


if (edNmin.Text='') or (edNmax.Text='') or (edStep.Text='') or (edLen.Text='') then


begin


ShowMessage('Укажите значения всех параметров!');


Abort;


end;


try


Nmin:=StrToInt(edNmin.Text);


Nmax:=StrToInt(edNmax.Text);


Step:=StrToInt(edStep.Text);


K:=StrToInt(edLen.Text);


except


ShowMessage('Некоторые параметры указаны неверно!');


Abort;


end;


if (StrToInt(edNmin.Text)<=0) or (StrToInt(edNmax.Text)<=0) or


(StrToInt(edStep.Text)<=0) or (StrToInt(edLen.Text)<=0) or


(StrToInt(edNmin.Text)>65535) or (StrToInt(edNmin.Text)>65535) or


(StrToInt(edStep.Text)>65535) or (StrToInt(edLen.Text)>65535) then


begin


ShowMessage('Значения должны лежать в интервале 1..65535!');


Abort;


end;


if (StrToInt(edNmin.Text)>=StrToInt(edNmax.Text)) then


begin


ShowMessage('Максимальное значение таблицы должно быть меньше минимального!');


Abort;


end;


end;


procedure TForm1.rbEve1Click(Sender: TObject);


begin


cbSel1.Enabled:=true;


Chart1.Series[1].Active:=false;


Chart1.Series[2].Active:=false;


Chart1.Series[3].Active:=false;


Chart1.Series[0].Active:=false;


Chart1.Series[cbSel1.ItemIndex].Active:=true;


end;


procedure TForm1.rbTog1Click(Sender: TObject);


begin


cbSel1.Enabled:=false;


Chart1.Series[1].Active:=true;


Chart1.Series[2].Active:=true;


Chart1.Series[3].Active:=true;


Chart1.Series[0].Active:=true;


end;


procedure TForm1.btFindClick(Sender: TObject);


begin


Verify;


AssignFile(A, 'file.bin');


Rewrite(A);


sgTb1.ColCount:=5;


sgTb1.RowCount:=Nmax-Nmin;


SetLength(B, K); //Размер вектора B


for t:=0 to K-1 do //Наполнение вектора


begin //случайными значениями


rnd:=Random(64000);


B[t]:=rnd;


end;


t:=1;


i:=Nmin;


While i<Nmax do //Первый линейный поиск


begin


Fill; //Наполнение файла


DecodeTime(Time, LinF1[0, 1, t], LinF1[0, 2, t], LinF1[0, 3, t], LinF1[0, 4, t]);


LinFind;


DecodeTime(Time, LinF1[1, 1, t], LinF1[1, 2, t], LinF1[1, 3, t], LinF1[1, 4, t]);


TLinF1[t]:=Linf1[1, 4, t]+1000*LinF1[1, 3, t]-Linf1[0, 4, t]-1000*LinF1[0, 3, t];


sgTb1.Cells[0, t]:=FloatToStr(i);


sgTb1.Cells[1, t]:=FloatToStr(TLinF1[t]);


Chart1.SeriesList[0].AddXY(i, TLinF1[t], '');


i:=i+Step;


t:=t+1;


end;


if i>=Nmax then //Поиск при


begin //размере таблицы Nmax


i:=Nmax;


Fill;


DecodeTime(Time, LinF1[0, 1, t], LinF1[0, 2, t], LinF1[0, 3, t], LinF1[0, 4, t]);


LinFind;


DecodeTime(Time, LinF1[1, 1, t], LinF1[1, 2, t], LinF1[1, 3, t], LinF1[1, 4, t]);


TLinF1[t]:=Linf1[1, 4, t]+1000*LinF1[1, 3, t]-Linf1[0, 4, t]-1000*LinF1[0, 3, t];


sgTb1.Cells[0, t]:=FloatToStr(i);


sgTb1.Cells[1, t]:=FloatToStr(TLinF1[t]);


Chart1.SeriesList[0].AddXY(i, TLinF1[t], '');


end;


t:=1;


i:=Nmin;


While i<Nmax do //Второй линейный поиск


begin


Fill;


DecodeTime(Time, SortA1[0, 1, t], SortA1[0, 2, t], SortA1[0, 3, t], SortA1[0, 4, t]);


SortA; //Сортировка файла A


DecodeTime(Time, LinF2[0, 1, t], LinF2[0, 2, t], LinF2[0, 3, t], LinF2[0, 4, t]);


LinFind;


DecodeTime(Time, LinF2[1, 1, t], LinF2[1, 2, t], LinF2[1, 3, t], LinF2[1, 4, t]);


TLinF2[t]:=Linf2[1, 4, t]+1000*LinF2[1, 3, t]-Linf2[0, 4, t]-1000*LinF2[0, 3, t];


TSortA1[t]:=Linf2[1, 4, t]+1000*LinF2[1, 3, t]-SortA1[0, 4, t]-1000*SortA1[0, 3, t];


sgTb1.Cells[2, t]:=FloatToStr(TLinF2[t]);


sgTb2.Cells[0, t]:=FloatToStr(i);


sgTb2.Cells[1, t]:=FloatToStr(TSortA1[t]);


Chart1.SeriesList[1].AddXY(i, TLinF2[t], '');


Chart2.SeriesList[0].AddXY(i, TSortA1[t], '');


i:=i+Step;


t:=t+1;


end;


if i>=Nmax then //Поиск при


begin //размере таблицы Nmax


i:=Nmax;


Fill;


DecodeTime(Time, SortA1[0, 1, t], SortA1[0, 2, t], SortA1[0, 3, t], SortA1[0, 4, t]);


SortA;


DecodeTime(Time, LinF2[0, 1, t], LinF2[0, 2, t], LinF2[0, 3, t], LinF2[0, 4, t]);


LinFind;


DecodeTime(Time, LinF2[1, 1, t], LinF2[1, 2, t], LinF2[1, 3, t], LinF2[1, 4, t]);


TLinF2[t]:=Linf2[1, 4, t]+1000*LinF2[1, 3, t]-Linf2[0, 4, t]-1000*LinF2[0, 3, t];


TSortA1[t]:=Linf2[1, 4, t]+1000*LinF2[1, 3, t]-SortA1[0, 4, t]-1000*SortA1[0, 3, t];


sgTb2.Cells[0, t]:=FloatToStr(i);


sgTb1.Cells[2, t]:=FloatToStr(TLinF2[t]);


sgTb2.Cells[1, t]:=FloatToStr(TSortA1[t]);


Chart1.SeriesList[1].AddXY(i, TLinF2[t], '');


Chart2.SeriesList[0].AddXY(i, TSortA1[t], '');


end;


t:=1;


i:=Nmin;


While i<Nmax do //Двоичный поиск


begin


Fill;


DecodeTime(Time, SortA2[0, 1, t], SortA2[0, 2, t], SortA2[0, 3, t], SortA2[0, 4, t]);


SortA;


DecodeTime(Time, BinF[0, 1, t], BinF[0, 2, t], BinF[0, 3, t], BinF[0, 4, t]);


BinFind;


DecodeTime(Time, BinF[1, 1, t], BinF[1, 2, t], BinF[1, 3, t], BinF[1, 4, t]);


TBinF[t]:=BinF[1, 4, t]+1000*BinF[1, 3, t]-BinF[0, 4, t]-1000*BinF[0, 3, t];


TSortA2[t]:=BinF[1, 4, t]+1000*BinF[1, 3, t]-SortA2[0, 4, t]-1000*SortA2[0, 3, t];


sgTb1.Cells[3, t]:=FloatToStr(TBinF[t]);


sgTb2.Cells[2, t]:=FloatToStr(TSortA2[t]);


Chart1.SeriesList[2].AddXY(i, TBinF[t], '');


Chart2.SeriesList[1].AddXY(i, TSortA2[t], '');


i:=i+Step;


t:=t+1;


end;


if i>=Nmax then //Поиск при


begin //размере таблицы Nmax


i:=Nmax;


Fill;


DecodeTime(Time, SortA2[0, 1, t], SortA2[0, 2, t], SortA2[0, 3, t], SortA2[0, 4, t]);


SortA;


DecodeTime(Time, BinF[0, 1, t], BinF[0, 2, t], BinF[0, 3, t], BinF[0, 4, t]);


LinFind;


DecodeTime(Time, BinF[1, 1, t], BinF[1, 2, t], BinF[1, 3, t], BinF[1, 4, t]);


TBinF[t]:=BinF[1, 4, t]+1000*BinF[1, 3, t]-BinF[0, 4, t]-1000*BinF[0, 3, t];


TSortA2[t]:=BinF[1, 4, t]+1000*BinF[1, 3, t]-SortA2[0, 4, t]-1000*SortA2[0, 3, t];


sgTb1.Cells[3, t]:=FloatToStr(TBinF[t]);


sgTb2.Cells[2, t]:=FloatToStr(TSortA2[t]);


Chart1.SeriesList[2].AddXY(i, TBinF[t], '');


Chart2.SeriesList[1].AddXY(i, TSortA2[t], '');


end;


t:=1;


i:=Nmin;


While i<Nmax do //Линейный поиск


begin //с накоплением


Fill;


DecodeTime(Time, SortAB[0, 1, t], SortAB[0, 2, t], SortAB[0, 3, t], SortAB[0, 4, t]);


SortA;


SortB; //Сортировка вектора B


DecodeTime(Time, LinFAcc[0, 1, t], LinFAcc[0, 2, t], LinFAcc[0, 3, t], LinFAcc[0, 4, t]);


LinFindAcc;


DecodeTime(Time, LinFAcc[1, 1, t], LinFAcc[1, 2, t], LinFAcc[1, 3, t], LinFAcc[1, 4, t]);


TLinFAcc[t]:=LinFAcc[1, 4, t]+1000*LinFAcc[1, 3, t]-LinFAcc[0, 4, t]-1000*LinFAcc[0, 3, t];


TSortAB[t]:=LinFAcc[1, 4, t]+1000*LinFAcc[1, 3, t]-SortAB[0, 4, t]-1000*SortAB[0, 3, t];


sgTb1.Cells[4, t]:=FloatToStr(TLinFAcc[t]);


sgTb2.Cells[3, t]:=FloatToStr(TSortAB[t]);


Chart1.SeriesList[3].AddXY(i, TLinFAcc[t], '');


Chart2.SeriesList[2].AddXY(i, TSortAB[t], '');


i:=i+Step;


t:=t+1;


end;


if i>=Nmax then //Поиск при


begin //размере таблицы Nmax


i:=Nmax;


Fill;


DecodeTime(Time, SortAB[0, 1, t], SortAB[0, 2, t], SortAB[0, 3, t], SortAB[0, 4, t]);


SortA;


SortB;


DecodeTime(Time, LinFAcc[0, 1, t], LinFAcc[0, 2, t], LinFAcc[0, 3, t], LinFAcc[0, 4, t]);


LinFindAcc;


DecodeTime(Time, LinFAcc[1, 1, t], LinFAcc[1, 2, t], LinFAcc[1, 3, t], LinFAcc[1, 4, t]);


TLinFAcc[t]:=LinFAcc[1, 4, t]+1000*LinFAcc[1, 3, t]-LinFAcc[0, 4, t]-1000*LinFAcc[0, 3, t];


TSortAB[t]:=LinFAcc[1, 4, t]+1000*LinFAcc[1, 3, t]-SortAB[0, 4, t]-1000*SortAB[0, 3, t];


sgTb1.Cells[4, t]:=FloatToStr(TLinFAcc[t]);


sgTb2.Cells[3, t]:=FloatToStr(TSortAB[t]);


Chart1.SeriesList[3].AddXY(i, TLinFAcc[t], '');


Chart2.SeriesList[2].AddXY(i, TSortAB[t], '');


end;


sgTb1.RowCount:=t+1;


CloseFile(A);


Erase(A);


Finalize(B);


end;


procedure TForm1.rbValClick(Sender: TObject);


begin


edNmax.Visible:=false;


edStep.Visible:=false;


end;


procedure TForm1.rbIntClick(Sender: TObject);


begin


edNmax.Visible:=true;


edStep.Visible:=true;


end;


procedure TForm1.FormCreate(Sender: TObject);


begin


Randomize;


sgTb1.Cells[0, 0]:='N';


sgTb1.Cells[1, 0]:='tЛП1';


sgTb1.Cells[2, 0]:='tЛП2';


sgTb1.Cells[3, 0]:='tДП';


sgTb1.Cells[4, 0]:='tЛП-М';


sgTb2.Cells[0, 0]:='N';


sgTb2.Cells[1, 0]:='tЛП2+tСA';


sgTb2.Cells[2, 0]:='tДП+tСA';


sgTb2.Cells[3, 0]:='tЛП-М+tС';


cbSel1.ItemIndex:=0;


cbSel2.ItemIndex:=0;


rbTog1.Checked:=true;


rbTog2.Checked:=true;


end;


procedure TForm1.cbSel2Change(Sender: TObject);


begin


Chart2.Series[0].Active:=false;


Chart2.Series[1].Active:=false;


Chart2.Series[2].Active:=false;


Chart2.Series[cbSel2.ItemIndex].Active:=true;


end;


procedure TForm1.cbSel1Change(Sender: TObject);


begin


Chart1.Series[1].Active:=false;


Chart1.Series[2].Active:=false;


Chart1.Series[3].Active:=false;


Chart1.Series[0].Active:=false;


Chart1.Series[cbSel1.ItemIndex].Active:=true;


end;


procedure TForm1.rbEve2Click(Sender: TObject);


begin


cbSel2.Enabled:=true;


Chart2.Series[0].Active:=false;


Chart2.Series[1].Active:=false;


Chart2.Series[2].Active:=false;


Chart2.Series[cbSel2.ItemIndex].Active:=true;


end;


procedure TForm1.rbTog2Click(Sender: TObject);


begin


cbSel2.Enabled:=false;


Chart2.Series[0].Active:=true;


Chart2.Series[1].Active:=true;


Chart2.Series[2].Active:=true;


end;


end.

Сохранить в соц. сетях:
Обсуждение:
comments powered by Disqus

Название реферата: Структуры и организация данных в ЭВМ

Слов:2607
Символов:29372
Размер:57.37 Кб.