|バグの混入を防ぐために、Fortran90/95プログラムでは&color(#ff0000){すべての引数に入出力属性をつける};ことを強く勧める。[#b53c56a3]C言語でいうswitch文である。selectC言語では普通breakが必要だがFortran90/95のcase文には不要である。[#zc592724]次のプログラムをcase.f95に保存し、実行せよ。[#y51b28ed]C言語では二つの文字列が等しいかどうかを判断するためにわざわざstrcmpを呼ぶ。case構文で以下のように簡単に場合分けできる。[#v9477cc5]上のプログラムをcase_string.f95というファイルに保存し、実行せよ。[#lac97977]ここでFortran90/95における文字列操作機能を紹介しておく。参考までにCでの同様な操作をコメントに書いておいた。[#nf3b66e0]まずはC言語版を見る。}同じことをFortran90/95で「丁寧に」書けばこうなる。array01普通はこう書く。constantsは同じなのでmainプログラムだけ示す。}Fortran90/95ではこうなる。「丁寧に」書いた方法をコメントで示した。[#wf0e786a]割り算でも同じである。[#m4955b1f]Fortran90/95には数学関係の豊富な組み込み関数が用意されている。それらの引数に配列を渡すと配列の全要素についてその関数を適用してくれる。}というプログラムは、Fortran90/95では下のようになる。[#m6700310]そろそろFortran90/95にも慣れてきたと思うので、C言語との比較ではなく、Fortran90/95言語で説明する((ブートストラップ解説とでも言うべきか。いうプログラムは、コロンを使えば次のように簡潔に記述できる。arrya02d(:,:)と書ける。B(6:15)と書ける。B(111:115,121:130),などと書ける。両辺の配列の各次元のサイズが一致している必要がある。「配列を受け取って配列を返す」関数を自分で定義することができる。下に示すのは結構本格的なプログラムである。乱数を生成する組み込み関数(サブルーチン)random_numberをcallしている。dot_product(v1,v2)と書ける。doといった計算を一度にやってくれる便利な関数である。行列かけるベクトルなどと書ける。ubound(a,dim=2)は20を返す。size(a,dim=1)は8である。[#i1657563]サイズが不定の配列aは以下のようにallocatableをつけて宣言する。allocate(a(10,20))などとallocate文を使ってメモリに確保する。deallocate(a)とする。[#l1f38380]実行時に配列サイズが決まる3次元配列をサブルーチンと関数に渡すサンプルプログラムを下に示す。kageとしてその実行結果を送信せよ。("scalar"でのみ有効。[#z1d7aee6]上のarray_subroutine.f95プログラム中のサブルーチンshiftは「配列aの全要素の平均値がゼロとなるように配列aを変更する」という機能を持っている。実行結果の3つをレポートにまとめて次回の演習時に提出せよ。reportルーチンの出力は外さないこと。averageルーチンの出力は外しても良い。[#i726de10]これで全2回の「Fortran90/95入門」は終わりです。