変数,配列を初期化する際に用いる.配列の場合,値の格納順序に注意(下の例を参照).DATA文は変数に値を「前もって」代入するだけなので,プログラム中で変更は可能.
data文 | data 変数名のリスト/値のリスト/,... |
implicit none integer i,j real*8 a(10),c(2,5),pi,e data pi,e/3.14159625D0,2.7182818D0/ data a/8*0.D0,1.D0,5.D-1/ data c/3*1.D0,7*1.D2/ write(6,*) 'pi=',pi,'e=',e do i=1,10 write(6,*) i,a(i) enddo do i=1,2 do j=1,5 write(6,*) i,j,c(i,j) enddo enddo end
配列をいくつも使用していて, そのサイズをすべて一度に変えたい場合がよくある. このときはparameter文を用いる. 先ほどのDATA文との大きな違いは, DATA文は変数の中に値が入るのに体し, PARAMETER文では定数名それ自体がある定数になる, ということにある. よってPARAMETER文で設定された値は変更することはできない. 構文は以下の通り.
parameter文 | parameter (定数名=定数) |
implicit none integer n parameter (n=10) real*8 a(n) data a/10*1.D0/ call sub(a,n) end subroutine sub(a,n) implicit none integer i,n real*8 a(n) do i=1,n write(6,*) i,a(i) enddo return endparameter文は実行文よりも前になければならない. 配列のサイズを設定したい場合にはその宣言文よりも前にある必要がある.
アポストロフィ(')で挟まれた文字列を文字定数という. 例:'hoge'
文字定数を格納するためには「文字型」の変数を宣言する必要がある.
文字型宣言文 | character a*10, b(2,2)*5,c |
a,b,c | 変数, 配列, 関数副プログラム名 |
---|---|
*10, *5 | 文字数の指定 |
implicit none character a*5 a='hoge' write(6,*) a end
スラッシュを二つ(//)書くことで 文字型変数や定数を連結することができる.
例:implicit none character a*5,b*10 a='hoge' b=a//'hoge' write(6,*) b end
文字列の一部を指定することができる. a(m:n)によって変数aの第m文字目からn文字目を表す. 配列の場合, a(k)(m:n)とすると, k番目の配列要素のm文字目からn文字目を指定する. mが省略された場合は1となる.nが省略された場合は文字列の末尾となる.
例:implicit none character x*10,y*4,z(3)*5 x='0123456789' y=x(3:6) z(1)(3:5)=x(1:3) write(6,*) x,' ',y,' ',z(1) end
関数名 | 意味 |
char(整数) | 整数値を文字に変換. I=0〜255の値から, その値に対応する文字に変換する. |
---|---|
ichar(文字型変数, もしくは文字定数) | 文字をコード表に対応する整数値に変換. |
index(a,b) | 文字列a中にある文字列bの位置(整数). 文字列bが見付からない場合は0を返す. |
len(文字型変数, もしくは文字定数) | 文字列aの長さ(整数). |
implicit none character a*20,b,d integer n,m,k,i a='mpqccpqwqzjpqyycvbpq' d='a' b=char(100) n=ichar('d') m=ichar(d) k=index(a,'pq') i=len(a) write(6,*) b,n,m,k,i end
文字と整数値との間にはコード表によって対応関係がある. この整数値を用いて異なる文字の間の大小関係を定める . 比較には.eq., .ne., .gt., .ge., .lt., .le.を用いる.
例:implicit none character a,b a='c' b='c' if(a.eq.b) write(6,*) a,b end
同様にして, 文字列の大小の比較が行われる. 文字列の先頭の文字が異なる場合, それらの文字同士の大小で文字列 の大小を定める. 先頭の文字が同じ場合, 二文字目以降で最初に異なる文字の大小で大小関係を定める. 文字列の長 さが異なる場合, 短い方の文字列の後ろに空白文字を付け加えて比較する. 空白文字の整数値は32で, どの英数字よ りも小さい.
例: ABA□□ < ABC□□ < ABCDE