DIMENSION属性
copyright

green dotDIMENSION属性

DIMENSION属性は、配列を宣言するときに指定する。

[例]
DIMENSION属性の例

    REAL,DIMENSION(10,2) :: a,array
    INTEGER,DIMENSION(2) :: b,c
    INTEGER,DIMENSION(-2:2) :: d

green dot配列の宣言

配列に付けられた名前を配列名とよぶ。配列を使うときはプログラム の始めに宣言しなければならない。そのときに、配列の大きさも決める 必要がある。配列の宣言には、INTEGER,DIMENSIONやREAL,DIMENSIONを使う。 また、INTEGERREAL、DIMENSIONなどを使うこともできる。

green dotDIMENSION文

  INTEGER,DIMENSION(m) :: 配列名,配列名,…
  REAL,DIMENSION(m) :: 配列名,配列名,…

[例1]
大きさ5の整数型配列aと大きさ5の整数型配列matの宣言

INTEGER,DIMENSION(5) :: a,mat
[例2]
大きさ5の整数型配列aと大きさ10の実数型配列matの宣言

      INTEGER,DIMENSION(5) :: a
      REAL,DIMENSION(10) :: mat

green dotINTEGER文,REAL文

INTEGER文,REAL文を使って整数型,実数型の配列を宣言できる。 DIMENSION文を使った場合は、変数名の規則と同じ型の配列が宣言できる。

  INTEGER [::] 配列名(m),配列名(n),…
  REAL [::] 配列名(m),配列名(n),…
  DIMENSION [::] 配列名(m),配列名(n),…

[例]
大きさ5の整数型配列aと大きさ10の実数型配列matの宣言

      INTEGER :: a(5)
      REAL :: mat(10)

green dot配列の上限,下限の指定

配列は、下限の指定を省略すると1とみなされ、配列は1からとられる。 配列は、次のように上限,下限を指定して宣言することができる。

  配列名(m:n)

[例]
整数型配列aを-3から5まで宣言する。また、 実数型配列bを0から3まで宣言する。

      INTEGER,DIMENSION(-3:3) :: a
      REAL,DIMENSION(0:5) :: b
dim 1

green dot部分配列

部分配列は、配列中の1つの行または、規則的な部分を参照するときに使う。 配列aのm番目からn番目を表すのに、a(m:n)と記述できる。また、 部分配列の添字は1次元の整数配列で指定することもできる。

  配列名(m:n)
    または、
  配列名(1次元の整数配列)

[例1]
配列aの3番目から7番目指定するとa(3:7)となる。

dim 2
[例2]
次のプログラムを実行すると4行目のa(2:3)から 20 30 が出力され、5行目のa(b)は、a(b(1)),a(b(2)), a(b(3)),a(b(4))になり、配列の内容を置き換えて、 a(4),a(3),a(2),a(1)になるので結局 40 30 20 10 が出力される。
      INTEGER,DIMENSION(4) :: a,b
      a(1)=10; a(2)=20; a(3)=30; a(4)=40
      b(1)=4;  b(2)=3;  b(3)=2;  b(4)=1
      WRITE(*,*) a(2:3)
      WRITE(*,*) a(b)

green dot配列の出力

配列の出力は、WRITE文で記述できるが、出力する変数の記述の方法が いろいろある。たとえば、大きさ5の配列aの出力は、以下の5通りの 記述のしかたがある。[1]は記述が長くなるのであまり使わない。[2]は 配列の一部分を出力するときは使えない。[3]はDO文の形式と同じよう に範囲を指定する。[4]は部分配列の表記で記述している。[5]は部分配列で 配列の全体を表す。
  [1] WRITE(*,*) a(1),a(2),a(3),a(4),a(5)
  [2] WRITE(*,*) a
  [3] WRITE(*,*) (a(i),i=1,5)
  [4] WRITE(*,*) a(1:5)
  [5] WRITE(*,*) a(:)

 たとえば、配列bがあるとき、m番目からn番目の内容を
出力するときは[3]の方法を用いて、以下のように記述する。

    WRITE(*,*) (b(i),i=m,n)

 または、[4]の方法を用いて、以下のように記述する。

    WRITE(*,*) b(m:n)

green dot配列の宣言

配列の宣言は、以下の(1)〜(3)の記述方法があるが、 ここでは(1)の記述に統一している。

(1)型指定子(INTEGERREAL文等)に、DIMENSION属性を指定する方法

  型指定子,DIMENSION(配列形状指定) :: 配列名,…

[例]
配列a,b,cの宣言

    INTEGER,DIMENSION(5) :: a,b
    REAL,DIMENSION(10) :: c
(2)配列名の後に括弧で配列形状指定を行う方法

  型指定子 [::] 配列名(配列形状指定),…

[例]
配列dataの宣言

INTEGER :: data(5)

(3)DIMENSION文で宣言し配列名の後に括弧で配列形状指定を行う方法

  DIMENSION [::] 配列名(配列形状指定),…

[例]
配列matの宣言

DIMENSION mat(10)

green dot配列形状指定

配列形状指定は、配列の大きさ(要素の個数)と、 その配列の次元数を宣言する。配列は、7次元までの 次元を指定することができる。

  ( e [, e [, e ]]…)

e:寸法宣言子である。eの個数を配列の次元数とよぶ。
[例1]
1次元配列x(6)

hairetu 1
    INTEGER,DIMENSION(6) :: x
    x(1)=10; x(2)=20; x(3)=30; x(4)=40; x(5)=30; x(6)=20
[例2]
2次元配列x(3,2) hairetu 2
  INTEGER,DIMENSION(2,3) :: x
  x(1,1)=8; x(1,2)=2; x(2,1)=9; x(2,2)=5;
    x(3,1)=3; x(3,2)=2
[例3]
文字列の配列x(6) hairetu 2
    CHARACTER (LEN=3),DIMENSION(6) :: x
    x(1)='*a*';  x(2)='*b*';  x(3)='*c*'
    x(4)='*d*';  x(5)='*e*';  x(6)='*f*'

green dot寸法宣言子

寸法宣言子は、配列の各次元の下限e1と上限e2を指定する。 下限e1:を省略すると、e1は1とみなし、配列の要素は1からとられる。

  [e1:]e2

  e1:次元の下限値。e1(およびその後のコロン)を
    省略すると、1とみなされる。
  e2:次元の上限値。必ず指定する。
上限値と下限値(e1とe2)を表す算術式の中の定数や変数の型はすべて整数である。 下限値は正数、ゼロ、負数のいずれでもよい。各次元の大きさ(寸法)は、 e2-e1+1である。下限値が1ならば、その次元の大きさは上限値と同じである。
[例]
整数型配列xを-3から2まで宣言する。 hairetu 2
    INTEGER,DIMENSION(-3:2) :: x
    x(-3)=10; x(-2)=20; x(-1)=30; x(0)=40;
    x(1)=30; x(2)=20

green dot部分配列

部分配列は、配列中の1つの行または、規則的な部分を 参照するときに使う。配列aのm番目からn番目を表すのに、 a(m:n)と記述できる。また、部分配列の添字は1次元の整数配列で 指定することもできる。

  配列名(e1:e2)
    または、
  配列名(1次元の整数配列)

   e1:部分配列の下限値。省略した場合、次元の下限値
   e2:部分配列の上限値。省略した場合、次元の上限値
[例1]
部分配列の例
    INTEGER,DIMENSION(6) :: x
    x(1)=10; x(2)=20; x(3)=30; x(4)=40;
    x(5)=30; x(6)=20
    WRITE(*,*) x(:)    !xのすべて
    WRITE(*,*) x(:3)   !x(1),x(2),x(3)
    WRITE(*,*) x(3:)   !x(3),x(4),x(5),x(6)
[例2]
4行目のa(b)は、a(b(1)),a(b(2)),a(b(3))になり、配列の内容を置き換えて、 a(3),a(2),a(1)になり、30 20 10 が出力される。
    INTEGER,DIMENSION(3) :: a,b,c
    a(1)=10; a(2)=20; a(3)=30
    b(1)=3;  b(2)=2;  b(3)=1
    c=a(b)
    WRITE(*,*) c

green dot配列への代入

配列へ数値などを代入するには、添字を括弧で囲んで指定する。 また、(/…/)で囲んでまとめて記述することもできる。
[例]
配列a,bへ値を代入
    INTEGER,DIMENSION(3) :: a,b
    a(1)=10; a(2)=20; a(3)=30
    b=(/98,76,54/)  !b(1)=98; b(2)=76; b(3)=54と同じ

green dot配列への全体代入

配列の全ての要素に同じ数値などを代入するには、 配列名にその値を代入する。
[例]
配列bのすべての要素の値を10にする
    INTEGER,DIMENSION(3) :: a
    a=10            !a(1)=10; a(2)=10; a(3)=10と同じ

green dot配列への部分代入

配列のある範囲にある要素に数値などを代入するには、 部分配列に値を代入する。
[例]
部分配列の例
  INTEGER,DIMENSION(6) :: x,a
  INTEGER,DIMENSION(3) :: b
  x(1)=10; x(2)=20; x(3)=30; x(4)=40; x(5)=30; x(6)=20
  a(2:4)=x(1:3)  !a(2)=x(1); a(3)=x(2); a(4)=x(3)と同じ
  b=x(4:)        !b(1)=x(4); b(2)=x(5); b(3)=x(6)と同じ
line-end