Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.074 c
15-1350643594
Grimm375
2012-10-19 14:46
2013.03.22
Информировать, какие символы разрешено вводить


15-1342284725
ПЛОВ
2012-07-14 20:52
2013.03.22
Некорректная работа StringReplace, или я туплю?


15-1344639808
Jonis_84
2012-08-11 03:03
2013.03.22
почему если убираешь строки про реестр nod32 ругается


15-1339791776
OPOPO
2012-06-16 00:22
2013.03.22
Как отключить Alt+Tab В XP?


15-1342899092
без имени
2012-07-21 23:31
2013.03.22
Настройка в Delphi 7





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский