Fortran 文法入門
* プログラムとは何だろうか ?
プログラムは, 仕事の作業手順書だ。
- コンピュータは, 指示されていないことはしない
- コンピュータに手順を細かく指示しなければいけない
* 具体的にはどうすればいいのか
- エディタでファイル (ソースファイル) を作成
- コンパイラで実行形式に翻訳 (コンパイル) --- エラーの場合: Warning, Fatal error
- 実行 --- 結果は意図した通りか ?: Runtime error, 意図した結果でない
- デバッグ
- 保守・改造
* プログラム作成一般に共通的なお約束
- 人間が読んでもわかりやすいように書く
- 保守・修正をしやすいように書く
読みやすいプログラムを書くために ......
- 変数名・関数名・サブルーチン名 は, 意味のあるわかりやすい言葉にする
(ただし古い FORTRAN は六文字に制限されてるけど)
- 論理構造を反映して, 適宜字下げやグループ化する
* Fortran に固有なお約束
+ Fortran は行指向の言語である。
- 一桁目が C または * ならばその行はコメント行となる。
- 一桁目から五桁目までは文番号を書く場所。必要に応じて
五桁以内の文番号を書く。
- 六桁目は継続行の印を書く桁。
もし六桁目に印字可能文字が書いてあれば, その行は前の行の続きで
ひとつながりの実行文になる。
- 七桁目から七十二桁目までが Fortran の実行文を書く場所。
- 七十三桁目以降に書いてある文字は無視され, 実行されない。
+ プログラム単位
- 主プログラム: program --- end program
- 関数副プログラム・サブルーチン副プログラム: subroutine, function
- 初期値設定: block data
+ 使える文字
英数字と少数の記号だけが使える。英文字で大文字と小文字の区別はない。
+ 空白は無視される
うっかり
do i = 1. 10
と書くと, 変数 doi に数値 1.10 を代入する意味になる。
* Fortran プログラムの構成要素
- 入出力
- 変数
- 式
- 実行順の制御
- 副プログラム
- その他 (宣言など)
* 入出力
- read 文, write 文
- format 文 (あとで)
* 変数
変数の型
- 整数, integer
- (単精度) 実数, real
- 倍精度実数, double precision
- 複素数, complex
- 文字, character*n
注意点
暗黙の型宣言には従わない, 全ての変数は明示的に型宣言する。
* 配列
配列とは同じ型の変数をひとまとめにしてインデックスで参照できるようにした
ひとまとまりのデータのこと。
変数名の後に丸カッコでくくった数値を書き, 値を参照する。
配列を利用するときには, あらかじめ配列の大きさ (要素数) を
宣言しておかなければいけない。
例
integer a(5), b
dimension b(20)
a(1) = 40
write(*, *) a(3)
* 計算式
- 算術式: 四則演算 (加減乗除), 巾乗
- 組み込み関数: 平方根・指数関数・自然対数・常用対数・三角関数
などの算術初等関数
- = は代入操作を意味する (等号ではない)。
Fortran で数値計算のためのプログラムを
作成するという事は,
「どういう順番で何をどう計算するか」ということを記述することにつきる。
* 制御構造
- 逐次・順次実行
- 条件分枝 (IF 文)
- 繰り返し (DO loop)
- 繰り返し (WHILE loop)
* 条件分枝
+ IF ... THEN ... (ELSE IF ...) (ELSE ...) END IF 構文
例
if (x .gt. 10) then
AAA
else
BBB
end if
+ 論理 IF 文
例
if (x .eq. 2) a = 1
if (y .lt. 4) goto 100
+ 算術 if 文
Fortran 90 までは互換性のために存在するが, プログラムの論理構造が
わかりにくいため, 利用は奨められない。
Fortran 95 では廃止された。
例
if (x) 10, 20, 30
* 繰り返し (DO loop)
繰り返しの回数がわかっている/決まっている場合。
例
x = 0
do i = 1, 10
x = x + i
end do
* 繰り返し (WHILE loop)
ある条件が満たされている間だけ繰り返す。
例
x = 0
i = 1
do while (i .le. 10)
x = x + i
i = i + 1
end do
* 関数
例
program main
a = add(b, c)
x = add(y, z)
stop
end
function add(p, q)
add = p + q
return
end
* サブルーチン
例
program main
call addsub(a, b, c)
call addsub(x, y, z)
stop
end
subroutine addsub(p, q, r)
p = q + r
return
end
* Format 文
Format 文とは, 入出力の書式を制御する文。
データ (数値または文字列) が与えられたときに, それがいったい
どんな種類のデータなのか, それをどう表記するのかを指示する。
例
write(*, 100) i, a, b1, b2
100 format(1x, i3, f8.6, 2e12.6)
[繰り返し数][形式を表わす文字][桁数]
入出力書式の編集子 (一部)
--------------------
X 空文字送り
A 文字列
I 整数
F 実数
E 指数表記の実数
--------------------
rmiya@stu.hirosaki-u.ac.jp