Лабы / 3
.docxЗадание:
Вариант |
Контрольная система |
Применяемый метод |
4 |
Гаусса для вычисления корней системы |
Код:
procedure TForm5.Button1Click(Sender: TObject);
var
a:array [0..10,0..10] of real;
x:array [0..10] of real;
n,k,i,j,m,l,ks:integer;
c,w,s:real;
label v;
label u;
begin
n:=(strtoint(edit3.text)); //порядок
for i:=0 to n-1 do //строка
for j:=0 to n do //столбец
a[i,j]:=strtofloat(stringgrid1.Cells[j,i]); //ввели
m:=1;
n:=n-1;
for i:=0 to (n-1) do begin //глобальная b//
if a[i,i]<>0 then
goto v //метка
else
while a[m,i]=0 do //столбец
m:=m+1;
if m>n then begin
break;
end else
for j:=i to n+1 do begin //2 b//
w:=a[i,j]; //меняем местами
a[i,j]:=a[m,j];
a[m,j]:=w;
end; //2 e//
v:c:=a[i,i]; //метка сюда
a[i,i]:=1;
for l:=(i+1) to (n+1) do begin //1 b/
a[i,l]:=a[i,l]/c;
for k:=(i+1) to n do
a[k,l]:=a[k,l]-a[i,l]*a[k,i];
end; //1 e/
end; //глоб e///
{обратный}
if a[n,n]=0 then begin
showmessage ('no');
break
end else
x[n]:=A[n,n+1]/A[n,n]; //х последнего порядка
k:=n-1; //порядок -1 (3-1)=2
while k>=0 do begin
s:=0;
for j:=k+1 to n do
s:=s+a[k,j]*x[j];
x[k]:=a[k,n+1]-s;
k:=k-1; //4-2
end;
for i:=0 to n do
memo1.Lines.add(floattostr(x[i]));
end;
end.
Результат:
Блок-схема
Ввод
{ai}n-2,{bi}n-1,n
A[i,i]<>0 M:=1; N:=n-1 M:=m+1 A[m,i]=0
A
+
-
+
m>n end
+
end