
17.05.2010, 10:21
|
Прохожий
|
|
Регистрация: 17.05.2010
Сообщения: 5
Репутация: 10
|
|
нужен алгоритм к этому исходнику
Код:
unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls, Buttons;
type
Vector = array[1..100] of Double;
Matrix = array[1..100] of Vector;
TForm3 = class(TForm)
Label1: TLabel;
Edit1: TEdit;
StringGrid1: TStringGrid;
StringGrid2: TStringGrid;
Button1: TButton;
Label2: TLabel;
Label3: TLabel;
Memo1: TMemo;
BitBtn1: TBitBtn;
Button2: TButton;
procedure Edit1Change(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form3: TForm3;
implementation
uses Unit1;
{$R *.dfm}
procedure TForm3.Button1Click(Sender: TObject);
var a: Matrix;
b,x: Vector;
h: Double;
i,j,k,n:integer;
begin
//Ввод данных
//Размерность системы
n := StrToInt( edit1.Text);
//Коэффициенты
for j := 0 to n - 1 do
for i := 0 to n - 1 do
a[i + 1, j + 1] := StrToFloat(StringGrid1.Cells[j, i]);
//Правая часть уравнения
for I := 0 to n - 1 do b[i + 1] := StrToFloat(StringGrid2.Cells[0, i]);
//Прямой ход - исключение переменных
for i:=1 to n-1 do
for j:=i+1 to n do
begin
a[j,i]:=-a[j,i]/a[i,i];
for k:=i+1 to n do
a[j,k]:=a[j,k]+a[j,i]*a[i,k];
b[j]:=b[j]+a[j,i]*b
end;
x[n]:=b[n]/a[n,n];
//Обратный ход - нахождение корней
for i:=n-1 downto 1 do
begin
h:=b;
for j:=i+1 to n do h:=h-x[j]*a[i,j];
x:=h/a[i,i]
end;
//Вывод результата
for i:=1 to n do MEMO1.Lines.Add('x(' + IntToStr(i) + ')=' + FloatToStr(x));
end;
procedure TForm3.Edit1Change(Sender: TObject);
begin
StringGrid1.ColCount:=strtoint(edit 1.Text);
StringGrid1.RowCount:=strtoint(edit 1.Text);
StringGrid2.RowCount:=strtoint(edit 1.Text);
end;
procedure TForm3.Button2Click(Sender: TObject);
begin
close;
end;
end.
Admin: Пользуемся тегами!
нарисуйте мне его! Оч прошу!
Последний раз редактировалось Admin, 17.05.2010 в 10:37.
|