Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Трехмерный массив.


Автор: Atiskara 8.6.2008, 23:54
В общем, есть массив матриц с заранее известными значениями. Как эти значения присвоить массиву при загрузке программы? Одно из измерений массива переменной размерности, но в принципе можно и постоянной сделать.. Помогите, люди..

Автор: Alexeis 9.6.2008, 09:42
Например так
Код

  a[i, j, k] := 5;

Или так
Код

  a[i][j][k] := 5;

Автор: Atiskara 9.6.2008, 10:24
Цитата

Например так
Код

  a[i, j, k] := 5;

Или так
Код

  a[i][j][k] := 5;



хех...около 100 матриц с размерностью примерно 10х12... и все это прописать построчно, как я понимаю?
Код

mas[0,0,0]=0
mas[0,0,1]=1
mas[0,0,2]=0
mas[0,0,3]=0
mas[0,0,4]=0
mas[0,0,5]=1
mas[0,0,6]=1
....


я ж с ума сойду, пока распишу все это...
я конечно извратилась, склеила матрицы в строки, получился массив строк, при котором обращаюсь к элементам строк через преобразование из строки в число.. Но это называется извращение, хотелось бы пограмотнее написать...

Автор: Alexeis 9.6.2008, 10:36
Atiskara, потому я и писал i, j, k, что это типичные имена счетчиков циклов. Делать все нужно в цикле smile .

Автор: Atiskara 9.6.2008, 11:02
Цитата(Alexeis @ 9.6.2008,  10:36)
Atiskara, потому я и писал i, j, k, что это типичные имена счетчиков циклов. Делать все нужно в цикле smile .

так мои массивы не подлежат циклированию... вот например, 

один элемент массива выглядит так:

111111111111
111111111111
110001100011
110001100011
110001100011
110001100011
110001100011
111111100011
011110111110
000000011100

как данные значения присвоить в mas[i,j,k]?

Автор: THandle 9.6.2008, 11:09
Может быть сразу объявить массив со значениями?

Код

var
  Form1: TForm1;
  arr : array [1..10, 1..10, 1..10] of integer =
    (
    //значения
    );



Например:

Код

var
  arr : array [1..4, 1..4] of integer =
    ((1, 1, 2, 4), (1, 5, 1, 6), (3, 5, 6, 9), (3, 6, 8, 7));


???

Автор: Atiskara 9.6.2008, 11:16
THandle, 
Благодарю. Вот это мне и нужно было...

Добавлено через 3 минуты и 24 секунды
Цитата(THandle @ 9.6.2008,  11:09)
Может быть сразу объявить массив со значениями?

Код

var
  Form1: TForm1;
  arr : array [1..10, 1..10, 1..10] of integer =
    (
    //значения
    );



Например:

Код

var
  arr : array [1..4, 1..4] of integer =
    ((1, 1, 2, 4), (1, 5, 1, 6), (3, 5, 6, 9), (3, 6, 8, 7));


???

а нельзя ли при этом реализовать возможность задания переменного размера одного измерения массива?

Автор: Rennigth 9.6.2008, 14:07
Цитата(Atiskara @  9.6.2008,  11:16 Найти цитируемый пост)
а нельзя ли при этом реализовать возможность задания переменного размера одного измерения массива? 

нужно использовать для этого динамические массивы.

Автор: Atiskara 9.6.2008, 14:25
Цитата(Rennigth @ 9.6.2008,  14:07)
Цитата(Atiskara @  9.6.2008,  11:16 Найти цитируемый пост)
а нельзя ли при этом реализовать возможность задания переменного размера одного измерения массива? 

нужно использовать для этого динамические массивы.

так как же в процедуре тогда массиву присвоить значения?

Автор: Rennigth 9.6.2008, 15:17
Цитата(Atiskara @  9.6.2008,  14:25 Найти цитируемый пост)
так как же в процедуре тогда массиву присвоить значения? 

уже тогда ручками. а от куда данные берешь?

Автор: Atiskara 9.6.2008, 15:57
Цитата(Rennigth @ 9.6.2008,  15:17)
Цитата(Atiskara @  9.6.2008,  14:25 Найти цитируемый пост)
так как же в процедуре тогда массиву присвоить значения? 

уже тогда ручками. а от куда данные берешь?

шаблоны символов в виде пикселей черного или белого цвета, для сравнения при распознавании изображения...

Автор: Atiskara 10.6.2008, 22:17
По моему вообще нельзя сделать динамический многомерный массив с переменной размерностью одного из измерений... Переубедите меня если можно? 

Автор: Alexeis 10.6.2008, 22:41
  Можно  smile . Delphi всемогуч!

Автор: Atiskara 10.6.2008, 22:58
Цитата(Alexeis @ 10.6.2008,  22:41)
Можно  smile . Delphi всемогуч!

Неубедил... smile   smile 

Автор: Alexeis 10.6.2008, 23:03
Код

var
  a : array of array[0..5] of array of array ['a'..'m'] of AnsiString;


Автор: Atiskara 10.6.2008, 23:11
Цитата(Alexeis @ 10.6.2008,  23:03)
Код

var
  a : array of array[0..5] of array of array ['a'..'m'] of AnsiString;

Код

var masWord: array of array of TImage;
....
       for k2:=0 to N-1 do
       begin     
            SetLength(masWord,k2+1, Length(masPic));
            for i1:=0 to Length(masPic)-1 do
            begin
                masWord[k2,i1]:=masPic[i1];
            end;     
        end;


Вторая размерность массива masWord переменной длины. 
При каждом новом цикле k2 размерности i1 при k2-1 переприсваивается новое значение равное размерности i1 при k2... Как тут быть?

Автор: Alexeis 10.6.2008, 23:16
SetLength(masWord,k2+1, Length(masPic));
Зачем это в цикле?  smile 
Это же пересоздание матрицы на каждой итерации.

Автор: Atiskara 10.6.2008, 23:22
Цитата(Alexeis @ 10.6.2008,  23:16)
SetLength(masWord,k2+1, Length(masPic));
Зачем это в цикле?  smile 
Это же пересоздание матрицы на каждой итерации.

Ну так примерно это мне и надо, чтобы на каждой итерации к "матрице" добавлялись строки различной длины.. Заранее неизвестно, ни какой ширины, ни какой высоты будет данный двумерный массив, это вычислится только внутри цикла... 

Автор: Alexeis 10.6.2008, 23:23
array of array of <T>;
Можно создавать как массив массивов (фактически массив указателей) или как матрицу.
Чтобы сделать массив массивов, нужно писать так
SetLength(masWord, rowcount); и затем задавать каждую размерность
SetLength(masWord[i], elementscount);

Автор: Atiskara 10.6.2008, 23:28
Цитата(Alexeis @ 10.6.2008,  23:23)
array of array of <T>;
Можно создавать как массив массивов (фактически массив указателей) или как матрицу.
Чтобы сделать массив массивов, нужно писать так
SetLength(masWord, rowcount); и затем задавать каждую размерность
SetLength(masWord[i], elementscount);

 smile Спасибо. Кажется это оно... 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)