Здравствуйте!
В ходе работы над моей программой, у меня возникло много проблем с динамическими массивами. Дело в том, что я хочу задать рекуррентную функцию для нахождения определителя матрицы любого размера по правилу Лапласа.
В принципе с самим алгоритмом мне все ясно, если заменить динамические массивы на статические, то всё нормально работает. Однако я совсем не понимаю как это сделать через динамические массивы.
Подскажите, что не так в моём коде. =D
Код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | program LaplasRule;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
arr: array of array of real ;
det: integer ;
function lap(arr: array of array of real ): real ;
var
i,j,l,s: integer ;
brr: array of array of real ;
begin
s:=high(arr);
if s<> 0 then
begin
setlength(brr,s,s);
for l:= 0 to s do
begin
for j:= 0 to dec(l) do
for i:= 1 to s do
brr[i- 1 ,j]:=arr[i,j];
for j:=inc(l) to s do
for i:= 1 to s
brr[i- 1 ,j- 1 ]:=arr[i,j];
lap:=arr[ 1 ,l]*lap(brr)*intpower(- 1 ,l+ 1 )+lap
end
end
else
lap:=arr[ 1 , 1 ]
end ;
begin
setlength(arr, 4 , 4 );
arr[ 0 , 0 ]:= 3 ;
arr[ 0 , 1 ]:= 3 ;
arr[ 0 , 2 ]:= 4 ;
arr[ 0 , 3 ]:= 2 ;
arr[ 1 , 0 ]:= 1 ;
arr[ 1 , 1 ]:= 2 ;
arr[ 1 , 2 ]:= 2 ;
arr[ 1 , 3 ]:= 1 ;
arr[ 2 , 0 ]:= 1 ;
arr[ 2 , 1 ]:= 3 ;
arr[ 2 , 2 ]:= 4 ;
arr[ 2 , 3 ]:= 1 ;
arr[ 3 , 0 ]:= 0 ;
arr[ 3 , 1 ]:= 1 ;
arr[ 3 , 2 ]:= 1 ;
arr[ 3 , 3 ]:= 1 ;
det:=lap(arr);
writeln (det)
end .
|
Заранее спасибо,
Noqrax.