Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Транспонирование матрицы не заводя новой матрицы


Lip ©   (2007-12-09 00:08:00) 

Как траспонимаровать матрицу, если завести новый массив я знаю.

b[i, j] := a[j, i];

то есть просто меняем индексы.
Что делать в случае если нельзя завести новый массив?
Уже не знаю, сижу на листочке выписываю индексы, значения и не нахожу зависимости.
Подскажите, пожалуйста!
заранее благодарен!


korneley   (2007-12-11 13:58:00) [1]


> Vlad Oshin ©   (11.12.07 13:17) [19]
> как тип это всего
> лишь тип, он память не жрет
Извини, сходу не въехал :) Но все равно, как ни крутись, приходим к TUser ©   (11.12.07 00:38) [13]плюс @!!ex ©   (11.12.07 00:41) [14]


Vlad Oshin   (2007-12-11 13:17:00) [2]


> korneley ©   (11.12.07 12:59) [18]


> как тип

это всего лишь тип, он память не жрет

> oldman ©   (11.12.07 12:20) [17]

надо значит правильно модифицировать данные :)
читал, про человека, который все в мире мог описать 1 числом? :))


korneley   (2007-12-11 12:59:00) [3]


> wqeqweqweqw   (11.12.07 12:00) [16]
> ... второймассив объявим ...
Не монтируется с [0]


oldman   (2007-12-11 12:20:00) [4]


> wqeqweqweqw   (11.12.07 12:00) [16]


А кто сказал, что матрица численная?


wqeqweqweqw   (2007-12-11 12:00:00) [5]

и дополнительной не надо
a=a+b
b=a-b
a=a-b

второй массив объявим как тип линейного массива = размером нашему
заведем указатель на него и будем работать с ним (должно, думаю сработать)


TUser   (2007-12-11 07:30:00) [6]

Зависит от спосба задания массива. Например, если объявлено

var A: array of array of ...

то можно как? Индексной арифметикой по [13] да. Но обращаться потом к элементам по двум индексам - как?


@!!ex   (2007-12-11 00:41:00) [7]

А через дополнительную переменную разве задача не решается?
Нафиг второй массив не нужен...


TUser   (2007-12-11 00:38:00) [8]

> Как для прямоугольной сделать, не заводя нового массива?

А как она представляется программеру - как линейный массив? Или объявлена, как двумерный? В последнем случае - никак.

А если ты обращаешься к элементам по эдинственному индексу, то

до
[i,j]=W*(i-1)+j

после
[j,i]=H*(j-1)+i

ну и надо поставить [i,j] на место [j,i] в циклах, а потом заменить W и H.

Обозначения интуитивно понятны.


Lip   (2007-12-11 00:30:00) [9]

Ну может кто подскажет?


Lip   (2007-12-10 17:34:00) [10]


> Матрица квадратная или прямоугольная?


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

for i := 1 to n do
 for j := 1 to n do
   b[i, j] := a[j, i];


Как для прямоугольной сделать, не заводя нового массива?


palva   (2007-12-09 23:15:00) [11]


> > palva ©   (09.12.07 12:59) [8]
> > Матрица квадратная или прямоугольная?
> круглая

Согласен с Sergey Masloff из
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1197218888&n=3
Не тот здесь контингент. Ну да какой контингент растили, такой и получили.


peregrooz   (2007-12-09 21:43:00) [12]


> palva ©   (09.12.07 12:59) [8]
> Матрица квадратная или прямоугольная?


круглая


palva   (2007-12-09 12:59:00) [13]

Матрица квадратная или прямоугольная?


TUser   (2007-12-09 01:41:00) [14]

Выкинь бумажку. Тебе надо пробежаться в цикле по всем парам значений ([i,j],[j,i]). Ничто не помешает этого сделать парочкой вложенных циклов типа for.


Германн   (2007-12-09 01:12:00) [15]


> Сдается мне, что у автора учебное задание, а не реальная
> задача.
>

"И я, и я, и я того же мнения!"
(с) Ослик ИА


Anatoly Podgoretsky   (2007-12-09 01:06:00) [16]

> homm  (09.12.2007 01:01:04)  [4]

А что и промежуточные переменные тоже 1 гб?
Сдается мне, что у автора учебное задание, а не реальная задача.


homm   (2007-12-09 01:01:00) [17]

> [3] Anatoly Podgoretsky ©   (09.12.07 00:59)
> Это почему же нельзя?

Как вариант — размер исходного массива 1Гб.


Anatoly Podgoretsky   (2007-12-09 00:59:00) [18]


> Что делать в случае если нельзя завести новый массив?

Это почему же нельзя?


Servelat   (2007-12-09 00:36:00) [19]

Вопрос сводится к тому, как заставить две переменные поменяться значениями без использования третьей, а эта задача решается уж совсем просто (=.


Zeqfreed   (2007-12-09 00:34:00) [20]

http://en.wikipedia.org/wiki/In-place_matrix_transposition


Наверх

Титульная страница Поиск, карта сайта Написать письмо