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

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

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

____________________________________________________________________

end;

solve:= 0;

end

else

if b[n-1] = 0 then

begin

MessageDlg('Система имеет бесконечное ' +

'количество решений', mtInformation,[mbOK], 0); solve:= 2;

end else begin

MessageDlg('Система не имеет решений',

mtInformation,[mbOK], 0);

solve:= 1; end;

{ освобождение памяти } a:=nil;

end;

{ TForm1 }

procedure TForm1.FileOpen1Accept(Sender: TObject);

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

var

f: TextFile;

i: integer;

Fname: string;

begin

Fname:= FileOpen1.Dialog.FileName;

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

756

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

____________________________________________________________________

AssignFile(f, Fname);

Reset(f);

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

{$I-}

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

Readln(f, n);

if IOResult <> 0 then

begin

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

exit;

end;

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

SetLength(x, n);

SetLength(y, n);

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('Ошибка при чтении из файла!');

757

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

____________________________________________________________________

exit;

end;

end; {$I+}

CloseFile(f);

A_Calculate.Enabled:= true;

end;

procedure TForm1.FormCreate(Sender: TObject); begin

Chart1.Title.Text.Text:='Метод наименьших квадратов'; A_Calculate.Enabled:= false; A_Grafic_Exp.Enabled:= false; A_Grafic_Curve.Enabled:= false;

Chart1.Visible:= false; end;

procedure TForm1.A_ExitExecute(Sender: TObject); begin

Close;

end;

procedure TForm1.A_Grafic_CurveExecute(Sender: TObject);

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

var

i: integer;

gr1, gr2: TLineSeries;

begin

758

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

____________________________________________________________________

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 gr1.AddXY(x[i], y[i]); for i:= 0 to n - 1 do gr2.AddXY(x[i], fx(x[i]));

end;

procedure TForm1.A_Grafic_ExpExecute(Sender: TObject);

{Процедура вывода графика экспериментальных

данных по точкам}

var

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.A_CalculateExecute(Sender: TObject); var

i, j, k, l: integer;

759

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

____________________________________________________________________

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

solve: byte; begin

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

A_Grafic_Exp.Enabled:= true;

A_Grafic_Curve.Enabled:= true;

760

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

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