コンテンツにスキップ

Fortran/よくある質問

出典: フリー教科書『ウィキブックス(Wikibooks)』

この記事には、Fortranに関するいくつかのよくある質問(FAQ)とその回答が含まれています。

Q. Fortranを学ぶべきですか?時代遅れですか?

[編集]

A: Fortranは時代遅れではなく、近いうちにそうなることはありません。Fortranは汎用のプログラミング言語であり、多くのアプリケーションに適しています。ただし、数値計算やハイパフォーマンスコンピューティングに優れています。高速で、移植性があり、配列の処理がシームレスです。そのため、数値アルゴリズム用の高品質なFortranライブラリが多数存在し、科学コミュニティ(例:数値気象予測)で広く使用されています。言語自体はまだメンテナンスされ、定期的に最新の機能が追加されています。最新バージョンはFortran 2023, ISO/IEC 1539:2023です。

Q: どのFortranコンパイラを使用すべきですか?

[編集]

A: Oracle Solaris Studio、GNU Fortran、G95、およびSilverfrost(Windowsのみ)は無料のソフトウェアFortran 95コンパイラです。また、Absoft、IBM、Intel、Lahey、NAG、Pathscale、およびPGIはFortranコンパイラを販売しています。Fortranコンパイラの比較情報は、Wikipediaで入手できます。

Q: out_01.txt、out_02.txtなどの番号付きファイル名をどのように作成しますか?

[編集]

A: "内部書き込み"を使用してファイル名を作成します。たとえば、次のようにします。

write (file_name,"('out_',i2.2,'.txt')") i

A: よりきれいな方法は次のとおりです。

i=<file number>
WRITE(file_name, fmt = '(A4,I0,A4)')'out_',i,'.txt'

こうすることで、書式設定が明確になり、変数に正しい文字列が書き込まれます。おそらく、数値が必要なのだと思います。 'I'フォーマットステートメントでは、整数長または一部の場合にはゼロが必要です。十進点は考慮すべき小数点数を示します。

Q: このテクニックを使用したopenステートメントはどのように見えますか? OPEN(UNIT = __、FILE = ???、STATUS='NEW')?

[編集]

A: Gfortranはこのブロックを受け付けません。

      write(file_name,'cp',(i5.5),'.out') ITN
      open  (67,file = file_name)

エラー、ファイルタグはCHARACTER型である必要があります。

他の人がこれをサポートできますか?

A: 上記の回答を参照してください。基本的に、変数file_nameを書き込む方法が間違っています。

WRITE(file_name,fmt='(A2,I0,A4)')'cp',ITN,'.out'
OPEN(UNIT=67, file=file_name, status='new')

ITNが整数として宣言され、値が与えられていることを前提としています。

Q: 文字列を整数やその他の型に変換するにはどうすればよいですか?逆にはどうですか?

[編集]

A: "内部読み取り"または "内部書き込み"を使用します。実際には、文字列変数をファイル名として使用し、I/Oリストを読み取ったり書き込んだりします。次のようにして変換します。

文字列から他の型に変換するには、

   read (character_variable, format) list of variables

と書き、他の型から文字列に変換するには、

   write (character_variable, format) list of variables

と書きます。次のプログラムで示されるように、デモンストレーションされています。

program xconvert_integer_string   
character(20) :: cnum 
integer       :: i 
i = 445 
write(cnum,'(i5)') i 
write(*,'(a)') trim(cnum) ! should output "  445" 
write(cnum,'(i5.5)') i 
write(*,'(a)') trim(cnum) ! should output "00445" 
i = 34 
write(cnum,'(i0)') i 
write(*,'(a)') trim(cnum) ! should output "34" 
end program xconvert_integer_string

この回答は、Paul van DelstとDick Hendricksonによるcomp.lang.fortranのメッセージに基づいています。

Q. Fortranプログラム内でオペレーティングシステムにコマンドを発行するにはどうすればよいですか?

[編集]

A. Fortran 2008標準では、システムコールを行うためのexecute_command_line内部手続きが提供されています。以前のバージョンでは、システムコールを行う標準的な方法はありませんが、多くのコンパイラには「system」または類似の拡張機能があります。コンパイラのドキュメントを参照してください。Fortran 2003では、Cコードを呼び出すことができ、Cからオペレーティングシステムを呼び出すことが可能です。