Помогите, пожалуйста, никак не могу найти ошибку >.<
Пишу решение СЛУ Крамером. Вычисляю определители сводя их к треугольному виду и перемножая элементы главной диагонали.
Для проб специально задала массив. Корни должны получится 1, 3 и 5. Вывод сделан несколько раз, чтобы проследить ошибку..
Главный определитель считает нормально.
Судя по всему, у меня не получается свести к треугольному виду все остальные определители, потому что
5 1 0
27 -1 6
-290 0 -58
- я вручную считаю и получается правильно - 116, а после свода к треугольному виду очевидно, что произведение элементов главной диагонали не 116..
uses crt;
type
mas= array[0..20, 0..20] of real;
masodnom= array[0..10] of real;
var
a, b: mas;
i, j, m, c, d, n: integer;
opr, x: masodnom;
opred, r, s: real;
begin
n:= 3;
a[0,0]:= 2;
a[0,1]:= 1;
a[0,2]:= 0;
a[0,3]:= 5;
a[1,0]:= 1;
a[1,1]:= 0;
a[1,2]:= 3;
a[1,3]:= 16;
a[2,0]:= 0;
a[2,1]:= 5;
a[2,2]:= -1;
a[2,3]:= 10;
for i:= 0 to n-1 do
begin
for j:= 0 to n do
write(a[i,j]:6:3, ' ');
writeln;
end;
readln;
for j:= 0 to n-2 do
begin
r:= a[j,j];
if r = 0 then {избавление от нулей на}
for i:= 0 to n-1 do {главной диагонали}
if a[i,j] <> 0 then
begin
for m:= 0 to n do
a[j,m]:= a[j,m] + a[i,m];
break;
end;
for i:= j+1 to n-1 do {приведение матрицы к}
begin {треугольному виду}
s:= a[i,j];
for m:= j to n do
a[i,m]:= a[i,m] * r - a[j,m] * s;
end;
end;
for i:= 0 to n-1 do {вывод}
begin
for j:= 0 to n do
write(a[i,j]:6:3, ' ');
writeln;
end;
readln;
opred:= 1; //вычисление главного
for i:= 0 to n-1 do //определителя
opred:= opred * a[i,i];
write('Главный определитель = ', opred);
readln;
for d:= 0 to n-1 do
begin
b:= a; //составление d-го подопределителя
for c:= 0 to n do
b[c,d]:= a[c,n];
writeln(d, '-й определитель:');
for i:= 0 to n-1 do {вывод}
begin
for j:= 0 to n-1 do
write(b[i,j]:6:3, ' ');
writeln;
end;
readln;
for j:= 0 to n-2 do
begin
r:= b[j,j];
if r = 0 then //избавление от нулей на
for i:= 0 to n-1 do //главной диагонали
if b[i,j] <> 0 then //d-го подопределителя
begin
for m:= 0 to n do
b[j,m]:= b[j,m] + b[i,m];
break;
end;
for i:= j+1 to n-1 do //приведение d-го определителя к
begin //треугольному виду
s:= b[i,j];
for m:= j to n-1 do
b[i,m]:= b[i,m] * r - b[j,m] * s;
end;
end;
opr[d]:= 1; //вычисление d-го
for i:= 0 to n-1 do //подопределителя
opr[d]:= opr[d] * b[i,i];
for i:= 0 to n-1 do {вывод}
begin
for j:= 0 to n-1 do
write(b[i,j]:6:3, ' ');
writeln;
end;
readln;
write(d, '-й определитель = ', opr[d]);
readln;
end;
for i:= 0 to n-1 do
x[i]:= opr[i] / opred;
for i:= 0 to n-1 do
writeln(x[i]);
end.
Помогите, прошу!