変数は,プログラム実行中になんらかの値を格納しておく場所のことである.ユーザが自由に名前をつけられるが,名前には一応制限もある.
変数は,すべて「型」を持つ.Fortranの場合の代表的な型を並べてみよう.
型名 | 意味 |
---|---|
INTEGER |
整数 |
REAL |
実数 |
REAL(8) |
8バイト(高精度)実数 |
CHARACTER |
文字列 |
LOGICAL |
論理型 |
「整数」型の変数に実数を代入しても,勝手に小数点以下が丸められてしまうかそもそも代入ができない.
すべての変数は,プログラムやサブルーチン(後述)の冒頭で「宣言」されなければならない. 実は厳密なことをいうとFortranの場合はそうではないが,宣言なしで変数を使うのはバグの温床になってしまうので,かならず宣言しよう.
前回出てきた,implicit none
というおまじないは,「宣言なしで変数を使われている変数があったらエラーをだせ」という指示なのである.
変数はその値を,print
文で書き出すことができる.宣言の方法とあわせて,例示しよう.ex3.f90をこう作る.
実行結果
宣言は,プログラムの冒頭で「型名::変数名(,変数名...)の形で行なう.ただし,FORTRAN77流の宣言方式もあって,それは「型名 変数名...」となる
CHARACTER
型においては,その最大長さをカッコの中で指定する.
各変数や定数は,直感的な記号を使って加減乗除や剰余などの演算ができる.ただひとつわかりにくいのが文字列の結合で,これは「//
」を使う.
また,累乗については「**」を用いて「x ** 2.0
」のように書く.「実数の実数乗」ができる.
なお,上記で文字列の結合を行なうとき,素直に「name=name1 // name2
」としていないのはなぜかというと,name1は「30文字の文字列」と宣言されているので,としたとき,後ろに余計なスペースが入ってしまう.それを「切り落とし」て,残りの有効な文字だけの文字列に変換するのが
trim()
という組み込み関数なのである.関数については後に説明する.
READ
文を用いて,ユーザからの(正確にはstdinからの)インプットを変数に読み込むことができる.下記はユーザの入力した値を二乗した値を表示するプログラムである.
実行結果例
% ./a.out input number : 7 square is : 49
プログラム言語に欠かせないのがこのIFという概念.まずは実例を見てみよう.ユーザが入力した年がうるう年かそうでないか表示するプログラムである.
このように
if文のカッコの中に入る演算子は次のとおり.
記号 | 意味 |
---|---|
== | = |
/= | ≠ |
< | < |
> | > |
<= | ≦ |
>= | ≧ |
.AND. | かつ |
.OR. | または |
ifは上記のように入れ子にできる.また,対応するif,else,endifがわかりやすいように,上記のように行の頭を下げる(インデント)といい.ただしこのインデントがズレると悲惨なことになる.emacs(mule)は自動的にインデントをそろえてくれる.