Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.08.2012, 09:25   #1
trafbite
Форумчанин
 
Регистрация: 21.07.2007
Сообщений: 103
По умолчанию Трехмерный динамический массив (задание размеров), как?

Всем привет.
Собственно сабж.

Нужен трехмерный дин. массив. При задании его размеров (по аналогии с двумерным):
PHP код:
SetLength(Massyxz
Я так понимаю:
x - высота массива;
y - ширина массива;
z - глубина массива.

Так вот вопрос. Если я задал размеры массива так:
PHP код:
SetLength(Mass1052
т.е.:
10 строк, 5 столбцов, 2 даже не знаю как обозвать (пусть будет плоскость), в глубину
А можно ли мне как-то задать количество строк в каждой плоскости разное?
trafbite вне форума Ответить с цитированием
Старый 06.08.2012, 09:32   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,527
По умолчанию

Код:
var mass: array of array of array of integer;
SetLength(mass, 10);
for j1:=0 to length(mass)-1 do begin
  setLength(mass[j1], j1+10);
  for j2:=0 to length(mass[j1])-1 do begin
    setlength(mass[j1][j2], j2+10);
  end;
end;
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 06.08.2012, 09:39   #3
trafbite
Форумчанин
 
Регистрация: 21.07.2007
Сообщений: 103
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
Код:
var mass: array of array of array of integer;
SetLength(mass, 10);
for j1:=0 to length(mass)-1 do begin
  setLength(mass[j1], j1+10);
  for j2:=0 to length(mass[j1])-1 do begin
    setlength(mass[j1][j2], j2+10);
  end;
end;
Спасибо за оперативность, но не совсем понятно все-таки.
1.
Код:
SetLength(mass, 10);
Это мы создали такой "кубик" 10х10, ок.
2.
Код:
setLength(mass[j1], j1+10);
Это мы задаем длину каждой строки, так?
3.
Код:
setlength(mass[j1][j2], j2+10);
Вот тут вопросец: здесь мы перебираем по строкам и каждому элементу строки задаем глубину?
trafbite вне форума Ответить с цитированием
Старый 06.08.2012, 10:32   #4
trafbite
Форумчанин
 
Регистрация: 21.07.2007
Сообщений: 103
По умолчанию

Для наглядности решил приложить картинку.
Вот смотрите, на картинке как бы 3 плоскости (стрелкой обозначил).
Вот каким образом не задать такие размерности (т.е. количество столбцов известно заранее - оно везде одинаковое, а вот количество плоскостей и строк в плоскостях заранее не известно - нужно задавать в ходе выполнения программы), как указаны в рисунке, возможно ли это сделать без циклов?

trafbite вне форума Ответить с цитированием
Старый 06.08.2012, 10:43   #5
astecenko
Homo Interneticus
Форумчанин
 
Аватар для astecenko
 
Регистрация: 04.03.2011
Сообщений: 611
По умолчанию

Элементы массива 1-го и 2-го уровней также являются массивами, для каждого массива(элемента) надо задать размерность, можете в цикле, можете не в цикле.

На картинке 2ух мерный массив из 2ух мерных массивов 2ух мерных массивов - 6-мерный массив получается

Возможно Вам удобнее и проще будет создать класс описывающий плоскость и работать с объектами.

Последний раз редактировалось astecenko; 06.08.2012 в 10:50.
astecenko вне форума Ответить с цитированием
Старый 06.08.2012, 11:11   #6
trafbite
Форумчанин
 
Регистрация: 21.07.2007
Сообщений: 103
По умолчанию

Цитата:
Сообщение от astecenko Посмотреть сообщение
Элементы массива 1-го и 2-го уровней также являются массивами, для каждого массива(элемента) надо задать размерность, можете в цикле, можете не в цикле.

На картинке 2ух мерный массив из 2ух мерных массивов 2ух мерных массивов - 6-мерный массив получается

Возможно Вам удобнее и проще будет создать класс описывающий плоскость и работать с объектами.
Хм, тогда я что-то запутался с определениями массивов. Может быть у Вас есть ссылочка на какую-нибудь литературу по многомерным дин. массивам - я весь гугл перерыл, ничего систематизированного не нашел?

С классами никогда не работал (не создавал) - с ходу не разберусь.

А проблему я свою вроде бы решил Сделал вот так:

Код:
 
  SetLength(Mass, 3, 6); //это я задал число строк и столбцов в массиве
  for x:=0 to High(Mass) do begin
    for y:=0 to (Length(Mass[x])-1) do begin
      setlength(Mass[x][y], 5);// число плоскостей
    end;
  end;
trafbite вне форума Ответить с цитированием
Старый 06.08.2012, 12:17   #7
astecenko
Homo Interneticus
Форумчанин
 
Аватар для astecenko
 
Регистрация: 04.03.2011
Сообщений: 611
По умолчанию

Может быть я не правильно понял суть Вашей идеи, но исходя из нарисованной Вами картинки:
элемент СиняяПлоскость[1,1] - является ЧернойПлоскостью
элемент ЧернаяПлоскость[1,1] - является КраснойПлоскостью
элемент КраснаяПлоскость[1,1] является неким числом.
Правильно?

Если так, то не понятно, как Вы используя 3-ех мерный массив обратитесь допустим к элементу КраснаяПлоскость[1,3]

Или Вы своей картинкой что-то другое имели в виду?
astecenko вне форума Ответить с цитированием
Старый 06.08.2012, 12:41   #8
trafbite
Форумчанин
 
Регистрация: 21.07.2007
Сообщений: 103
По умолчанию

Мы, по всей видимости, неправильно поняли друг друга. Вот что я имел ввиду.

В квадратах - индексы элементов.
Т.е. элемент синей плоскости с индексом [3,1] - это "2" - как в двумерном массиве; элемент черной плоскости с индексом, например, [2,4] - это "5", все просто.

Но у меня таких "плоскостей" несколько и заранее я не знаю сколько, поэтому я не могу просто жестко объявить 2, 3, 5 двумерных массивов и с ними работать. Поэтому я использую трехмерый (в моем понимании) что бы мог задавать сколько нужно таких плоскостей.

О моей ситуации. На вход программе я даю несколько текстовиков (сколько заранее не знаю). Строки (разделенные по определенному признаку) каждого из текстовиков я буду загонять в эти "плоскости". Во как

И все равно остается вопрос: как мне без цикла изменить количество строк, например, в черно плоскости на 10?

Цитата:
Если так, то не понятно, как Вы используя 3-ех мерный массив обратитесь допустим к элементу КраснаяПлоскость[1,3]
Ну в моем случае это будет Mass[1,3,2], т.е. "4".

Последний раз редактировалось trafbite; 06.08.2012 в 12:45.
trafbite вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Трехмерный массив Leisan_S Паскаль, Turbo Pascal, PascalABC.NET 7 09.01.2015 19:17
Трехмерный массив в Delphi. Как реализовать? ichi Общие вопросы Delphi 3 11.04.2012 04:13
трехмерный массив Bape}l{ka Microsoft Office Excel 12 26.01.2012 15:11
трехмерный массив world12_tk Помощь студентам 2 06.01.2012 17:04
как заполнить трехмерный массив процедурой? MyLastHit Общие вопросы Delphi 9 03.01.2011 21:00