Example: Multidimensional dynamic array/ja

From Free Pascal wiki
Jump to navigationJump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

English (en) español (es) français (fr) 日本語 (ja)

{訳注:新規プロジェクト>コンソールアプリ を選択し、以下のコードを張り付けて実行すると、Outputの結果が出力されます。}

コード

program project1;

type
  TArr2D = array of array of Integer;

procedure  FillArr2D(Arr: TArr2D);
var
  i, j: Integer;
begin
  for i:=Low(Arr) to High(Arr) do
    for j:=Low(Arr[i]) to High(Arr[i]) do
      Arr[i][j] := i*10 + j;
end;

procedure  ShowArr2D(Arr: TArr2D);
var
  i, j: Integer;
begin
  for i:=Low(Arr) to High(Arr) do
  begin
    Write('Arr[', i, ']:  ');
    for j:=Low(Arr[i]) to High(Arr[i]) do
      Write(Arr[i][j]:2, '  ');
    WriteLn;
  end;
end;

procedure Pause;
begin
  WriteLn;
  Write('...');
  ReadLn;
  WriteLn;
end;


var
  Arr2D: TArr2D;

begin
  SetLength(Arr2D, 5, 3);  // 配列Arr2Dを2次元配列へSetLength
    WriteLn(UTF8ToAnsi('Arr2D を2次元配列に SetLength した後の矩形の動的配列:'));
    WriteLn('-----------------------------------------');
    ShowArr2D(Arr2D);
    Pause;

  FillArr2D(Arr2D);
    WriteLn(UTF8ToAnsi('充填後の矩形の動的配列:'));
    WriteLn('-----------------------------------------');
    ShowArr2D(Arr2D);
    Pause;

  SetLength(Arr2D, 10);  // 配列Arr2Dを1次元配列へSetLength
    WriteLn(UTF8ToAnsi('Arr2Dを1次元配列に SetLength した後の非矩形の動的配列:'));
    WriteLn('----------------------------------------------------------------');
    ShowArr2D(Arr2D);
    Pause;

  SetLength(Arr2D[0], 9);
  SetLength(Arr2D[1], 7);
  SetLength(Arr2D[2], 6);
  SetLength(Arr2D[3], 9);
  SetLength(Arr2D[4], 5);
  SetLength(Arr2D[5], 8);
  SetLength(Arr2D[6], 5);
  SetLength(Arr2D[7], 3);
  SetLength(Arr2D[8], 1);
  SetLength(Arr2D[9], 7);
    WriteLn(UTF8ToAnsi('1次元配列Arr2D に対して、2次元配列に SetLength した後の非矩形の動的配列:'));
    WriteLn('----------------------------------------------------------------------------');
    ShowArr2D(Arr2D);
    Pause;

  FillArr2D(Arr2D);
    WriteLn(UTF8ToAnsi('充填後の非矩形の動的配列:'));
    WriteLn('--------------------------------------------');
    ShowArr2D(Arr2D);
    Pause;
end.

出力

Arr2D を2次元配列に SetLength した後の矩形の動的配列:
-----------------------------------------
Arr[0]:   0   0   0
Arr[1]:   0   0   0
Arr[2]:   0   0   0
Arr[3]:   0   0   0
Arr[4]:   0   0   0

...

充填後の矩形の動的配列:
-----------------------------------------
Arr[0]:   0   1   2
Arr[1]:  10  11  12
Arr[2]:  20  21  22
Arr[3]:  30  31  32
Arr[4]:  40  41  42

...

Arr2Dを1次元配列に SetLength した後の非矩形の動的配列:
----------------------------------------------------------------
Arr[0]:   0   1   2
Arr[1]:  10  11  12
Arr[2]:  20  21  22
Arr[3]:  30  31  32
Arr[4]:  40  41  42
Arr[5]:
Arr[6]:
Arr[7]:
Arr[8]:
Arr[9]:

...

1次元配列Arr2D に対して、2次元配列に SetLength した後の非矩形の動的配列:
----------------------------------------------------------------------------
Arr[0]:   0   1   2   0   0   0   0   0   0
Arr[1]:  10  11  12   0   0   0   0
Arr[2]:  20  21  22   0   0   0
Arr[3]:  30  31  32   0   0   0   0   0   0
Arr[4]:  40  41  42   0   0
Arr[5]:   0   0   0   0   0   0   0   0
Arr[6]:   0   0   0   0   0
Arr[7]:   0   0   0
Arr[8]:   0
Arr[9]:   0   0   0   0   0   0   0

...

充填後の非矩形の動的配列:
--------------------------------------------
Arr[0]:   0   1   2   3   4   5   6   7   8
Arr[1]:  10  11  12  13  14  15  16
Arr[2]:  20  21  22  23  24  25
Arr[3]:  30  31  32  33  34  35  36  37  38
Arr[4]:  40  41  42  43  44
Arr[5]:  50  51  52  53  54  55  56  57
Arr[6]:  60  61  62  63  64
Arr[7]:  70  71  72
Arr[8]:  80
Arr[9]:  90  91  92  93  94  95  96

...

関連情報