Форум: "Основная";
Текущий архив: 2005.03.27;
Скачать: [xml.tar.bz2];
ВнизПодмогните студенту! Рекурсия. Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.045 c