Fortran/基本のソースを表示
←
Fortran/基本
ナビゲーションに移動
検索に移動
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループに属する利用者のみが実行できます:
登録利用者
。
このページのソースの閲覧やコピーができます。
{{nav}} == Introduction == Fortranのプログラムはメインプログラムとモジュールで構成され、それぞれに[[Fortran/サブルーチンと関数|サブルーチンと関数]]を含めることができます。 プログラムの実行時に実行されるべきコードは、次のように<code>program</code>ブロックに入れます。 :<syntaxhighlight lang=fortran> program name_of_program ! <variable declarations> ... ! <program statements> ... end program </syntaxhighlight><!-- コメント部分を和訳しようとしましたが、日本語が通らないコンパイラの事を考慮して地の英語のままにしました。 --> インデントは必須ではありませんが推奨します。プログラム名はアルファベットで始まり、アルファベット、数字、アンダースコア( _ )を含むことができます。 各文は行の終わりで終了します。 プログラム名(上記コード例では name_of_program の部分)や変数名には Fortran の標準規格による文字数制限があり、Fortran 90以降は31文字<ref name="jtc1-sc22-wg5-n692-3.2.2">{{cite book | url = https://wg5-fortran.org/N1601-N1650/N1648.pdf | title = Fortran 90 -- ISO/IEC 1539 : 1991 (E) | page=18, §3.2.2 ''Names'' | quote = Constraint: The maximum length of a name is 31 characters. | publisher = IEC/ISO JTC1/SC22/WG5}}</ref>、Fortran 2003以降は63文字です<ref name="jtc1-sc22-wg5-n1648-3.14">{{cite book | url = https://wg5-fortran.org/N001-N1100/N692.pdf | title = ISO/IEC JTC1/SC22/WG5 N1648 The New Features of Fortran 2003 | page=23, §3.14 ''Lengths of names and statements'' | quote = Names of length up to 63 characters and statements of up to 256 lines are allowed. The main reason for the longer names and statements is to support the requirements of codes generated automatically. | publisher = IEC/ISO JTC1/SC22/WG5}}</ref>。 Fortran 90より前のFORTRAN 77などは 6 文字でしたが、Fortran 90より前は自由形式はまだありませんでした。 == 自由形式と固定形式 == FORTRAN 77の構文では、コマンドの前に6つのスペースを置く必要があります。この6つのスペースは、パンチカード版のFORTRANに由来するものです。最初の6つのスペースの後に、必要に応じてインデントのための追加のスペースを置くことができます。 ただし、行の幅は最大で72文字(最初の6つのスペースを含む)までとなっています。余分なスペースが必要な場合は、6列目に任意の文字(一部のコンパイラでは0を除く)を入れることができますが、これを「継続文字」と呼ばれ、パンチカードでは、2枚目のカードに行を続けることができることを意味します。 <syntaxhighlight lang="fortranfixed"> C2345678... PRINT *,"This is a really.... *...long line. </syntaxhighlight> 一部のコンパイラでは、「固定形式」モードではなく「自由形式」を指定することで、6スペースルールをオフにしたり、固定長の行をオフにしたりすることができます。 GNU Fortranコンパイラ(gfortran)を使用している場合、同じ目的のためにコンパイル時に ''-ffree-form'' コマンドラインオプションを使用することができます。 == コメント == 行に <code>!</code>(感嘆符)を入れると、その行の残りの部分は次のようにコメントになります。 :<syntaxhighlight lang=fortran> a = b ! this is a comment c = d ! this!! is also a comment </syntaxhighlight> 固定形式では、最初の列に <code>*</code> あるいは <code>c</code> を置くことで、一行全体をコメントとしてマークすることができます。 == 変数 == {{Main|[[Fortran/変数|変数]]}} 変数には、さまざまな種類やオプションがありますが、ここでは基本的なことを説明します。 :<syntaxhighlight lang=fortran> real :: a ! Decimal number. integer :: b ! Whole number. character :: c ! Single character. </syntaxhighlight> すべてのプログラム変数の明示的な宣言を強制することによるタイプミスを防ぐために、変数宣言よりも先に<code>implicit none</code>文を使用することをお勧めします。 == 数学演算子 == ; 加算、減算、乗算、除算:<syntaxhighlight lang=fortran> + - * / </syntaxhighlight> ; 代入 :<syntaxhighlight lang=fortran> = </syntaxhighlight> ; 累乗 : 2**4 は 2 の 4 乗 = 16 : <syntaxhighlight lang=fortran> ** </syntaxhighlight> 数学の演算子には、一定の優先順位があります。 <code>**</code> は常に最初に来ます、右から左への結合です。 :例) 2**3**2 = 512, 64ではありません。 次に、<code>*</code>(乗算)と <code>/</code> (除算)があります。これらは左から右への結合です。 :つまり、1.0/1.0/2.0*6.0 = ((1.0/1.0)/2.0)*6.0 = 3.0 であって、12.0 ではありません。 次の順番は、<code>+</code>(加算)と <code>-</code>(減算)です。これらは左から右への結合なので、x-y+z = (x-y)+z = x+(-y)+zとなります。 最後は、'''=''' [代入]です。 === 組込み関数 === Fortranには、<code>sin</code>、<code>exp</code>、<code>log</code>など、数値計算に便利な関数が豊富に用意されています。関数の引数は適切な型でなければならず、それは括弧で囲まれます。 :<syntaxhighlight lang=fortran> x = sin(3.14159) ! Sets x equal to sin(pi), which is zero. </syntaxhighlight> Fortranの数学関数は<code>elemental</code><ref>elementalは、Fortranのキーワードで、関数に配列が渡された時、要素毎に処理が行われます。関数自身はスカラを受け取りスカラを返す実装が求められます。</ref>であり、スカラだけでなく配列も引数に取り、スカラまたは同じ形の配列を返すことができます。 :<syntaxhighlight lang=fortran> real :: x(2), pi=3.14159 x = sin([pi, pi/2]) </syntaxhighlight> 上のコード片は、配列<code>x</code>の2つの要素、<code>x(1)</code>と<code>x(2)</code>を、それぞれ<code>sin(pi)</code>と<code>sin(pi/2)</code>に設定します。 == 比較演算子と論理演算子 == <code>if</code>文などでは、関係演算子の<math>=</math>、<math><</math>、<math>></math>、<math>\leq</math>、<math>\geq</math>、<math>\neq</math>をそれぞれ<code>.eq.</code>、<code>.lt.</code>、<code>.gt.</code>、<code>.le.</code>、<code>.ge.</code>、<code>.ne.</code>と表記することができます。これらの演算子の別の書き方は、それぞれ<code>==</code>、<code><</code>、<code>></code>、<code><=</code>、<code>>=</code>、<code>/=</code>となります。 また、論理演算子の<code>.and.</code>、<code>.or.</code>、<code>.not.</code>や、論理定数の<code>.true.</code>、<code>.false.</code>も使うことができます。 これらの項目を組み合わせる際には、ドットを二重にしてはいけません。例えば、<code>a .and. .not.b</code>は、<code>a.and.not.b</code>と同じですが、<code>a.and..not.b</code>ではありません。 == WRITE文 == {{Main|[[Fortran/テキスト入出力|テキスト入出力]]}} :<syntaxhighlight lang=fortran> write (*,*) "Hello World", variablename, "More text", anothervariable </syntaxhighlight> <code>(*,*)</code>は、デフォルトの出力をデフォルトのオプションで使用することを意味し、通常はprint to screenを使用します。 引用符で囲まれたものは、コード内での見た目通りに出力され、変数の値も出力されます。オブジェクトはカンマで区切らなければならず,write文はデフォルトで自動的に改行されます。 完全な正式な構文は以下の通りです。 :<syntaxhighlight lang=fortran> write (unit=unit_num, FMT=fmt_label, err=label) "Hello World", variablename, "More text", anothervariable </syntaxhighlight> なお、Fortranのバージョンによっては、ダブルクォートが使えず、シングルクォートが必要なものもあります。 シングルクォートで囲まれたものは、二重にすることで表現できます。 例えば、<code><nowiki>'don''t'</nowiki></code>のようになります。 <code>WRITE</code>または<code>READ</code>の最初の括弧付き引数は、ユニット番号です。 ユニット番号は、オペレーティングシステムによって決定された方法で、入力または出力ストリームに関連付けられます。 非常に古いシステムでは、ユニット・ナンバーはデバイス・アドレスです。 IBM JCLシステムでは、ユニット番号とファイルの関連付けは、JCLの<code>DD</code>ステートメント(Define data; データ定義)で行われます。 他のバージョンでは、ファイルとユニットを関連付ける何らかのステートメントがあります。 <code>UNIT=</code>タグは省略してもよい。 ユニット番号にアスタリスクが使われている場合、関係するI/Oは標準入力チャネル、または標準出力チャネルです <code>WRITE</code>または<code>READ</code>の2番目の括弧付きの引数は、レコード番号です この引数がある場合には、ユニット番号とシングルクォートで区切られることに注意してください。 この変数があると、どのレコード番号から読み込んだり書き込んだりするかを定義します。 例えば、以下のようになります。 :<syntaxhighlight lang=fortran> record_number = 5 write (2, record_number) x, y, z </syntaxhighlight> x, y, zをマシン固有のフォーマットにパックしてレコード番号5に書き込みます。 もちろん、この使い方をするには、OSやFortranコンパイラがレコードの構成を知っている必要があることに注意してください。 バイト編成のファイルでは、上記のコードはファイルのバイト番号5からx, y, zを書き込むことになります。 <code>WRITE</code>または<code>READ</code>の3番目の括弧付き引数は、フォーマット番号です この3番目の引数が上のようにアスタリスクとして存在する場合、フォーマットは明らかにデフォルトです。 もし、入力や出力のフォーマットに<code>FORMAT</code>文を使いたい場合は、<code>FORMAT</code>文のステートメント番号を入れます。 例えば、次のようになります。 :<syntaxhighlight lang=fortran> write (7,1) 'Hello, world!', i, 'More text', x 1 format (A,I,A,F) </syntaxhighlight> <code>format</code>文は、インライン文としては実行できないことに注意してください。 <code>read</code>や<code>write</code>で参照される場合にのみ使用されます。 <code>fmt=</code>タグは省略可能です。 また、引数全体を省略することもできます。 ただし、format引数を省略した場合は、マシン固有のパックされたデータを使って、フォーマットされていない状態でI/Oが実行されます。 <code>WRITE</code>または<code>READ</code>の最後の括弧付き引数は、エラー・ハンドラ・ステートメント・ラベルです 例えば、次のような場合 :<syntaxhighlight lang=fortran> write (5,err=2) x, y, z </syntaxhighlight> がコーディングされている場合、これは出力がユニット5にアンフォーマットされることを意味します。 エラーが発生した場合は、ステートメント2(ステートメントラベルの前に2がついているステートメント)で実行を継続します。 エラーが発生し、<code>ERR=</code>の引数がない場合は、プログラムが異常終了します。 このように、<code>ERR=</code>は、他の言語の<code>catch</code>に最も近いものです。 この最後の引数は完全に省略することができますが、<code>ERR=</code>は一度使った引数を省略することはできません。 == Example Code == {{Main|[[Fortran/コード例]]}} ;[https://onlinegdb.com/dnTk2g471 nearlyuseless]:<syntaxhighlight lang=fortran> program nearlyuseless implicit none real :: temperature integer :: cows temperature = 98.6 cows = 9 print *, "There are ", cows, " cows outside." print *, "You are probably ", temperature, " right now" end program </syntaxhighlight> ;実行結果:<syntaxhighlight lang="text"> There are 9 cows outside. You are probably 98.5999985 right now </syntaxhighlight> Fortranの一部のバージョン、または一部の設定では、フォーマット文字を使用します。 フォーマット文字が使われている場合、行の最初の文字がその行の印刷方法を決定します。 <code>1</code>は、新しいページを意味します。 <code>0</code>は、行の前に2ラインフィード(ダブルスペース)を意味します。 <code>-</code>は、行の前に3ラインフィード(トリプル・スペース)を意味します。 <code>+</code>は、行の前にラインフィードがない(オーバープリントする)ことを意味します。 そして、スペースは、行の前に1回のライン・フィードを意味します(通常の印刷)。 これは、同じプログラムを古風な形で、このフォームコントロール文字を使ったものです。 ;[https://onlinegdb.com/vrwu4-mMk oldfasshon]:<syntaxhighlight lang=fortran> temperature = 98.6 i_cows = 9 write (*,*) 'There are ', i_cows, ' cows outside.' write (*,*) 'You are probably ', temperature, ' right now.' end </syntaxhighlight> ;実行結果:<syntaxhighlight lang="text"> There are 9 cows outside. You are probably 98.5999985 right now. </syntaxhighlight> == 脚註 == <references />
このページで使用されているテンプレート:
テンプレート:Cite book
(
ソースを閲覧
)
テンプレート:Main
(
ソースを閲覧
)
テンプレート:Nav
(
ソースを閲覧
)
Fortran/基本
に戻る。
ナビゲーション メニュー
個人用ツール
ログイン
名前空間
ページ
議論
日本語
表示
閲覧
ソースを閲覧
履歴表示
その他
検索
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
特別ページ
ツール
リンク元
関連ページの更新状況
ページ情報