![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
напомните синтаксис измерения размеров массива
>|< © (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]Ну вообще любой массив вырождается в дерево, а у дерева нельзя выбрать фиксированную глубину, разве что по узловому элементу.
>|< (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
>|< (2012-05-31 17:18:00) [14]такой вариант подойдет?
for i := 0 to High(arr) do
for j := 0 to High(arr[i]) do