1.プログラムの基本構成 目次へ 1.1. 使用文字 1.2. コーディング形式 1.2.1. 固定形式 1.2.2. 自由形式 [90] 1.2.3. ファイル識別名 1.3. プログラムの構成 1.3.1. プログラム単位 1.3.2. 文の順序 1.3.3. 英字名 1.3.4. 文番号とラベル 1.3.5. 定数 1.1. 使用文字 アルファベット A-Z ...文字定数内以外では大小文字は区別しない。 数字 0-9 下線 _ [90] 特殊記号 空白 = + - * / ( ) , . ' :" ! % & ; < > ? $ システムによっては,文字定数や注釈中には2バイト日本語文字も許されるが,文字 列の長さの計算に注意が必要である。 1.2. コーディング形式 プログラムは以下の2通りの書き方の規則があり,それ以外には自由に書いてよい。 自由形式の方が入力ミスが少ないだろう。Fortran90では文番号を使用せずにプログラ ムを書けるように文法が拡張されたため,自由形式を用いることにより流れを読みやす いプログラムを書くことができる。しかし,77では固定形式しか用意されていないた め,77で書かれたサブルーチンライブラリをソースレベルで結合したいような場合に は,本体を固定形式で書いておかねばならない。 1.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 は同じ。 1.2.2 自由形式 [90] 行 :132桁以内。セミコロン「;」で区切れば1行に複数の文が書ける。 注釈行 :先頭に「!」のついた行。行の途中で「!」が書かれた場合,以下 は注釈となる。(文字定数の中の!記号は除く。) 継続行 :文の最後に「 & 」記号がつくと,文は次行へ継続となる。 文字定数が2行以上にわたる場合などで継続行の先頭位置を明示したい ときには,先頭位置にも「 & 」を書く。 これ以外は,文の途中の 「 & 」は単なる & 文字とみなされる。 空白 :一つのステートメントや変数の途中に空白を入れてはならない。また, 空白の必要なところには必ず空白を一つ以上入れる。ただし,GOTO と GO TO や,ELSEIF と ELSE IF のように,2通りの書き方ができるもの もある。 例 関係演算子 == や <= を, = =, < = と書くと誤りとなる。 1.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 =============================================================================== * 注)以下の文法記述では,省略可能なオプション指定やパラメータを,[ ]で囲ん * * で表してあるが,実際のプログラムでは[ ]を付ける必要はない。また,文法やプ * * ログラム例では,原則としてシステムキーワードには大文字,ユーザ作成の変数名 * * などには小文字が用いてある。 * =============================================================================== 1.3. プログラムの構成 1.3.1. プログラム単位 主プログラム [PROGRAM プログラム名] ← 文そのものが省略可能 ..... ..... END [PROGRAM [プログラム名]] ← END は必須 副プログラム(→8章) 手続き サブルーチン副プログラム 関数副プログラム モジュール [90] 内部手続き(→8章) [90] 一つのプログラム単位(主プログラムまたは副プログラム)の中に,CONTAINS文で 区切ることにより副プログラムを含めることができる。この場合,変数名の有効範囲が 上位プログラム単位から引き継がれるので,簡単な副プログラムは内部手続きにすると 便利である。 1.3.2. 文の順序 プログラム単位中では文の種類によって書く順序が決められており,およそ以下の とおりである。 PROGRAM文,SUBROUTINE文,FUNCTION文 等のプログラム単位開始文 宣言文 文関数定義文 実行文, DATA文, FORMAT文 CONTAINS文 (内部副プログラム) END文(必須) 注釈行: END文の前ならどこに書いてもよい。 1.3.3. 英字名 変数名やプログラム名などに使われる英字名は,31文字以下の「英字,下線,数字」 で構成し,先頭は英字でなければならない。 [77]では6字以下で,下線は含まない。 英字名の有効範囲は,原則として一つのプログラム単位内である。 注)FORTRANで約束されているキーワード(DO,MAX,SUM など)と同じ名前を付けて もよい。キーワードが英字名として使われても,使われる位置によって区別され る。また,関数名は組込み関数と同じ名前を付けてもプログラマが定義した方が 優先される。したがって,約束されているキーワードを全て覚えていなくても不 都合は生じない。しかし,わかりやすいプログラムにするためには,可能な限り 避ける方が無難である。 1.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 1.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では内部表現が全く異なる。 =============================================================================== ⇒1章先頭へ ⇒2章へ