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

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

напомните синтаксис измерения размеров массива


>|< ©   (2012-05-31 17:13:00) 

Есть двумерный массив
var arr:array of array of integer;

как узнать его ширину и высоту?
Заранее благодарен за ответ.


Jeer   (2012-06-01 14:23:00) [1]

Запомнить не так и сложно если адресоваться к двумерным ar[row][col]


>|<   (2012-06-01 11:11:00) [2]

код для проверки:
program Project1;

{$APPTYPE CONSOLE}

uses
 SysUtils;

 var arr:array of array of integer;
begin
 try
   { TODO -oUser -cConsole Main : Insert code here }
   SetLength(arr, 5, 10);
   Writeln('Width ='+ IntToStr(Length(arr)));
   Writeln('Height ='+ IntToStr(Length(arr[0])));
   Readln;
 except
   on E:Exception do
     Writeln(E.Classname, ': ', E.Message);
 end;
end.


>|<   (2012-06-01 11:02:00) [3]


> З.З.Ы. Вы меня блин даже чего то засомневали... пришлось
> на всякий случай проверочный код накидать...

кстати да, на прямой вопрос:
>|<   (31.05.12 17:28) [4]
никто так и не ответил.

Сейчас сам проверю в среде...


han_malign   (2012-06-01 09:34:00) [4]


> В случае array of array of T - только "ширину" можно однозначно узнать, "высота" может быть различной.

- наоборот, матрицы адресуются [строка, столбец] - как по математическому определению, так и - трактовка "массив массивов" семантически более верна и интуитивно понятна.

(X,Y) - декартовых(экранных) - это уже совсем другой частный случай...
> если правильно расставить индексы в arr[х,y] :)
- поэтому рекомендуется использовать в качестве индексов не X,Y,Z, а I,J,K, если лень давать осмысленные предметные имена.

З.З.Ы. Вы меня блин даже чего то засомневали... пришлось на всякий случай проверочный код накидать...


Anatoly Podgoretsky   (2012-06-01 06:46:00) [5]

> Германн  (01.06.2012 03:10:09)  [9]

Первая размером в 5, вторая два, ...


Германн   (2012-06-01 03:10:00) [6]

Ах, да. Про SetLength не сказал.
"Дайте мне три пачки по пять штук". :)


Германн   (2012-06-01 01:52:00) [7]


> >|<   (31.05.12 17:18) [1]
>
> такой вариант подойдет?
> for i := 0 to High(arr) do
>    for j := 0 to High(arr[i]) do
>

Имхо, подойдёт если правильно расставить индексы в arr[х,y] :)
P.S.
Всегда, когда путался в индексации многомерных массивов вспоминал, что объявление статического двумерного массива можно задать двумя способами:

1. TArr = array[1..3,5..10] of Integer;
2. TArr = array[1..3][5..10] of Integer;

Хм. Та же мнемоника позволяет мне работать и с динамическими многомерными массивами.
И почему-то эта "мнемоника" всегда позволяла мне всегда вспомнить, что внешний цикл нужно делать:
for i:=1 to 3,
внутренний цикл нужно делать:
for j:=5 to 10,
А к элементу данного массива обращаться как к Arr[i,j]


Ega23   (2012-06-01 00:17:00) [8]


> как узнать его ширину и высоту?


В случае array of array of T - только "ширину" можно однозначно узнать, "высота" может быть различной.


Jeer   (2012-05-31 22:06:00) [9]

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


Rouse_   (2012-05-31 19:21:00) [10]

Ну вообще любой массив вырождается в дерево, а у дерева нельзя выбрать фиксированную глубину, разве что по узловому элементу.


&gt;|&lt;   (2012-05-31 17:28:00) [11]

тогда прошу уточнить:
если SetLength(arr, i,j)
то i = Length(arr) и j = Length(arr[i]) ?
или j=Length(arr) и i = Length(arr(j)] ?


AV   (2012-05-31 17:24:00) [12]

i := High(arr);
 j := High(arr[i]);
 ShowMessageFmt('%d %d',[i,j]);

но
 SetLength(arr, 5);
 SetLength(arr[0], 3);
 SetLength(arr[2], 2);
и чему равно ширину и высоту? :)


MBo   (2012-05-31 17:21:00) [13]

ещё Length


&gt;|&lt;   (2012-05-31 17:18:00) [14]

такой вариант подойдет?
for i := 0 to High(arr) do
   for j := 0 to High(arr[i]) do


Наверх

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