Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.03.27;
Скачать: CL | DM;

Вниз

Подмогните студенту! Рекурсия.   Найти похожие ветки 

 
MGWarlock ©   (2005-03-10 15:14) [0]

Недавно столкнулся с такой вещью, как рекурсия. Решил написать программу нахождения определителя матрицы. Написал. Но вот работает эта программа как-то странно. Определитель вечно равен нулю. Ошибку в своем коде я найти не смог. Подскажите правильный алгоритм, или хотя бы ткните пальцем в то место, где я облажался.



TMatrix= array [1..100,1..100] of integer;
...

{Находение Минора матрицы NxN по первой строке и столбцу "Stolb"}

Function GetMinor(Var B: TMatrix; N, Stolb: integer): TMatrix;
VAR i,j,row,col: integer;
   Buf: TMatrix;
Begin
 col:=1;
 For j:=1 to N do
 Begin
   If j<>Stolb then
   Begin
     For i:= 2 to N do
     Begin
       Buf[i-1,col]:= B[i,j];
     End;
     col:=col+1;
   End;
 End;
Result:= Buf;
End;

{Нахождение определителя матрицы NxN}
Function Determinant(Var A: TMatrix; N: integer) : integer;
Var i: integer;
   Buf: TMatrix;
   Det: integer;
Begin
 Det:=0;
 If N=2 then det:= A[1,1]*A[2,2]-A[1,2]*A[2,1] else
 Begin
   For i:=1 to N do
   Begin
     Buf:= GetMinor(A,N,i);
     Det:= Det+ Determinant(Buf,N-1);
   End;
 End;
End;


 
Fay ©   (2005-03-10 15:28) [1]

См. [1]


 
GuAV ©   (2005-03-10 15:28) [2]

Похоже, в GetMinor всё неправильно. И где умножение минора на элемент и знак ?

Кстати, IMHO лучше не сдвигать столбцы, а создать параметр рекурентной фции ExcludeColumns типа set of
1..100; (я так решал, ещё на паскале :) )

Чтобы найти и выявить ошибки, кроме F9, нужно исспользовать ещё F5, F7, F8


 
MGWarlock ©   (2005-03-10 16:10) [3]

Огромное спасибо. Исправлюсь.



Страницы: 1 вся ветка

Текущий архив: 2005.03.27;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.039 c
3-1109840819
juice
2005-03-03 12:06
2005.03.27
DataSource


1-1110525335
seregka
2005-03-11 10:15
2005.03.27
Добавление информации в exe


14-1109942445
pasha_golub
2005-03-04 16:20
2005.03.27
Украина: Еще одно самоубийство


1-1110951712
ser35
2005-03-16 08:41
2005.03.27
Диапазон печати в QuickReport


1-1110618497
Checist [root]
2005-03-12 12:08
2005.03.27
Popup Menu