Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
Внизнапомните синтаксис измерения размеров массива Найти похожие ветки
← →
>|< (2012-05-31 17:13) [0]Есть двумерный массив
var arr:array of array of integer;
как узнать его ширину и высоту?
Заранее благодарен за ответ.
← →
>|< (2012-05-31 17:18) [1]такой вариант подойдет?
for i := 0 to High(arr) do
for j := 0 to High(arr[i]) do
← →
MBo © (2012-05-31 17:21) [2]ещё Length
← →
AV © (2012-05-31 17:24) [3]i := High(arr);
j := High(arr[i]);
ShowMessageFmt("%d %d",[i,j]);
но
SetLength(arr, 5);
SetLength(arr[0], 3);
SetLength(arr[2], 2);
и чему равно ширину и высоту? :)
← →
>|< (2012-05-31 17:28) [4]тогда прошу уточнить:
если SetLength(arr, i,j)
то i = Length(arr) и j = Length(arr[i]) ?
или j=Length(arr) и i = Length(arr(j)] ?
← →
Rouse_ © (2012-05-31 19:21) [5]Ну вообще любой массив вырождается в дерево, а у дерева нельзя выбрать фиксированную глубину, разве что по узловому элементу.
← →
Jeer © (2012-05-31 22:06) [6]Для квадратного или прямоугольного массива все тривиально.
← →
Ega23 © (2012-06-01 00:17) [7]
> как узнать его ширину и высоту?
В случае array of array of T - только "ширину" можно однозначно узнать, "высота" может быть различной.
← →
Германн © (2012-06-01 01:52) [8]
> >|< (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]
← →
Германн © (2012-06-01 03:10) [9]Ах, да. Про SetLength не сказал.
"Дайте мне три пачки по пять штук". :)
← →
Anatoly Podgoretsky © (2012-06-01 06:46) [10]> Германн (01.06.2012 03:10:09) [9]
Первая размером в 5, вторая два, ...
← →
han_malign (2012-06-01 09:34) [11]
> В случае array of array of T - только "ширину" можно однозначно узнать, "высота" может быть различной.
- наоборот, матрицы адресуются [строка, столбец] - как по математическому определению, так и - трактовка "массив массивов" семантически более верна и интуитивно понятна.
(X,Y) - декартовых(экранных) - это уже совсем другой частный случай...
> если правильно расставить индексы в arr[х,y] :)
- поэтому рекомендуется использовать в качестве индексов не X,Y,Z, а I,J,K, если лень давать осмысленные предметные имена.
З.З.Ы. Вы меня блин даже чего то засомневали... пришлось на всякий случай проверочный код накидать...
← →
>|< (2012-06-01 11:02) [12]
> З.З.Ы. Вы меня блин даже чего то засомневали... пришлось
> на всякий случай проверочный код накидать...
кстати да, на прямой вопрос:
>|< (31.05.12 17:28) [4]
никто так и не ответил.
Сейчас сам проверю в среде...
← →
>|< (2012-06-01 11:11) [13]код для проверки:
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.
← →
Jeer © (2012-06-01 14:23) [14]Запомнить не так и сложно если адресоваться к двумерным ar[row][col]
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.149 c