![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
setare |
![]()
Сообщение
#1
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 152 Пол: Женский Репутация: ![]() ![]() ![]() |
Здравствуйте!
Нам дали задачу на определение детерминанта матрицы с помощью рекурсии и сказали что часть этой задачи можно посмотреть в учебнике. Эта часть состояла в вычеркивании столбца и строки. И как раз эта часть доставила нам очень много хлопот для понимания. Короче мы ничего не поняли. Не могли бы вы мне объяснить как они написали эту часть проги. Большое спасибо! Код procedure GetMatr(a:matr; var b:matr; m,i,j:integer); { Вычеркивание из матрицы строки и столбца } var ki,kj,di,dj:integer; begin di:=0; for ki:=1 to m-1 do begin if (ki=i) then di:=1; dj:=0; for kj:=1 to m-1 do begin if (kj=j) then dj:=1; b[ki,kj]:=a[ki+di,kj+dj]; end; end; end; Что могут означать di dj и тд.? Код должен быть в тегах -------------------- Ты спрашиваешь, как я переношу длинные бессонные ночи?Как свеча: как только настает утро, я гасну, тем самым, имея возможность заново загореться.
Нима |
![]() ![]() |
setare |
![]()
Сообщение
#2
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 152 Пол: Женский Репутация: ![]() ![]() ![]() |
Спасибо за предоставленный код, но к самому большому сожалению, мы половину того что вы там написали не проходили, следовательно этот код является для нас ещё большим темным гремучим лесом.
Вся программа вообще выглядит так: Код const n=4; { размерность матрицы } type matr=array[1..n,1..n] of longint; var a,b:matr; i,j,dt:longint; procedure PrintMatr(m:matr;n:integer); { процедура вывода матрицы на экран } var i,j:integer; begin for i:=1 to n do begin for j:=1 to n do write(m[i,j]:3); writeln; end; end; procedure GetMatr(a:matr; var b:matr; m,i,j:integer); { Вычеркивание из матрицы строки и столбца } var ki,kj,di,dj:integer; begin di:=0; for ki:=1 to m-1 do begin if (ki=i) then di:=1; dj:=0; for kj:=1 to m-1 do begin if (kj=j) then dj:=1; b[ki,kj]:=a[ki+di,kj+dj]; end; end; end; Function Determinant(a:matr;n:integer):longint; { Вычисление определителя матрицы } var i,j,d,k:longint; b:matr; begin d:=0; k:=1; if (n<1) then begin writeln('Determinant: Cann''t run. N=',n); halt; end; if (n=1) then d:=a[1,1] else if (n=2) then d:=a[1,1]*a[2,2]-a[2,1]*a[1,2] else { n>2 } for i:=1 to n do begin GetMatr(a,b,n,i,1); {writeln('i=',i,' a[',i,',1]=',a[i,1]); PrintMatr(b,n-1);} d:=d+k*a[i,1]*Determinant(b,n-1); k:=-k; end; Determinant:=d; end; begin { Заполнение матрицы случайными числами } randomize; for i:=1 to n do for j:=1 to n do a[i,j]:=random(5); { Печать исходной матрицы } PrintMatr(a,n); { Вычисление и вывод определителя } dt:=Determinant(a,n); writeln('========='); writeln('Determinant=',dt); end. -------------------- Ты спрашиваешь, как я переношу длинные бессонные ночи?Как свеча: как только настает утро, я гасну, тем самым, имея возможность заново загореться.
Нима |
![]() ![]() |
![]() |
Текстовая версия | 20.07.2025 16:58 |