Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.11.2013, 17:08   #1
al172
Новичок
Джуниор
 
Регистрация: 12.11.2013
Сообщений: 2
По умолчанию решение СЛАУ методом гаусса

помогите исправить ошибки...не работает, я новенькая в программировании, программу нашла, а исправить не могу(( помогите девушке - новечку))

Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, XPMan, Grids, ComCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Label1: TLabel;
UpDown1: TUpDown;
StringGrid1: TStringGrid;
Label2: TLabel;
StringGrid2: TStringGrid;
Edit2: TEdit;
Label3: TLabel;
XPManifest1: TXPManifest;
Button1: TButton;
procedure Edit1Change(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var l, la, a: array [0..100, 0..100] of Real; //Формат: номер матрицы L, строки, столбцы
lb,b,xsolved: array [0..100] of real; //xsolved - вектор-решение СЛАУ
zz:Real; //Промежуточная переменная
i,j,n,k: integer;
ch: array [0..100] of Integer;
Form1: TForm1;
implementation
{$R *.dfm}
procedure lmatrix (num: integer);
//(num+1) - номер очередной матрицы L
//Сама процедура находит L c индексом (num+1)
begin
for i:=0 to (n-1) do begin
for j:=0 to (n-1) do L[i,j]:=0;
L[i, i]:=1;
end;
L[num, num]:=1/a[num, num];
for i:=(num+1) to (n-1) do begin
L[i, num]:=-a[i, num]*L[num, num];
L[i, i]:=1;
end;
end;
procedure lamatrix (num:integer);
//Получаем матрицу L(num+1)*...*L(1)*A
var x:real;
begin
if num=0 then
for i:=0 to (n-1) do
for j:=0 to (n-1) do
LA[i,j]:=a[i,j]
else
for i:=0 to (n-1) do
for j:=0 to (n-1) do begin
x:=0;
for k:=0 to (n-1) do
x:=x+l[i, k]*a[k, j];
LA[i, j]:=x;
end;
for i:=0 to (n-1) do
for j:=0 to (n-1) do
a[i,j]:=La[i,j];
end;
procedure lbvector (num:integer);
//Получаем вектор L(num+1)*...*L(1)*b
var x:real;
begin
if num=0 then
for j:=0 to (n-1) do
LB[j]:=b[j]
else
for i:=0 to (n-1) do begin
x:=0;
for j:=0 to (n-1) do
x:=x+l[i, j]*b[j];
LB[i]:=x;
end;
for i:=0 to (n-1) do b[i]:=lb[i];
end;
procedure replace (num:integer);
begin
//Поиск максимального элемента по текущей строке
zz:=la[num,num];
for i:=(num+1) to (n-1) do
if Abs(zz)<Abs(la[num,i]) then begin
zz:=la[num,i];
ch[num]:=i;
end;
for i:=0 to (n-1) do begin
zz:=la[i,ch[num]];
la[i,ch[num]]:=la[i,num];
la[i,num]:=zz;
end;
for i:=0 to (n-1) do
for j:=0 to (n-1) do
a[i,j]:=La[i,j];
end;
procedure solving;
begin
xsolved[n-1]:=lb[n-1]/la[n-1, n-1];
for i:=(n-2) downto 0 do begin
zz:=0;
for j:=i to (n-1) do
zz:=zz+la[i, j]*xsolved[j];
xsolved[i]:=lb[i]-zz;
end;
for i:=(n-2) downto 0 do begin
zz:=xsolved[ch[i]];
xsolved[ch[i]]:=xsolved[i];
xsolved[i]:=zz;
end;
end;
procedure TForm1.Edit1Change(Sender: TObject);
begin
n:=StrToInt(Edit1.Text);
StringGrid1.ColCount:=n;
StringGrid1.RowCount:=n;
StringGrid2.RowCount:=n;
end;
procedure TForm1.Button1Click(Sender: TObject);
var i,j:integer;
begin
//Обнуляем все матрицы для независимости от результатов предыдущих вычислений
for j:=0 to n do begin
for k:=0 to n do begin
l[j,k]:=0;
la[j,k]:=0;
a[j,k]:=0;
end;
lb[j]:=0;
b[j]:=0;
xsolved[j]:=0;
end;
Edit2.Text:='';
//Считывание элементов матрицы А и вектора b
for i:=0 to (n-1) do begin
for j:=0 to (n-1) do
a[i,j]:=StrToFloat(StringGrid1.Cells[j,i]);
b[i]:=StrToFloat(StringGrid2.Cells[0,i]);
end;
for i:=0 to (n-2) do begin
lamatrix(i);
lbvector(i);
replace(i);
lmatrix(i);
end;
lamatrix(n-1);
lbvector(n-1);
solving;
for i:=0 to (n-1) do Edit2.Text:=Edit2.Text+'x'+IntTostr(i+1)+'='+FloatTostr(xsolved[i])+'; ';
end;
end.


________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(это кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 13.11.2013 в 00:23.
al172 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Решение СЛАУ методом Гаусса doter Общие вопросы C/C++ 0 29.09.2012 22:09
Решение СЛАУ методом Гаусса и методом Крамера. R1k1 Помощь студентам 0 24.03.2012 19:17
Решение СЛАУ методом Гаусса Денис999 Помощь студентам 2 27.11.2011 18:31
Решение СЛАУ методом Гаусса Medvedko0116 Помощь студентам 0 27.06.2011 11:15
решение слау методом гаусса subarimpra Помощь студентам 0 31.10.2010 15:26