Транспонировать матрицу A=(d(ij))^m*m, где m<=10. Проверить является ли она симметричной, если да, то переменной Q присвоить 1, в противном случае - 0.
||0,5 1 2|| A= ||1 3,2 1|| ||2 1 0,5||
Квадратная матрица называется симметричной матрицей, если ее элементы, симметричные относительно главной диагонали, равны между собой, т.е. aij = aji для всех i, j. Матрица является симметричной, если она совпадает со своей транспонированной матрицей (т.е. A = A'). Другими словами, нижний треугольник квадратной матрицы является "зеркальным отражением" верхнего треугольника.
Function matrixTranspose(a: TMatrix): PTMatrix; Функция возвращает указатель на созданную в динамической памяти матрицу, являющуюся транспонированной матрицей A, т.е. строки исходной матрицы становятся столбцами и наоборот (или nil при невозможности выделения памяти)
Цитата
Матрица является симметричной, если она совпадает со своей транспонированной матрицей (т.е. A = A').
Цитата
Квадратная матрица называется симметричной матрицей, если ее элементы, симметричные относительно главной диагонали, равны между собой, т.е. aij = aji для всех i, j.
Function IsMatrixSimmetric (A : TMatrix) : boolean; var i,j :integer; begin IsMatrixSimmetric:=True; for i:=1 to M do for i:=1 to M do if a[i,j] <> a[j,i] then begin IsMatrixSimmetric:=False; Break; end; end;
lacomca
28.03.2006 14:43
Спасибо за изящное решение. Но я только на первом курсе и это решение выше уровня моих знаний. Будьте добры, если у вас есть возможность, написать мне более упрощенный вариант (с переменной строк и столбцов матрицы).
Ozzя
28.03.2006 14:50
Цитата(lacomca @ 28.03.2006 10:43)
Спасибо за изящное решение. Но я только на первом курсе и это решение выше уровня моих знаний. Будьте добры, если у вас есть возможность, написать мне более упрощенный вариант (с переменной строк и столбцов матрицы).
Procedure matrixTranspose(var a: TMatrix); Var i, j: Integer; p: TMatrix; Begin { транспонируем во вспомогательную матрицу } For i := 1 To m Do For j := 1 To m Do p[j,i] := a[i,j];
{ переписываем в исходную во матрицу }
For i := 1 To m Do For j := 1 To m Do a [i,j] := p[i,j];
End;
Тип type TMatrix = array [1..m,1..m] of real;
мисс_граффити
28.03.2006 20:31
Зачем нам целая вспомогательная матрица?
procedure transp(var A2:TMatrix); var i,j:byte; vsp:integer; begin for i:=0 to m-1 do {нумерация в массиве с 0} for j:=0 to i do begin vsp:=A2[i,j]; A2[i,j]:=A2[j,i]; A2[j,i]:=vsp; end; end;
lacomca
1.04.2006 20:14
составить програму под эту задачу через процедуры. Транспонировать три матрицы матрицу A=(a(ij))^m1*m1, B=(b(ij))^m2*m2,C=(c(ij))^m3*m3,где m<=10. Проверить является ли она симметричной, если да, то переменной Q присвоить 1, в противном случае - 0.
начитая с процедуры trans у меня ничего не получаеться:
program pr1; type matr=array [1..10,1..10] of real; var a,b,c,at,bt,ct:matr; i,j,m1,m2,m3,q:integer;
procedure vvod (var m:integer; z:matr); var i,j:integer; begin writeln('vvod razmernosti matrici'); read(m); writeln('vvesti matricu'); for i:=1 to m do for j:=1 to m do read(z[i,j]); end;
procedure trans (z,y:matr; m:integer); var i,j:integer; begin for i:=1 to m do for j:=1 to m do y[i,j]:=z[j,i]; end;
procedure simmetria (z,y:matr; m:integer; var q:integer); var i,j:integer; begin q:=1 for i:=1 to m do for j:=1 to m do if i<>j then if z[i,j]<>y[i,j] then q:=0; end;
procedure pechat (y:matr; m:integer; q:integer); var i,j:integer; begin writeln('transponirovanaya matrica'); for i:=1 to m do begin for j:=1 to m do write(y[i,j]:6:2); writeln; end; begin for i:=1 to m do begin for j:=1 to m do writeln('q=',q); end; end;
спасибо большое. я просто еще ни разу не записывала через функцию, мы это только прошли. а что надо поменять в самом описании(там где про симметрию)?
volvo
1.04.2006 20:41
function simmetria (z,y:matr; m:integer): integer; var i,j:integer; begin simmetria := 1; for i:=1 to m do for j:=1 to m do if i<>j then if z[i,j]<>y[i,j] then simmetria := 0; end;
lacomca
1.04.2006 20:48
с функцией все получилось, спасибо. но, видимо, сам алгоритм не верен, так как все матрицы, которые я задаю, при транспонировании получаются нулевыми.
volvo
1.04.2006 20:55
Ты сделала то, что я сказал в посте №7 с процедурами Trans и Vvod ? У меня все нормально отрабатывает...
lacomca
1.04.2006 21:00
спасибо большое все заработало.не увидела про ввод.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.