5章:配列
この章では、配列について説明する。配列とは、同じ変数名で複数の値を扱うことができる形式のことである。
配列でない単一のデータのことをスカラといい、個々のスカラデータを配列要素という。
スカラの集合を列に配置したものが配列である。
5.1 配列の宣言と処理
ここでは配列の宣言や割付けなどの処理について説明する。
配列の宣言
配列は以下のように宣言する。
型名,DIMENSION(寸法) :: 配列名,・・・
■型名
型名のつけ方は、通常の変数名と同じである。
型宣言を省略した場合は
- I、J、K、L、M、Nで始まる時は基本整数型の配列
- それ以外の文字で始まる時は基本実数型の配列
になる。
■寸法
添付の範囲のことを指し、以下のように書く。ただし、添字の下限が「1」の場合は、添付の上限のみを書けばよい。
添付の下限:添付の上限
(例)Aは大きさが15(1~15)の基本整数型の1次元配列
INTEGER,DIMENSION(15) :: A
(例)Aは大きさが4(0~3)×4(-1~2)=16の基本実数型の2次元配列
REAL,DIMENSION(0:3,-1:2) :: A
配列の次元数と各寸法を(寸法1、寸法2、・・・)の形で表したものを形状という。
2つの配列が同じ形状の場合、1つの式で配列同士の演算を表すことができ、これを形状適合しているという。スカラはどのような形状の配列とも形状適合する。
■配列名
配列名のつけ方は、通常の変数名と同じである。
(例)
INTEGER,DIMENSION(2:5,3:8) :: A
INTEGER,DIMENSION(4,6) :: B
INTEGER :: C
INTEGER,DIMENSION(3,7) :: D
配列Aは、「次元数が2、寸法が4と6、大きさが24(4×6)、形状が(/4,6/)である」ということを表す。
配列Aに形状適合する配列は、配列Bとスカラ変数Cである。
■初期値の設定
配列宣言文、またはDATA文で初期値を設定できる。
・配列宣言文での書き方
配列の宣言をするときに初期値を設定する。
型名,DIMENSION(寸法) :: 配列名=(/初期値/)
初期値には、配列要素の初期値を(,)で区切って書く。
(例)
INTEGER,DIMENSION(6) :: A=(/0,2,4,6,8,10/)
・DATA文での書き方
プログラムの実行の前に変数や配列に初期値や定数を設定する。
DATA A1,A2,・・・,An/定数1,定数2・・・,定数n/
A:変数名、配列要素、配列名
(例)
DATA A,B,C/3,5,7/
DATA A,B,C,D,E/5*3/
同じ値(例では3)を5個設定する場合は「5*3」と書く。
■コンパイル時配列と割付配列
今まで説明してきた宣言方法では、添字の下限と上限を指定し、配列用の大きさ(メモリ)をコンパイル時に確保している。これをコンパイル時配列という。
しかし、実際に格納されるデータが大きすぎた時はすべてを格納できずに正しい処理が行われず、データが小さすぎた場合は実際に使われない部分までメモリを占有することになり無駄である。
そこで、次元数だけ指定し、添字の下限、上限を指定しない配列を宣言し、データを格納するエリアを動的に割付けることができる。これを割付け配列という。
■割付け配列の宣言方法
割付け配列は以下のように宣言する。
型名,ALLOCATABLE :: 配列名1(:),配列名2(:,:),・・・
または
ALLOCATABLE [::] 配列名1(:),配列名2(:,:),・・・
配列の次元数は配列名の後の()内の(:)の数で表す。
(:)は1次元配列、(:,:)は2次元配列になる。
■割付け配列の大きさの指定
宣言された割付け配列の下限、上限を指定する場合は、ALLOCATE文を使い以下のように書く。
ALLOCATE (配列名(添字の下限:添字の上限),・・・
■割付け配列の開放
ALLOCATE文で大きさを指定した配列が不要になった時は、割付け配列の開放を行う。
割付け配列の開放はDEALLOCATE文を使い以下のように書く。
DEALLOCATE (配列名1,配列名2,・・・)
(例)XとYの値を読み込み、A(X,Y)の整数型配列Aを割付け、開放する
INTEGER,DIMENSION(:,:),ALLOCATABLE :: A
INTEGER :: X,Y
READ(*,*) X,Y
ALLOCATE(A(X,Y))
・
・
・
DEALLOCATE(A)