Материал: Мансуров. Основы программирования в среде Lazarus. 2010

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Глава 6 Программирование приложений с графическим интерфейсом

____________________________________________________________________

i: integer;

gr1: TLineSeries; begin

Chart1.Visible:= true;

gr1:= TLineSeries.Create(Chart1); Chart1.AddSeries(gr1);

for i:= 0 to n - 1 do gr1.AddXY(x[i], y[i]);

end;

procedure TForm1.Menu_CurveClick(Sender: TObject);

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

var

i: integer;

gr1, gr2: TLineSeries; begin

Chart1.Visible:= true;

gr1:= TLineSeries.Create(Chart1); gr1.ShowPoints := true; // график с точками gr1.ShowLines := false; // не соединять точки линиями

Chart1.AddSeries(gr1);

gr2:= TLineSeries.Create(Chart1); gr2.ShowLines := true; Chart1.AddSeries(gr2);

for i:= 0 to n - 1 do

731

6.3 Визуальное программирование в среде Lazarus

____________________________________________________________________

gr1.AddXY(x[i], y[i]); for i:= 0 to n - 1 do gr2.AddXY(x[i], fx(x[i]));

end;

procedure TForm1.Menu_OpenClick(Sender: TObject);

// процедура выбора, открытия и чтения файла данных var

f: TextFile; i: integer;

begin

if OpenDialog1.Execute then Fname:= OpenDialog1.FileName

else exit;

Fname:= UTF8ToSys(Fname); //преобразование в системную кодировку

AssignFile(f, Fname);

Reset(f);

// отключение контроля ошибок ввода/вывода

{$I-}

// чтение количества экспериментальных точек

Readln(f, n);

if IOResult <> 0 then

begin

ShowMessage('Ошибка при чтении из файла!');

exit;

end;

// распределение памяти под динамические массивы

SetLength(x, n);

SetLength(y, n);

732

Глава 6 Программирование приложений с графическим интерфейсом

____________________________________________________________________

for i:= 0 to n - 1 do

begin

read(f, x[i]);

if IOResult <> 0 then

begin

ShowMessage('Ошибка при чтении из файла!'); exit;

end;

end;

for i:= 0 to n - 1 do begin

read(f, y[i]);

if IOResult <> 0 then begin

ShowMessage('Ошибка при чтении из файла!'); exit;

end;

end; {$I+}

CloseFile(f);

MCalculate.Enabled:= true;

end;

procedure TForm1.MCalculateClick(Sender: TObject); var

i, j, k, l: integer;

b, vector: array of real; s: real;

solve: byte; begin

733

6.3 Визуальное программирование в среде Lazarus

____________________________________________________________________

SetLength(z, 5);

SetLength(b, 5); SetLength(vector, 25); j:= 0;

for k:= 0 to 4 do for l:= 0 to 4 do begin

s:= 0;

for i:= 0 to n - 1 do

s:= s + stepen(x[i], k + l); vector[j]:= s;

j:= j+1; end;

for k:= 0 to 4 do begin

s:= 0;

for i:= 0 to n - 1 do

s:= s + y[i]*stepen(x[i], k); b[k]:= s;

end;

// решение СЛАУ

gauss(vector, b, z, 5, solve); if solve = 0 then

begin

Menu_Exp.Enabled:= true;

Menu_Curve.Enabled:= true;

end;

end; initialization

734

Глава 6 Программирование приложений с графическим интерфейсом

____________________________________________________________________

{$I unit1.lrs}

end.

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

тов системы мы сначала преобразовывали в одномерный динамический массив,

поскольку передавать в качестве формального параметра в функцию или про-

цедуру можно только одномерный динамический массив.

Поэтому в программе метода наименьших квадратов в процедуре

MCalculateClick формируется одномерный динамический массив vector,

который на самом деле является матрицей коэффициентов системы. Его мы и передаем (вместе с вектором свободных членов) в процедуру Gauss.

Перед пуском программы подготовьте в любом текстовом редакторе файл следующего вида:

Рис. 6.93. Файл данных

Файл имеет следующую структуру. Первая строка содержит количество точек. Вторая строка содержит значения Zi, третья строка содержит значения

Pi.

Обратите внимание, что до загрузки файла с экспериментальными данны-

ми пункты меню "Вычислить", "График экспериментальных точек" и

735

Смотрите также:

11 Горм +
113
14
1433
1511
1632
199
204
2N4264RE
3773