![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Подмогните студенту! Рекурсия. [D5, WinXP]
MGWarlock © (2005-03-10 15:14:00)Недавно столкнулся с такой вещью, как рекурсия. Решил написать программу нахождения определителя матрицы. Написал. Но вот работает эта программа как-то странно. Определитель вечно равен нулю. Ошибку в своем коде я найти не смог. Подскажите правильный алгоритм, или хотя бы ткните пальцем в то место, где я облажался.
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;
MGWarlock (2005-03-10 16:10:00) [1]Огромное спасибо. Исправлюсь.
Fay (2005-03-10 15:28:00) [2]См. [1]
GuAV (2005-03-10 15:28:00) [3]Похоже, в GetMinor всё неправильно. И где умножение минора на элемент и знак ?
Кстати, IMHO лучше не сдвигать столбцы, а создать параметр рекурентной фции ExcludeColumns типа set of
1..100; (я так решал, ещё на паскале :) )
Чтобы найти и выявить ошибки, кроме F9, нужно исспользовать ещё F5, F7, F8