Главная страница
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.027 c
1-1110979999
Alex_C
2005-03-16 16:33
2005.03.27
Не могу создать в RealTime TRxGIFAnimator


14-1110441448
ex080D:07BBh
2005-03-10 10:57
2005.03.27
По поводу того какие компутеры будут через 10 лет ))


6-1106588652
c-forever
2005-01-24 20:44
2005.03.27
НЕ ставиться таймаут на recvfrom!


1-1110902849
Руслана
2005-03-15 19:07
2005.03.27
Как узнать какой текущий сепаратор для даты


4-1108544259
dp200
2005-02-16 11:57
2005.03.27
визуальные эффеты