![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
lacomca |
![]()
Сообщение
#1
|
Группа: Пользователи Сообщений: 7 Пол: Женский Реальное имя: Ольга Репутация: ![]() ![]() ![]() |
Транспонировать матрицу 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'). Другими словами, нижний треугольник квадратной матрицы является "зеркальным отражением" верхнего треугольника. |
Ozzя |
![]()
Сообщение
#2
|
![]() Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 220 Пол: Мужской Репутация: ![]() ![]() ![]() |
http://forum.pascal.net.ru/index.php?s=&sh...indpost&p=28387
Цитата 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 |
![]()
Сообщение
#3
|
Группа: Пользователи Сообщений: 7 Пол: Женский Реальное имя: Ольга Репутация: ![]() ![]() ![]() |
Спасибо за изящное решение.
Но я только на первом курсе и это решение выше уровня моих знаний. Будьте добры, если у вас есть возможность, написать мне более упрощенный вариант (с переменной строк и столбцов матрицы). |
Ozzя |
![]()
Сообщение
#4
|
![]() Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 220 Пол: Мужской Репутация: ![]() ![]() ![]() |
Спасибо за изящное решение. Но я только на первом курсе и это решение выше уровня моих знаний. Будьте добры, если у вас есть возможность, написать мне более упрощенный вариант (с переменной строк и столбцов матрицы). 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;
Сообщение отредактировано: volvo - |
мисс_граффити |
![]()
Сообщение
#5
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
Зачем нам целая вспомогательная матрица?
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 |
![]()
Сообщение
#6
|
Группа: Пользователи Сообщений: 7 Пол: Женский Реальное имя: Ольга Репутация: ![]() ![]() ![]() |
составить програму под эту задачу через процедуры. Транспонировать три матрицы матрицу 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;
begin
vvod(m1,a);
vvod(m2,b);
vvod(m3,c);
trans(a,at,m1);
trans(b,bt,m2);
trans(c,ct,m3);
simmetria(a,at,m1,q);
simmetria(b,bt,m2,q);
simmetria(c,ct,m3,q);
pechat(at,m1,q);
pechat(bt,m2,q);
pechat(ct,m3,q);
end.
|
volvo |
![]()
Сообщение
#7
|
Гость ![]() |
Цитата начитая с процедуры trans у меня ничего не получаеться: Просто у тебя изменения в матрицах НЕ передаются в вызывающую программу. Чтобы это происходило, надо описать Trans вот так:procedure trans (VAR 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;
И vvod не забудь поменять тоже: procedure vvod (var m:integer; VAR z:matr);
...
Кстати, simmetria лучше бы определить как функцию, тут функция по смыслу больше подходит... |
lacomca |
![]()
Сообщение
#8
|
Группа: Пользователи Сообщений: 7 Пол: Женский Реальное имя: Ольга Репутация: ![]() ![]() ![]() |
если я опишу simmetria через функцию там надо будет много чего менять????
|
volvo |
![]()
Сообщение
#9
|
Гость ![]() |
Вместо
simmetria(a,at,m1,q);
simmetria(b,bt,m2,q);
simmetria(c,ct,m3,q);
pechat(at,m1,q);
pechat(bt,m2,q);
pechat(ct,m3,q);
будешь делать:pechat(at,m1,simmetria(a,at,m1));
pechat(bt,m2,simmetria(b,bt,m2));
pechat(ct,m3,simmetria(c,ct,m3));
По-моему, так удобнее... |
lacomca |
![]()
Сообщение
#10
|
Группа: Пользователи Сообщений: 7 Пол: Женский Реальное имя: Ольга Репутация: ![]() ![]() ![]() |
спасибо большое. я просто еще ни разу не записывала через функцию, мы это только прошли. а что надо поменять в самом описании(там где про симметрию)?
|
volvo |
![]()
Сообщение
#11
|
Гость ![]() |
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 |
![]()
Сообщение
#12
|
Группа: Пользователи Сообщений: 7 Пол: Женский Реальное имя: Ольга Репутация: ![]() ![]() ![]() |
с функцией все получилось, спасибо. но, видимо, сам алгоритм не верен, так как все матрицы, которые я задаю, при транспонировании получаются нулевыми.
![]() |
volvo |
![]()
Сообщение
#13
|
Гость ![]() |
Ты сделала то, что я сказал в посте №7 с процедурами Trans и Vvod ? У меня все нормально отрабатывает...
|
lacomca |
![]()
Сообщение
#14
|
Группа: Пользователи Сообщений: 7 Пол: Женский Реальное имя: Ольга Репутация: ![]() ![]() ![]() |
![]() |
![]() ![]() |
![]() |
Текстовая версия | 22.04.2025 12:02 |