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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.04.2011, 21:09   #1
emeral
Новичок
Джуниор
 
Регистрация: 24.04.2011
Сообщений: 1
Восклицание Определитель матрицы. Найдите в чем ошибка

Надо написать программу в паскале для поиска определителя матрицы по такому алгоритму:
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 вне форума Ответить с цитированием
Старый 25.04.2011, 10:25   #2
RUSt88
Участник клуба
 
Регистрация: 29.12.2009
Сообщений: 1,166
По умолчанию

держи нямку

Код:
const
  countParam = 10;

type
  TRow = array[0..countParam] of Double;
  TMatrix = array[0..countParam] of TRow;

function det(A: TMatrix; const R: Integer): Double;
var
  temp: Double;
  N, h, v, i, j, k: Integer;
begin

  h := 1;
  N := R - 1;
  v := N;

  for i := 0 to R do begin
    if (A[i, i] = 0) then begin
      for j := 0 to R do begin
        temp := A[i + 1, j];
        A[i + 1, j] := A[i, j];
        A[i, j] := temp;
      end;
    end;
  end;

  for i := 0 to N do begin
    for j := 0 to v do begin
      temp := A[j + h, i] / A[i, i];
      for k := 0 to R do begin
        A[j + h, k] := A[j + h, k] - A[i, k] * temp;
      end;
    end;
    Inc(h);
    Dec(v)
  end;

  temp := A[0, 0];
  for i := 1 to R do
    temp := temp * A[i, i];

  Result := temp;
end;
прогер C\C++\C#\Delphi
ася: [семь 3]-[97]-[1 шесть]
RUSt88 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определитель матрицы на PHP DenisShash Помощь студентам 1 11.01.2011 08:30
Определитель Матрицы(реккурсия С) XSerGx Общие вопросы C/C++ 1 08.01.2011 19:29
Определитель матрицы 2 на 2 С++ Mashul'ka Помощь студентам 1 03.11.2010 00:08
не получается сортировка матрицы в чем ошибка? Darki Паскаль, Turbo Pascal, PascalABC.NET 5 23.06.2010 00:26
Определитель матрицы Snake_ua Помощь студентам 7 10.02.2010 10:44