Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.07.09;
Скачать: CL | DM;

Вниз

Адресация элемента двумерного массива   Найти похожие ветки 

 
SkyRanger ©   (2006-06-20 09:36) [0]

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


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

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) [2]

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


 
SkyRanger ©   (2006-06-20 09:42) [3]

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

Есть матрица

1 2 3
4 5 6
7 8 9


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


1 2 3 4 5 6 7 8 9


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


 
SkyRanger ©   (2006-06-20 09:43) [4]

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


 
tButton ©   (2006-06-20 09:44) [5]

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


 
tButton ©   (2006-06-20 09:45) [6]


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

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


 
tButton ©   (2006-06-20 09:46) [7]

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


 
SkyRanger ©   (2006-06-20 09:49) [8]

Угу дошло...

Мда.

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



Страницы: 1 вся ветка

Текущий архив: 2006.07.09;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.061 c
15-1149843053
Kolan
2006-06-09 12:50
2006.07.09
Что такое программная оболочка?


2-1150877067
XTD
2006-06-21 12:04
2006.07.09
Управление приложениями с помощью DELPHI


6-1141210521
illmar_kelebrant
2006-03-01 13:55
2006.07.09
Почему UDP - services отказываются работать в DLL?


2-1150841634
!_SM_!
2006-06-21 02:13
2006.07.09
TChart


15-1149949840
tesseract
2006-06-10 18:30
2006.07.09
процессорные байки.