![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Транспонирование матрицы не заводя новой матрицы
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