![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Здравствуйте!
В ходе работы над моей программой, у меня возникло много проблем с динамическими массивами. Дело в том, что я хочу задать рекуррентную функцию для нахождения определителя матрицы любого размера по правилу Лапласа. В принципе с самим алгоритмом мне все ясно, если заменить динамические массивы на статические, то всё нормально работает. Однако я совсем не понимаю как это сделать через динамические массивы. Подскажите, что не так в моём коде. =D Код:
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; {i-строка; j-столбец; l-столбец, по которуму расскладываем; s-размер исходной матрицы} 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] {для случая когда матрица 1x1 :3} 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; {определитель исходной матрицы равен 1} det:=lap(arr); writeln(det) {вывод определителя} end. Заранее спасибо, Noqrax. |