プログラムの基本構成
1.使用文字
アルファベット A-Z ...文字定数内以外では大小文字は区別しない。
数字 0-9
下線 _ [90]
特殊記号 空白 = + - * / ( ) , . ' :" ! % & ; < > ? $
システムによっては,文字定数や注釈中には2バイト日本語文字も許されるが,
文字
列の長さの計算に注意が必要である。
2.コーディング
形式
プロ
グラムは以下の2通りの書き方の規則があり,それ以外には自由に書いてよい。
自由形
式の方が入力ミスが少ないだろう。Fortran90では文番号を使用せずにプログラ
ムを書
けるように文法が拡張されたため,自由形式を用いることにより流れを読みやす
いプロ
グラムを書くことができる。しかし,77では固定形式しか用意されていないた
め 77で
書かれたサブルーチンライブラリをソースレベルで結合したいような場合に
は,本
体を固定形式で書いておかねばならない。
2.1. 固定形式
行 :72桁以内。1行には一つの文しか書けない。
1〜5桁:文番号を書く。
6桁目 :必要なら継続行の印を書く。
7〜72桁:文を書く。
注釈行 :1桁目に文字「C」または「*」印がついた行
継続行 :文が2行以上にまたがる場合,2行目からは6桁目に任意の文
字(数字,
記号を含む)を書いて,上の文に続くことを表す。
空白 :一つのキーワードや変数の途中に空白があってもよい。
例 READ*,XY と R E A D *, X Y や,
END
と E N D は同じ。
2.2 自由形式 [90]
行 :132桁以内。セミコロン「;」で区切れば1行に複数の文が書け る。
注釈行 :先頭に「!」のついた行。行の途中で「!」が書かれた場合,以
下
は注釈となる。(文字定数の中の!記号は除く。)
継続行 :文の最後に「 & 」記号がつくと,文は次行へ継続となる。
文字定数が2行以上にわたる場合などで継続行の先頭位置を
明示したい
ときには,先頭位置にも「 & 」を書く。 これ以外は,
文の途中の
「 & 」は単なる & 文字とみなされる。
空白 :一つのステートメントや変数の途中に空白を入れてはならな
い。また,
空白の必要なところには必ず空白を一つ以上入れる。ただ
し,GOTO
と
GO TO や,ELSEIF と ELSE IF のように,2通りの書き方が
できるもの
もある。
例 関係演算子 == や <= を, = =, <
= と書くと誤りとなる。
2.3. ファイル識別名
この二つのコーディング形式はコンパイル時にオプション指定して区別す
るが,ソー
スプログラムのファイル識別子を以下のようにすることでデフォルト解釈さ
れる:
固定形式プログラム: .for (注:UNIX系では .f )
自由形式プログラム: .f90
例 fixed.for(固定形式)
C-----CALCULATING 99
INTEGER i, j
DO 100 i=1,
9
DO 100 j=1,
9
PRINT *, i, j, i*j
100 CONTINUE
E
N
D
例 free.f90(自由形式)
! --- Free Coding Format
PROGRAM Factorial
INTEGER :: i,
f=1
! Initializing as f=1
DO i = 1, 10
f = f * i
;
PRINT *, i, '! =', f
END DO
END PROGRAM Factorial
===============================================================================
* 注)以下の文法記述では,省略可能なオプション指定やパラメータを,[
]で囲ん
*
* で表してあるが,実際のプログラムでは[ ]を付ける必要はない。
また,文法やプ
*
* ログラム例では,原則としてシステムキーワードには大文字,ユー
ザ作成の変数名
*
* などには小文字が用いてある。
*
===============================================================================
3. プログラムの構成
3.1. プログラム単位
主プログラム
[PROGRAM プログラム名
]
← 文そのものが省略可能
.....
.....
END [PROGRAM [プログラム名
]]
← END は必須
副プログラム
手続き サブルーチン副プログラム
関数副プログラム
モジュール
[90]
内部手続き [90]
一つのプログラム単位(主プログラムまたは副プログラム)の中に,
CONTAINS文で
区切ることにより副プログラムを含めることができる。この場合,変数名の
有効範囲が
上位プログラム単位から引き継がれるので,簡単な副プログラムは内部手続
きにすると
便利である。
3.2. 文の順序
プログラム単位中では文の種類によって書く順序が決められており,およ
そ以下の
とおりである。
PROGRAM文,SUBROUTINE文,FUNCTION文 等のプログラム単位開始文
宣言文
文関数定義文
実行文, DATA文, FORMAT文
CONTAINS文
(内部副プログラム)
END文(必須)
注釈行: END文の前ならどこに書いてもよい。
3.3. 英字名
変数名やプログラム名などに使われる英字名は,31文字以下の「英字,下
線,数字」
で構成し,先頭は英字でなければならない。 [77]では6字以下で,下線は
含まない。
英字名の有効範囲は,原則として一つのプログラム単位内である。
注)FORTRANで約束されているキーワード(DO,MAX,SUM など)と同じ名
前を付けて
もよい。キーワードが英字名として使わ
れても,使われる位置によって区別され
る。また,関数名は組込み関数と同じ名
前を付けてもプログラマが定義した方が
優先される。したがって,約束されてい
るキーワードを全て覚えていなくても不
都合は生じない。しかし,わかりやすい
プログラムにするためには,可能な限り
避ける方が無難である。
3.4. 文番号とラベル
文には先頭に番号やラベルをつけて,行先指定などに用いることができ
る。有効範囲
は一つのプログラム単位内である。
文番号 5桁以下の10進整数
ラベル 英字名で,うしろに:(コロン)を付ける。 [90]
例1
DO 10 k = 1,
100
...
...
10
CONTINUE
注)整数変数で行き先の文番号を指定することはできない。
n = 10
GOTO n
は不可。
例2 [90]
DO k = 1, 100
int: DO
....
END DO int ! ラベルを付けた以上ラベル名を省略できない。
END DO
3.5. 定数
整定数 デフォルトは4バイト(他に1,2,8バイト)
普通,2の補数表現(*)が採用されるため,-2147483648 から
2147483647
まで。コンマや小数点を含めてはならない。
例 12345678 -256 (1,000,000 や
125.
は誤り)
1234567890123_8 (8バイト整数) [90]
912345678901_k(kは精度を定義したパラメタ→「型宣
言」)
[90]
実定数 デフォルトでは普通,4バイト(他に8バイトもあり)
小数点を持つ
数で,有効数字はおよそ7桁。絶対値の範囲は処理系と
精度型(単精
度,倍精度など)によって異なる。
小数形式: 3.141592 -0.125
3.0
-2. など
3.14159265358979_8 (8バイト実数)
[90]
2.7182818_p (p は精度を定義したパラメタ→「型
宣言」
[90]
指数形式: 7.8E-12 -0.125E5 (それぞれ10の-12乗,5
乗を表す)
0.125D+45(倍精度,8バイト)
複素定数 デフォルトは2×4バイト(他に2×8バイト)
実部と虚部をカッコで囲んで表す:
(実定数,実定数)
論理定数 4バイト(他に1バイト)
.TRUE.(真) と .FALSE.(偽)
文字定数 1文字が1バイト(漢字系は2バイト)
' 'で囲んだ文字列 ('自身を含めるときには''と
二つ連続させる)
" "で囲んだ文字列 [90]
例 "I'm a boy." (長さ10の文字列)
'I''m a boy.' ( 同上 ) 注:スペースも1文字
注)数値型のデフォルト精度や用意されている種類は,処理系によ って異なる。
配列定数 これは型の一種ではないが,同じ型の定数を要素とする1次元
配列を,
以下のように表す: [90]
(/定数,定数,...,定数/)
===============================================================================
「補数表現」 負の整数 -N は,「N を足せば2の32乗(=4バイト
表現では0)」に
なるように表現する。したがって第1ビットが1の数は負の数であ
る。
-1=11111111 11111111 11111111 11111111
-2=11111111 11111111 11111111 11111110
10000000 00000000 00000000
00000000
= -(2の31乗)=-2147483648
01111111 11111111 11111111
11111111
= 2の31乗-1=2147483647
この整数の表現法はどのシステムでも共通しているが,実数の内部表現は
システムに
より異なる。また,例えば整数の2と実数の2.0では内部表現が全く
異なる。