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

Листинг 2.5. Процедуры приложения, определяющего затраты времени

unit UDeterm;

implementation

uses UMatrix, UMGraph;

{$R *.DFM}

procedure TForml.ButtonlClick(Sender: TObject);
var i, j, N, NMax, HN: word;
tl, t2: TDateTime;
t: integers-Hour, Min, Sec, MSec: word;
Ml: TMatrix;
Det: reals-const TMax = 100;

begin

FGraph.Series1.Clear;
NMax := StrToInt(Editl.Text);
Screen.Cursor := crHourglass;
N := 2;

HN := (NMax - 2) div TMax; if HN < 1 then HN := 1; repeat

Ml := CreateMatrix(N,N) ;
RandSeed := 100;
for i:=0 to N-l do begin for j:=0 to N-l do Ml [is j] := Random;
end;
tl := Time;
Det := DetMatirix (Ml) ;
t2 := Time;
DecodeTime(t2-tl, Hour, Min, Sec, MSec);
t :--= Msec + Sec * 1000 + Min * 60000 + Hour * 3600000;
FGraph.Seriesl.AddXY(N,t,11,clRed);
Tnc(N, HN);
until N >
NMax;
Screen.Cursor := crDefault;

if (not FGraph.Visible) then FGraph.Show; ends-end.

unit UMGraph; var

FGraph: TFGraph; implementation {$R *.DFM}

procedure TFGraph.ClipboardlClick(Sender: TObject); begin

Chartl.CopyToClipboardBitmap; ends-end.

Начнем рассмотрение приведенного кода с процедуры ButtonlClick - обработчика щелчка на кнопке. В процедуре определен ряд локальных переменных и константа ТМах - максимальное число точек графика. Начинается процедура с очистки серии Seriesl, в которой формируется график на вспомогательной форме. Затем в переменную NMax читается заданная пользователем максимальная размерность задачи. Курсору дается форма "песочные часы", поскольку предстоит длительный расчет. Начальный размер матрицы N устанавливается равным 2. Исходя из значений NMax и ТМах, вычисляется шаг HN изменения размера матрицы. Если шаг оказывается меньше 1 (при небольшой величине NMax), он задается равным 1. Далее следует цикл вычислений. Для текущего значения размера N создается матрица Ml. Она заполняется случайными значениями, получаемыми с помощью функции Random. В переменной tl запоминается текущее время Time. Вызывается расчет определителя и в переменной t2 фиксируется время окончания расчета. Затем функцией DecodeTime отрезок времени t2 - tl переводится в миллисекунды, секунды, минуты и часы. В переменной t формируется значение этого отрезка времени в миллисекундах. Затем методом AddXY определенная точка с координатами N и t заносится в график. В заключение размер N увеличивается на HN и, если заданное значение NMax не превышено, выполнение цикла продолжается. Когда расчет всех точек завершен, восстанавливается форма курсора и вспомогательная форма делается видимой, если ранее она была невидима.

Единственная процедура ClipboardlClick вспомогательной формы состоит всего из одного оператора, который методом CopyToClipboardBitmap копирует график в буфер обмена в формате BMP. А настройку компонента Chart мы здесь обсуждать не будем, поскольку эти вопросы подробно рассмотрены в гл. 7.


⇐ Предыдущая страница| |Следующая страница ⇒

Приемы программирования в Delphi на основе VCL



Новости за месяц

  • Февраль
    2020
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс