最初のCALL文では、キーボードから入力された、外径(A)と内径(B)、長さ (L1)、密度(G1)を使って、体積(V)と質量(W)を計算しています。
2番目のCALL文では、直接サブルーチンに値を与えています。すなわち、外径 を8.0、内径を6.0、長さを350.0、密度を7.8として、体積(V)と質量(W)を計算 しています。
*=======================================================
* MAIN ROUTINE
*=======================================================
PROGRAM MAIN
REAL A, B, L1, G1, V, W
READ(5,*)A, B, L1, G1
CALL PIPE(A, B, L1, G1, V, W)
WRITE(6,600)V,W
CALL PIPE(8.0, 6.0, 350.0, 7.8, V, W)
WRITE(6, 600)V,W
600 FORMAT('V=',E15.8, ' W=', E15.8)
STOP
END
*=======================================================
* SUBROUTINE OF PIPE CALCULATION
*=======================================================
SUBROUTINE PIPE(X, Y, L, G, V, W)
REAL X, Y, L, G, V, W
V=3.14159/4.0*(X*X-Y*Y)*L
W=V*G
RETURN
END
このプログラムをサブルーチン副プログラムを使わないで書くと、以下のよう になります。分かりにくいし、パイプの断面が、円から、正方形に変更になっ た場合、同じような部分を2箇所書き直す必要があります。それに比べて、サ ブルーチン副プログラムだと、サブルーチン内を書き直すことで済みます。こ れは、プログラマーの労力を格段に減らすことができます。
PROGRAM PIPECAL
REAL A, B, L1, G1, V, W
READ(5,*)A, B, L1, G1
V=3.14159/4.0*(X*X-Y*Y)
W=V*G
WRITE(6,600)V,W
CALL PIPE(8.0, 6.0, 350.0, 7.8, V, W)
V=3.14159/4.0*(8.0*8.0-6.0*6.0)*350.0
W=V*7.8
WRITE(6, 600)V,W
600 FORMAT('V=',E15.8, ' W=', E15.8)
STOP
END
CALL サブルーチン名(実引数並び)
仮引数並びと実引数並びは、同じ数で型でなくてはなりません。ただし、引数 の変数名は異なっても、何ら問題はありません。関数の処理の部分は、今まで 学習してきたFORTRANのプログラムを書けばよいのです。計算のみならず、 WRITE文やREAD文も書けます。
サブルーチン副プログラム内で使われた変数は、引数以外は全く、メインルー チンに影響を及ぼしません。メインルーチンと同じ名前の変数が使われていて も、その結果が反映されることはありません。
SUBROUTINE サブルーチン名(仮引数並び)
宣言文
実行文(関数の値を求めるための処理)
RETURN
END