計算機実験 II(塩田・森教官) No.5

  1995年11月10日の課題 : 多次元配列、整合配列、レコード型、
                   可変部付きレコード、with 文

[1] 多次元配列を覚える。

行列など多次元の配列は

  var a:array[1..3][1..3] of real;

のように定義し、 各成分は a[1][1] または a[1,1] のように表す。( sample5a )


[2] 整合配列を眺める。

関数や手続きに汎用性を持たせる為、 添え字の上限・下限も引数にした配列。( sample5c )

[3] レコード型を覚える。

複数のデータをひとまとめにしたデータ型である。 宣言の一般形は、

  type レコード型タイプ名  = record

       フィールド名 : 型 ; 
          :
       フィールド名 : 型 

  end;

で、レコード変数の各要素は <レコード変数>.<フィールド名> のように表す。  with 文を用いると <レコード変数>. の部分を省略できる。 ( sample5b )


[4] 可変部つきレコード型を眺める。

フィールドの個数や型をタグフィールドの値に応じて 変化させるレコード型である。 メモリを節約する効果がある。( テキスト pp.72-74 )

[5] サンプル
program sample5a;

{ 5×5 の完全方陣:縦横斜め(対角線以外の斜めも)の和が全て 65 }

const
  size=5;
  key=12;

type
  vector=array[1..size] of real;
  matrix=array[1..size] of vector;

var
  a,b,c:matrix;
  i,j:integer;

begin
  for i:=1 to size do
  for j:=1 to size do
    begin
      a[i,j]:=(i+key*j) mod size;
      b[i,j]:=(key*i+j) mod size;
      c[i,j]:=a[i,j]+size*b[i,j]+1
    end;
  for i:=size downto 1 do
    begin
      for j:=size downto 1 do write(c[i][j]:5:0);
      writeln
    end;
  writeln;
end.