Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 24.04.2011, 21:46   #1 (permalink)
Emeral
Новичок
 
Регистрация: 24.04.2011
Сообщений: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
Exclamation Определитель матрицы. Помогите найти в чем ошибка

Надо написать программу в паскале для поиска определителя матрицы по такому алгоритму:
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-ым шагом выходит как-то не получается. Помогите найти в чем ошибка
Emeral вне форума   Ответить с цитированием

Старый 24.04.2011, 21:46
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Как вы уже поняли - это темы которые имеют сходства с вашей

Помогите найти схему
Помогите найти программу для изменения формата видео
Помогите найти
Помогите найти ошибку
Определитель матрицы с помощью рекурсии. Delphi
Помогите найти

Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Метки
матрица, определитель, паскаль


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 01:18.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.