Консультация № 139986
14.07.2008, 21:24
0.00 руб.
0 4 2
Здравствуйте, помогите решить задачу: провести операцию транспонирования прямоугольной матрицы A(m,n) не прибегая к использованию дополнительного вектора для хранения результата (Turbo Pascal)

Обсуждение

Неизвестный
15.07.2008, 12:48
общий
это ответ
Здравствуйте, Войнова Вера Леонидовна!
А что тут сложного? В приложении пример, в котором вообще не использовано никаких дополнительных переменных. Для этого используется операция XOR.
Как работает, лучше всего разобраться "вручную". Знаете, что такое XOR? Если не очень, напишите - объясню

Приложение:
CONST N = 10;TYPE TMatr = array[1..N, 1..N] of integer;procedure Show(M: TMatr);var i, j: Integer;begin for i:=1 to N do begin for j:=1 to N do Write(m[i,j]:5); WriteLn end;end;VAR A: TMatr; i,j: Integer;BEGIN WriteLn; for i:=1 to N do for j:=1 to N do A[i,j] := Random(200)-100; Show(A); for i:=1 to N do for j:=1 to N do if j > i then begin A[i,j] := A[i,j] xor A[j,i]; A[j,i] := A[j,i] xor A[i,j]; A[i,j] := A[i,j] xor A[j,i] end; WriteLn; Show(A);END.
давно
Старший Модератор
31795
6196
15.07.2008, 13:05
общий
это ответ
Здравствуйте, Войнова Вера Леонидовна!

Программа в приложении.
Размеры матрицы задаются пользователем.
ps:вопросы по программе задавайте в мини-форум.
Удачи!

Приложение:
const z=10;var a:array[1..z,1..z]of integer; i,j,n,m:integer; {процедура транспонирования матрицы}procedure TrMatrix(x,y:integer); var i,j,b:integer; begin {транспонирование матрицы в цикле} for i:=1 to x do for j:=i to y do begin b:=a[i,j]; a[i,j]:=a[j,i]; a[j,i]:=b; end; end;begin {вводим размер массива} repeat write(‘Enter N:‘); readln(n) until (n>0)and(n<=z); {вводим размер массива} repeat write(‘Enter M:‘); readln(m); until (m>0)and(m<=z); randomize; {в цикле случайным образом созжаем матрицу} for i:=1 to n do begin for j:=1 to m do begin a[i,j]:=random(100); write(a[i,j]:4); end; writeln; end; {вызов процедуры транспонирования матрицы} if n>m then TrMatrix(m,n) else TrMatrix(n,m); writeln; {вывод результата работы} for i:=1 to m do begin for j:=1 to n do write(a[i,j]:4); writeln; end;end.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Старший Модератор
31795
6196
15.07.2008, 13:08
общий
<b> Boriss :</b>Матрица должна быть прямоугольной.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Неизвестный
15.07.2008, 17:15
общий
Да, извините, невнимателен был.
Форма ответа