• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Определитель матрицы. Помогите найти в чем ошибка

  • Автор темы Автор темы Emeral
  • Дата начала Дата начала

Emeral

Ученик
Регистрация
24 Апр 2011
Сообщения
1
Реакции
0
Баллы
0
Определитель матрицы. Помогите найти в чем ошибка

Надо написать программу в паскале для поиска определителя матрицы по такому алгоритму:
1. В 1-ом столбце ищем максимальный по модулю эл-т и запоминаем номер строки
2. Если этот эл-т равен 0, то и определитель равен нулю
3. Если номер строки не равен 1, то меняем эту строку с 1-ой и умножаем определитель на -1
4. Делим 1 строку на эл-т [1;1] и умножаем определитель на эл-т [1;1]
5. Из j-ого столбца (от 2 до размерности) вычитаем 1-ый столбец, умноженный на [1;j]
Все это делаем (размерность матрицы-1) раз

умножаем определитель на последний эл-т в матрице.

Я составила вот такую программу:

Type mas = array [1..10, 1..10] of real;
Var n: Integer;
d: real;
a: mas;

Procedure vvod (Var A: Integer);
Var rk: Integer;
begin
{$I-}
repeat
Writeln ('Vvedite razmernost matrici');
Readln (a);
rk:=ioresult;
if (rk<>0) or (A<=0) or (A>10) then
Writeln ('error')
until (rk=0) and (A>0) and (A<=10);
{$I+}
end;

Procedure Zap (Var m: mas; n: integer);
Var i, j: Integer;
begin
Writeln('Vvedite elementi matrici postrochno');
For i:=1 to n do
for j:=1 to n do
Read (m[i,j]);
end;


Procedure deter ( var a: mas; n: integer; var det: real);
Var i, k, j, c: integer;
max, b: real;
begin
det:=1;
j:=1;
k:=1;
While (j<=n) do
begin
max:=a[1,j];
for i := (j+1) to n do
if (abs(a[i, j])>abs (max)) then begin
max:=a[i, j];
k:=i
end;
if max=0 then
det:=0
else begin
if (k<>j) then begin
det:=det*(-1);
for i:=j to n do begin
b:=a[j, i];
a[j, i]:=a[k, i];
a[k, i]:=b end;
end;
for i:=j to n do
a[j, i]:= a[j, i]/a[j, j];
det:= det*a[j, j];

for i:=j+1 to n do begin
for c:=1 to n do
a[c, i]:= a[c, i] - a[c, j]*a[i, j];
end;
end;
j:=j+1;
end;
det:=det*a[n, n];
end;


Procedure Vivod (m: mas; n: integer);
Var i, j: Integer;
begin
For i:=1 to n do
begin
for j:=1 to n do
Write (m[i, j]:7:3, ' ');
Writeln;
end;
end;

begin
vvod (n);
Zap (a, n);
Vivod (a, n);
Readln;
deter (a, n, d);
Readln;
Writeln ('Opredelitel matrici ', d:5:3);
Readln;
end.



С 5-ым шагом выходит как-то не получается. Помогите найти в чем ошибка
 
Назад
Сверху