IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Транспонировать матрицу
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 7
Пол: Женский
Реальное имя: Ольга

Репутация: -  0  +


Транспонировать матрицу 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'). Другими словами, нижний треугольник квадратной матрицы является "зеркальным отражением" верхнего треугольника.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гуру
*****

Группа: Пользователи
Сообщений: 1 220
Пол: Мужской

Репутация: -  16  +


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;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3





Группа: Пользователи
Сообщений: 7
Пол: Женский
Реальное имя: Ольга

Репутация: -  0  +


Спасибо за изящное решение.
Но я только на первом курсе и это решение выше уровня моих знаний. Будьте добры, если у вас есть возможность, написать мне более упрощенный вариант (с переменной строк и столбцов матрицы).
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гуру
*****

Группа: Пользователи
Сообщений: 1 220
Пол: Мужской

Репутация: -  16  +


Цитата(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;


Сообщение отредактировано: volvo -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


Зачем нам целая вспомогательная матрица?

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;


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6





Группа: Пользователи
Сообщений: 7
Пол: Женский
Реальное имя: Ольга

Репутация: -  0  +


составить програму под эту задачу через процедуры. Транспонировать три матрицы матрицу 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.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 лучше бы определить как функцию, тут функция по смыслу больше подходит...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8





Группа: Пользователи
Сообщений: 7
Пол: Женский
Реальное имя: Ольга

Репутация: -  0  +


если я опишу simmetria через функцию там надо будет много чего менять????
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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));


По-моему, так удобнее...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10





Группа: Пользователи
Сообщений: 7
Пол: Женский
Реальное имя: Ольга

Репутация: -  0  +


спасибо большое. я просто еще ни разу не записывала через функцию, мы это только прошли. а что надо поменять в самом описании(там где про симметрию)?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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;
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12





Группа: Пользователи
Сообщений: 7
Пол: Женский
Реальное имя: Ольга

Репутация: -  0  +


с функцией все получилось, спасибо. но, видимо, сам алгоритм не верен, так как все матрицы, которые я задаю, при транспонировании получаются нулевыми. mad.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Гость






Ты сделала то, что я сказал в посте №7 с процедурами Trans и Vvod ? У меня все нормально отрабатывает...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14





Группа: Пользователи
Сообщений: 7
Пол: Женский
Реальное имя: Ольга

Репутация: -  0  +


good.gif спасибо большое все заработало.не увидела про ввод.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 




- Текстовая версия 24.10.2017 9:02
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"