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

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

High, Low и двумерный массив


p3.14 ©   (2007-04-18 19:37:00) 

Каким образом получить размерность двумерного массива?

например массив есть 3x4:

temp: array of array of Double;
SetLength(temp, 3, 4);


и как получить при помощи High и Low его его размерность? Или для двумерного существует иная форма High и Low?


Юрий Зотов   (2007-04-19 11:10:00) [1]

> p3.14   (18.04.07 19:37)  
> Каким образом получить размерность двумерного массива?

var
 Temp: array of array of Double;

Low(Temp) - нижняя граница "наружного" массива (всегда 0);
High(Temp) - верхняя граница "наружного" массива (на 1 меньше его длины);

Low(Temp[i]) - нижняя граница i-го "внутреннего" массива (всегда 0);
High(Temp[i]) - верхняя граница i-го "наружного" массива (на 1 меньше его длины);

Длины "внутренних" массивов могут, но не обязаны быть одинаковыми. Какую длину хотим - ту и ставим.


{RASkov}   (2007-04-18 23:41:00) [2]

ShowMessage(A[0, 0]);
я чего-то не понял, но строка — вроде тоже массив…

Попробуй, тоже самое что и ShowMessage(A[0, 0]);
A: String;
.....
A:='Kolan';
ShowMessage(A[0]);
и туже ошибку получишь...
Строки похожи на дин массивы но таковыми не являются...


{RASkov}   (2007-04-18 23:36:00) [3]

В третьих - посмотри что покажет Low(A)


{RASkov}   (2007-04-18 23:33:00) [4]

> [13] Kolan ©   (18.04.07 23:13)

Во первых массив А одномерный... во вторых в строках в нулевом байте хранится счетчик и длинна строки


Kolan   (2007-04-18 23:13:00) [5]

S: array of array of String — тут я погорячился, получилось 3 измерения.

procedure TForm3.BitBtn1Click(Sender: TObject);
var
 A: array of String;
begin
 SetLength(A, 10);
 A[0] := 'Kolan';
 ShowMessage(A[0]); //Kolan
 ShowMessage(A[0, 1]);  //K
 ShowMessage(A[0, 0]); //А это вообще не компилиться ([Pascal Error] Unit3.pas(34): E2157 Element 0 inaccessible — use 'Length' or 'SetLength') хотя может я чего-то не понял, но строка — вроде тоже массив…
end;


{RASkov}   (2007-04-18 22:58:00) [6]

> [11] Kolan ©   (18.04.07 22:50)

СМ [4]
:)
По барабану строки или байты...


Kolan   (2007-04-18 22:50:00) [7]

> Строки типа String все с 1 по умолчанию

не да, типа
S: array of array of String
Вроде не с 0.
Но тут я не уверен, а проверять лень…


{RASkov}   (2007-04-18 22:44:00) [8]

[4] {RASkov}
> У динамических массивов нижняя граница всегда 0

Следом

> [5] Kolan
> А у двумерных невсегда.

[6] {RASkov}
> Приведи пример двумерного динамического(имелось ввиду) массива


> [7] Kolan ©   (18.04.07 21:43)
> A: array[10??, 10??] of  Integer
> И не говори, что это не двумерный массив.

Двумерный но не динамический :)

> [9] Kolan ©   (18.04.07 21:46)

А это что? Строки типа String все с 1 по умолчанию... :)


Kolan   (2007-04-18 21:46:00) [9]

А еще есть строки, которые с 1 :)


Kolan   (2007-04-18 21:44:00) [10]

> [10??, 10??]

10 … 100, 10 … 100
что-то глюк с точками…


Kolan   (2007-04-18 21:43:00) [11]

> [6] {RASkov}   (18.04.07 20:25)

> Всегда. Приведи пример двумерного массива  c отличной от нуля нижней границей.

A: array[10𠟬, 10𠟬] of  Integer
И не говори, что это не двумерныймассив.


{RASkov}   (2007-04-18 20:25:00) [12]

> [5] Kolan ©   (18.04.07 20:08)
>А у двумерных невсегда.

Всегда. Приведи пример двумерного массива (Arr: array of array of Integer) c отличной от нуля нижней границей.


Kolan   (2007-04-18 20:08:00) [13]

> У динамических массивов нижняя граница всегда 0


> Каким образом получить размерность двумерного массива?

А у двумерных невсегда.


{RASkov}   (2007-04-18 20:06:00) [14]

У динамических массивов нижняя граница всегда 0


{RASkov}   (2007-04-18 20:05:00) [15]

Посмотри
http://www.delphimaster.ru/cgi-bin/forum.pl?n=18&id=1176840303


Kolan   (2007-04-18 19:48:00) [16]


> и как получить при помощи High и Low его его размерность?

Height := Length(temp);
if Length(temp) > 0 then
 Width := Length(temp[0])
else
 Width := 0;


Примерно так.


Kolan   (2007-04-18 19:48:00) [17]

> Или для двумерного существует иная форма High и Low?

Ну с Low/High тоже самое + 1


Наверх

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