Помощь в написании студенческих работ
Антистрессовый сервис

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

КурсоваяПомощь в написанииУзнать стоимостьмоей работы

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

Структуры и организация данных в ЭВМ (реферат, курсовая, диплом, контрольная)

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, 64 000] (2 байта);

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

SortA1, SortA2, SortAB: array [0.1, 1.4, 1.65 535] of Word — значения текущего времени перед выполнением сотвуетствующего вида сортировки в цикле (2*4*65 536*2 байта = 1 048 560 байт);

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

TSortA1, TSortA2, TSortAB array [1.65 535] of Word — значения периодов времени, затраченного на соответствующий вид сортировки в цикле (65 535*2 байта = 131 070 байт);

TLinF1, TLinF2, TBinF, TLinFAcc: array [1.65 535] of Word — значения периодов времени, затраченного на соответствующий вид поиска в цикле (65 535*2 байта = 131 070 байт);

Acc: array [1.3, 1.65 535] of Word — массив, накапливающий запросы (3*65 535*2 байта = 393 210 байт).

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 (64 000);

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

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:

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

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.65 535] of Word;

TSortA1, TSortA2, TSortAB, TLinF1, TLinF2, TBinF, TLinFAcc: array [1.65 535] of Word;

Acc: array [1.3, 1.65 535] of Word;

implementation

{$R *.dfm}

procedure TForm1. Fill;

var

r: Integer;

begin

Rewrite (A);

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

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

Fval:=Random (64 000);

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

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)>65 535) or (StrToInt (edNmin.Text)>65 535) or

(StrToInt (edStep.Text)>65 535) or (StrToInt (edLen.Text)>65 535) then

begin

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

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 (64 000);

B[t]: =rnd;

end;

t:=1;

i:=Nmin;

While i

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

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

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

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.

Показать весь текст
Заполнить форму текущей работой