2章:Fortran90プログラミング基礎
2.2 変数と定数、データの型
ここでは、変数と定数、データ型の種類について学習する。
数学やプログラミングに使われる一般的な事柄として、与えるデータによって値が変わるものを変数、プログラムの実行中に値が変わらないものを定数という。
2.2.1 変数について
変数名の付け方
- 桁数:31桁まで
- 使用できる文字:英数字、下線(_)※ただし先頭は必ず英字になる。
型宣言
変数の型は、その変数に代入される値の型を決定するので、プログラム内で各変数の型を宣言することが必要になる。
変数の初期化
すべての変数は初期状態では未定義であるため、宣言の中で初期値を代入することができる。
初期化する場合は以下のように書く。
(例)X に初期値を代入し初期化する
代入する初期値を実数型として扱うため、REALを使う。
REAL : : X = 初期値
(例)X の値を1.0に、Y の値を10.0に、Z の値を-1.54に初期化する
REAL : : X = 1.0 , Y= 10.0 , Z = -1.54
2.2.2 定数について
よく使用される定数には名前が付けられている。たとえば、円周率を表す定数は「pi」、自然対数の底を表す定数は「e」と表される。
型宣言文に PARAMETER 属性を含めると、その型が定数の名前となる。これを「名前付き定数」という。
ある定数をプログラム内で頻繁に使用する場合は、名前つき定数で書いておけば、定数の値を変更する場合、PARAMETER 文だけを変えればよい。
定数に名前を付ける場合は以下のように書く。
型指定子, PARAMETER : : リスト
(例)one を1.0に、pi を3.14159に関連付け
REAL, PARAMETER : : one = 1.0, pi = 3.14159
2.2.3 データ型の種類
データ型の種類には、基本型と派生型がある。
- 基本型:最初からシステムに組み込まれている型
- 派生型:自分で定義して使う型
これに「種別値」を組み合わせ、詳しい型指定をする。「種別値」というのはバイト数である。1バイトで扱う時は(1)、8バイトで扱う時は(8)と書く。
種別値を設定しなかった場合、文字型(CHARACTER)は1バイト、それ以外は4バイトとして扱われるのが一般的である。
型宣言は、以下のように書く。
型の名称 : : 変数名
または
型の名称(KIND=種別値) : : 変数名
KIND= は省略可能であり、( )の中に種別値だけを書くこともできる。
(例)
INTEGER : : A
INTEGER(KIND=4) : : A,B !複数の変数名を宣言する時は、コンマで区切る。
INTEGER(4) : : A,B
■整数型(INTEGER)
整数型は数値を一定桁数の整数の形で表す型である。小数点や指数部は付けない。簡単なので処理は速いが表現できる範囲が狭い。実数型と混用すると型変換をしなければならず計算が遅くなるため、主に番号や回数、添え字などを表すのに使用する。
宣言は以下のように書く。
INTEGER : : 変数名
または
INTEGER(KIND=種別値) : : 変数名
(例)
INTEGER(KIND=4) : : A,B,C
INTEGER(4) : : A,B,C
INTEGER : : A,B,C !種別値を省略した場合、整数型の変数の型は基本整数型
のINTEGER(4)になる。
■実数型(REAL)
実数型は非常に小さい数から非常に大きな数まで扱うことができる型である。小数点または指数部を付ける。宣言は以下のように書く。
REAL : : 変数名
または
REAL(KIND=種別値) : : 変数名
(例)
REAL(KIND=4) : : A,B
REAL(4) : : A,B
REAL : : A !種別値を省略した場合、実数型の変数の型は基本実数型の
REAL(4)になる。
■複素数型(COMPLEX)
複素数型とは実数の2つの数値を組みにして、複素数の実部(実数部分)と虚部(虚数部分)を表し、演算などを行う型である。
複素数 x は
x = a + bi
で表される。a と b は実数で、i は虚数単位(i=√-1)である。
a を複素数の実部、b を複素数の虚部という。宣言は以下のように書く。
COMPLEX : : 変数名
または
COMPLEX(KIND=種別値) : : 変数名
(例)
COMPLEX(KIND=4) : : A,B
COMPLEX(4) : : A,B
COMPLEX : : A,B !種別値を省略した場合、基本複素数型のCOMPLEX(4)に
なる。
複素数データをコンピュータ内部で表現した場合、以下のようになる。
複素数型の種別には COMPLEX(4) (基本複素数型)と COMPLEX(8) (倍精度複素数型)がある。COMPLEX(4) は実部と虚部を各4バイトで表現し、COMPLEX(8) は実部と虚部を各8バイトで表現する。
■文字型(CHARACTER)
人名や地名などの文字データを扱う型である。データの入出力や記憶、連結や比較、部分列の抽出などができる。宣言は以下のように書く。
CHARACTER(文字数) : : 変数名
または
CHARACTER(LEN=文字数) : : 変数名
LEN=(文字列の長さを表す)は省略可能であり、( )の中に文字数だけを書くこともできる。
(例)
CHARACTER(LEN=10) : : A
CHARACTER(10) : : A
文字列は引用符(’)または二重引用符(”)で囲む。
引用符で囲まれた文字列中に引用符を書く場合は、文字列の中に引用符を2個続けて書くか、二重引用符で囲む。
(例)Don’t Worry
’Don’’t Worry’または”Don’t Worry”と書く。
■論理型(LOGICAL)
論理型は「真」「偽」に関する処理を行う。宣言は以下のように書く。
LOGICAL A,B
または
LOGICAL(KIND=X) A,B
(例)
LOGICAL(KIND=4) A,B
LOGICAL(4) A,B
LOGICAL A,B !種別値を省略した場合、基本論理型の LOGICAL(4)になる。
論理型の定数は「真」「偽」の2種類である。「真」を.TRUE.、「偽」を.FALSE.と表す。両側のピリオド(.)を忘れないようにする。
論理型で使用できる演算子は以下のとおりである。
演算子 | 意味 | 書き方 | 結果が真になるための条件 |
---|---|---|---|
.NOT. | 論理否定 | .NOT.A | Aは真でない |
.AND. | 論理積 | A.AND.B | A、B両方が真 |
.OR. | 論理和 | A.OR.B | A、Bの少なくとも一方が真 |
.EQV. | 論理等価 | A.EQV.B | A、B両方が真、または両方が偽 |
.NEQV. | 論理非等価 | A.NEQV.B | A、Bのどちらかが真で、他方が偽 |
演算子の優先順位は、次のようになる。
1 「.NOT.」 → 2「.AND.」 → 3「.OR.」 → 4「.EQV.」「.NEQV. 」