Page 1 of 1

Многомерный массив

Posted: 07.01.2011 14:42
by Zampi
Помогите, а? :oops:

Code: Select all

  var
    dirs : array [1..9] of array [1..3] of integer;
  begin
    dirs[0] := [0,1,2];
    dirs[0] := [0,1,2];
    dirs[1] := [1,1,1];
    dirs[2] := [1,0,2];
    dirs[3] := [-1,1,1];
    dirs[4] := [0,0,2];
    dirs[5] := [1,-1,1];
    dirs[6] := [-1,0,2];
    dirs[7] := [-1,-1,1];
    dirs[8] := [1,-1,2];
[/code]

Posted: 07.01.2011 15:13
by Fenix
Ты же объявил массив с индексами от 1 до 9 и вложенностью от 1 до 3. А обращаешься при инициализации с нулевого индекса.

Posted: 07.01.2011 15:18
by Zampi
изменил индексы (сначала вообще без них писал через := [[1,1,1],[..]...[..]];)

но проблема все такая же — в дебаге доходит до: dirs[1] := [0,1,2]; и встает намертво, но без ошибок.

Posted: 07.01.2011 16:12
by Fenix
Если я щас правильно понял, то PS мал-мал не поддреживает подобные присваивания. Даже заполнение одномерного массива за один заход нормально не выполняется, хотя ошибку при этом всё равно пишет. Подобным образом получалось инициализировать только одномерный динамический массив. Можно сделать следующим образом:

Code: Select all

  dirs : array of array of integer;
begin
  SetLength(dirs, 9);
  dirs[0] := [0,1,2]; 
  dirs[1] := [1,1,1]; 
  dirs[2] := [1,0,2]; 
  dirs[3] := [-1,1,1]; 
  dirs[4] := [0,0,2]; 
  dirs[5] := [1,-1,1]; 
  dirs[6] := [-1,0,2]; 
  dirs[7] := [-1,-1,1]; 
  dirs[8] := [1,-1,2];
Размерность динамического массива можно получить функцией Length(Target: array): Integer;