最初の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