Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Цикл транспонирования прямоугольной матрицы.

Автор: Axeo 19.05.2007 1:33

Неважно как задается матрица. Главное использование массива.
Пожалуйста, подскажите сам цикл, че то никак врубиться не могу....
Если еще будет возможность прописать через процедуру, на седьмом небе окажусь!
Заранее спасибо!


Код
for i:=1 to n do
for j:=1 to n do matr2[i,j]:=matr1[j,i]

для прямоугольной такой вариант не катит...

Автор: volvo 19.05.2007 1:37

Описание массива, с которым это все будет производиться, можно увидеть? Как ты собрался транспонировать матрицу (2x3) в матрицу (3x2) в RunTime?

Автор: MAXXX 19.05.2007 1:40

А как ты собираешся транспонировать данные из матрицы размером(м*н) в (н*м) Другое дело, если у тебя обе матрицы размера макс(м*н), но значущие только м*н еементов 1-ой матрицы
Тогда твой код должен проходить
Вот примерная реализация

Код

Const maxn=100;
         maxm=100;
Var matr1,matr2:array[1..maxn,1..maxm] of Integer;
      n,m,i,j:Integer;
begin
{ввод н,м,таблицы}
For i:=1 to n do
For j:=1 nto m do
matr2[j,i]:=matr1[i,j];
{вывод в цикле
For i:=1 to m do
For j:=1 to n do
Write(a[i,j]}
end.

Автор: Axeo 19.05.2007 1:41

В общем, вопрос наверное уже не актуален...

Работает такой вариант:

Код
program laba8v1;
var a:array[1..19, 1..19] of real;
    b:array[1..19, 1..19] of real;
    c,n,m,i,j,s,k:integer;

Begin
writeln('stroki n,stolbci m:');
readln(n,m);
writeln('Matrix A:');
for i:=1 to n do
begin
for j:=1 to m do
begin
a[i,j]:=random(10);
write(a[i,j]:4:0);
end;
writeln;
end;
readln;
for j:=1 to m do
begin
for i:=1 to n do
begin
write(a[i,j]:4:0);
end;
writeln;
end;
writeln;
readln;
end.



Не знаю чего я тупил =/

Добавлено через 1 мин.
Цитата(MAXXX @ 18.05.2007 22:40) *

А как ты собираешся транспонировать данные из матрицы размером(м*н) в (н*м) Другое дело, если у тебя обе матрицы размера макс(м*н), но значущие только м*н еементов 1-ой матрицы
Тогда твой код должен проходить
Вот примерная реализация
Код

Const maxn=100;
         maxm=100;
Var matr1,matr2:array[1..maxn,1..maxm] of Integer;
      n,m,i,j:Integer;
begin
{ввод н,м,таблицы}
For i:=1 to n do
For j:=1 nto m do
matr2[j,i]:=matr1[i,j];
{вывод в цикле
For i:=1 to m do
For j:=1 to n do
Write(a[i,j]}
end.




Этот вариант обрезает значения если n не равно m. Вроде....хммм

Автор: мисс_граффити 19.05.2007 7:16

извините меня, конечно... но в математике операция транспонирования определена только для квадратных матриц. у прямоугольных и диагонали-то как таковой нет...

Автор: volvo 19.05.2007 7:32

Юля, ты чего? blink.gif
1 2 3
4 5 6
я не могу транспонировать (в математике) в
1 4
2 5
3 6
?

Автор: мисс_граффити 19.05.2007 15:22

Все. Больше после изучения философии в 4 утра не буду на форум писать... mega_chok.gif
Сорри.
Мне стыдно.