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

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

Работа с 3-х мерными массивами! [D7, WinXP]


grol ©   (2005-06-05 04:33:00) 

Уважаемые мастера!!! Ответьте мне пожалуйста на такой "ламерский" вопрос: как создавать дмнамические 3-х мерные массивы? От сюда же следует, как в них записывать значения и соответствено, как обращаться к определенным элемента такого массива? И хотелось, желательно, чтоб, на примере использовалось Setlength! Спасибо заранее.
P.S.: Ламер он и в Африке ламер (это я про себя)! :-)))


begin...end   (2005-06-06 14:47:00) [1]

> Anatoly Podgoretsky ©   (06.06.05 14:17) [13]

> А я последний раз проверял в Д3.

Что проверяли-то? Динамическиемассивы, в Д 3? LOL.


Anatoly Podgoretsky   (2005-06-06 14:17:00) [2]

Alexey2005   (06.06.05 14:08) [12]
А я последний раз проверял в Д3.
Да и не важно с какой версии синтаксис расширили, важно, что работает в Д7, другой версии автором не указано.


Alexey2005   (2005-06-06 14:08:00) [3]

Anatoly Podgoretsky ©   (05.06.05 11:15) [7]
Только двухмерных, на трехмерные ругалась за синтаксис.

- а не надоело ответы лепить не зная дела - все проходит без проблем и с тремя параметрами в D5

var a:array of array of array of integer;
....
setlength(a,2,2,2);
все работает.


Abessalom   (2005-06-05 15:47:00) [4]


> !Trinix ©   (05.06.05 14:03) [9]+[10]

Про запятые что-ли?


!Trinix   (2005-06-05 14:16:00) [5]

Сори
mas : array of array of array of integer
И работай, как с обычным масивом
i[x,y,z]


!Trinix   (2005-06-05 14:03:00) [6]

А че-это вы пишите?
mas : array array array of integer


begin...end   (2005-06-05 11:24:00) [7]

> Abessalom   (05.06.05 11:14) [6]

Для двумерных -- помню, работало. Для бОльших размерностей -- не помню.


Anatoly Podgoretsky   (2005-06-05 11:15:00) [8]

begin...end ©   (05.06.05 11:12) [5]
Только двухмерных, на трехмерные ругалась за синтаксис.


Abessalom   (2005-06-05 11:14:00) [9]


> begin...end ©   (05.06.05 11:12) [5]

А была? ;) Я всегда думал что так она и есть, а вот..)


Abessalom   (2005-06-05 11:12:00) [10]


> Anatoly Podgoretsky ©   (05.06.05 11:06) [3]


Да:)


begin...end   (2005-06-05 11:12:00) [11]

> Anatoly Podgoretsky ©   (05.06.05 11:06) [3]

А что, в D5 такой формы ещё не было?


Anatoly Podgoretsky   (2005-06-05 11:06:00) [12]

Abessalom   (05.06.05 05:22) [2]
А что в Д7 сделали такую форму SetLength c тремя размерностями?


Abessalom   (2005-06-05 05:22:00) [13]

var
 XYZ: array of array of array of Integer;
 X, Y, Z: Integer;
begin
 SetLength(XYZ, 3, 3, 3);
 for X := 0 to High(XYZ) do
 begin

   for Y := 0 to High(XYZ[X]) do
   begin

     for Z := 0 to High(XYZ[X][Y]) do
     begin
       XYZ[X][Y][Z] := X * Y * Z;
       DoSomeThing(XYZ[X][Y][Z]);
     end;

   end;
 end;
end;

Надеюсь пример понятен.


Defunct   (2005-06-05 04:57:00) [14]

Причем тут ламер и ламерство?

Не сомневаюсь, задать одномерный массив вы умеете. И работать с ним тоже явных проблем у вас не вызывает.

Пример - пачка сигарет.

Type

 Пачка_сигарет = Array[1..20] of Сигарета;

теперь давайте сделаем двумерный массив - для представления блока сигарет. Блок сигарет уже состоит из пачек:

 Блок_сигарет = Array[1..10] of Пачка_сигарет

ну а блоки обычно транспортируются в ящиках (это как раз и будет трех мерный массив):

 Ящик_сигарет = Array[1..10] of Блок_сигарет

Ящики в свою очередь в контейнерах, контейнеры еще в чем-то и т.д. В общем мерность может быть любой.

Теперь как же работать со всем этим. Рассмотрим, на примере, допустим 15-ю сигарету "скурили", и положили обратно в пачку N1, блока N1.

Сигареты1 : Пачка_сигарет;
Сигареты2 : Блок_сигарет;
Cинареты3 : Ящик_сигарет;

Сигареты1[15] := 'Окурок';
Сигареты2[1][15] := 'Окурок'; //
Сигареты3[1][1][15] := 'окурок';

Надеюсь пример понятен.


Наверх

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