4章:関数とサブルーチン
4.2 副プログラム
プログラム中で何度も同じような計算や処理を行う場合には、副プログラムの利用が有効である。
副プログラムを使用する理由としては、
- コンピュータの処理時間を軽減する
- 処理内容をわかりやすくし、保守性を高める
などが挙げられる。
副プログラムには関数副プログラムとサブルーチン副プログラムの2種類がある。
ここでは、関数副プログラムについて説明する。関数副プログラムは、記述する場所によってさらに外部関数、関数副プログラム(内部関数)、文関数の3種類に分けられる。以下に概略を示す。
4.2.1 外部関数
ここでは、外部関数について説明する。組み込み関数に存在しない関数を定義し、利用することができる。
外部関数の定義
外部関数は以下のように定義する。記述する場所はメインプログラムのEND文の直後である。
FUNCTION 関数名(仮引数1,仮引数2,・・・)
宣言部
式1
式2
・・・
END FUNCTION 関数名
■関数名
関数名の付け方は通常の変数名と同じである。
■仮引数1,仮引数2,・・・
外部関数を定義するための仮の引数。
■宣言部
関数および関数中で使用する変数(引数、戻り値含む)の型宣言を行う。引数には「INTENT (IN)」を指定する。
■式
式中には仮引数、定数、変数、組み込み関数などを用いることができる。
(例)円の面積を求める外部関数
FUNCTION EN_NO_MENSEKI (HANKEI)
IMPLICIT NONE
REAL :: EN_NO_MENSEKI
REAL, INTENT(IN) :: HANKEI
EN_NO_MENSEKI = PI*HANKEI**2
END FUNCTION EN_NO_MENSEKI
外部関数の引用
外部関数は以下のように引用する。
外部関数名(実引数1,実引数2,・・・)
(例)上で定義した関数を引用して半径2.0の円の面積を求める
S = EN_NO_MENSEKI(2.0)
4.2.2 関数副プログラム
ここでは、関数副プログラム(内部関数)について説明する。
関数副プログラムの定義
関数副プログラム(内部関数)は以下のように定義する。記述する場所はメインプログラムのEND文の直前である。
CONTAINS
関数副プログラム1
関数副プログラム2
関数副プログラム3
■関数副プログラム
記述の方法は外部関数の場合とほぼ同様である。ただし、命名規則についてはメインプログラムを踏襲するため、IMPLICIT文は不要である。
(例)円の面積を求める外部関数
CONTAINS
FUNCTION EN_NO_MENSEKI (HANKEI)
REAL :: EN_NO_MENSEKI
REAL, INTENT(IN) :: HANKEI
EN_NO_MENSEKI = PI*HANKEI**2
END FUNCTION EN_NO_MENSEKI
関数副プログラム引用
(例)上で定義した関数を引用して半径2.0の円の面積を求める
S = EN_NO_MENSEKI(2.0)
外部関数と違い、関数副プログラム内ではメインプログラム中で宣言された要素にアクセスすることができる(ただし、関数副プログラム内で同名要素が宣言されている場合を除く)。
4.2.3 文関数
計算内容が比較的単純で1行に収まる場合には文関数を利用する。
文関数の定義
文関数は以下のように定義する。宣言文と実行文の間に記述する。
文関数名(仮引数1,仮引数2,・・・)=式
■文関数名
関数名の付け方は通常の変数名と同じである。
■仮引数1,仮引数2,・・・
文関数を定義するための仮の引数。
■式
式中には仮引数、定数、変数、組み込み関数、定義済みの文関数などを用いることができる。
(例)円の面積を求める文関数
MENSEKI(HANKEI) = PI*HANKEI**2
文関数の引用
文関数は以下のように引用する。
文関数名(実引数1,実引数2,・・・)
(例)上で定義した関数を引用して半径2.0の円の面積を求める
S = MENSEKI(2.0)
当然であるが、引用の前には対象の文関数が定義され、利用される全ての変数の値が決定されている必要がある。