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

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

Адресация элемента двумерного массива [D6, XP]


SkyRanger ©   (2006-06-20 09:36:00) 

Есть одномерный массив. Фактически это развернутыйв одну строку квадратный двумерный массив. Т.е. к элементу этого массива нужно обратится зная координаты [x,y]
Как получить непрерывный адрес в одномерном массиве. Что то меня клинит на этой элементарной операции...


SkyRanger   (2006-06-20 09:49:00) [1]

Угу дошло...

Мда.

Клинит, как клинит...
е унять эту злую клинь... :)


tButton   (2006-06-20 09:46:00) [2]

но это опять же если у тебя индексы идут [1..width*height]


tButton   (2006-06-20 09:45:00) [3]


> n = (y-1) * 3 + (x - 1) +1

n = (y-1) * width+ (x - 1) +1


tButton   (2006-06-20 09:44:00) [4]

width = 3
x = 2
y = 2
n = (y-1) * 3 + (x - 1) +1
(5 = (2-1) * 3 + 1 + 1)


SkyRanger   (2006-06-20 09:43:00) [5]

ОГО!
Как быстро ответили! СПАСИБО :)


Сергей М.   (2006-06-20 09:42:00) [6]

const
cols = 4;
rows = 4;

type

PLinearArray = ^TLinearArray;
TLinearArray = array[0..cols*rows-1]   of sometype;
PSquareArray = ^TSquareArray;
TSquareArray = array[0..cols-1, 0..rows-1]   of sometype;

..

var
 arr: TLinearArray;

..

PSquareArray(@arr)[x,y] := somevalue;


tButton   (2006-06-20 09:42:00) [7]

n = y*width+x (-1 если индексация с нуля)
или
n = x*height+y (-1)
зависит от того как развёрнут массив
если построчно - первый вариант
если поколонно - второй


SkyRanger   (2006-06-20 09:42:00) [8]

Чтобы не было вопросов:

Есть матрица

1 2 3
4 5 6
7 8 9


На самом деле она реально хранится так:


1 2 3 4 5 6 7 8 9


Как мне получить например адрес элемента 5, зная его координаты - [2,2] ???


Наверх

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