上のプログラムのkind=の部分は省略可能である。数値データの精度指定にもこのSPやDPを使う。倍精度の1.0サンプルプログラムを見てみよう。コンパイル&実行せよ。†double_precision_real.f95に現れる二つのkindパラメータSPとDPには実際にはどんな値が入っているか調べよ。†C言語の構造体とほとんど同じである。type構造体のメンバにアクセスするのに%を使う。構造体の入れ子も可能である。構造体の配列も可能である。構造体を構造体に代入(コピー)することも可能である。上のプログラムをtype.f90に保存し、コンパイル&実行せよ。stのデータをst2にコピーした上で、要素の一部(例えばage)を変更し、st2を出力せよ。†C言語では変数の宣言はブロックの先頭にまとめて置く。(C99やC++はもっと自由だが。Fortran90/95でも同じ。noneを省略すると「暗黙の型宣言」をしたことになる。始まる変数は整数である等のルールである。使わない方がいい機能なので詳細は知らなくて良いだろう。バグが入りやすいので、暗黙の型宣言は使わない方が良い。none宣言をすること。宣言したつもりのない変数を間違って使っていても気がつかない可能性がある。次のプログラムにはバグがある。上のプログラムをuse_implicit_nene.f95というファイルに書き込み、コンパイル&実行せよ。何事もないかのように正常終了する。それらしい答えを返す。noneと書いてから、コンパイルせよ。†C言語ではarray01[NX];が大きさNXの1次元配列である。array01[NX-1]と並んでいる。array01(NX)と並ぶ。配列のインデックスは1から始まる。全要素の和をとるFortran90/95プログラムを書け。厳密に言えばC言語には2次元配列はない。あるのは「配列の配列」である。二つの整数インデックスiとjを使ってarray02[j][i]という形でアクセスできるものである。array02をまるごと引数で受け取る関数がC言語では作れないことを考えれば納得出来るであろう。array02[1][NX-1]という順番で並ぶ。Fortran90/95ではarray02(i,j)という形でアクセスできる量は本物の2次元配列である。array02と宣言する。array02と宣言し、後ほど(実行時に)メモリをallocateする。array02(1,2),...に全ての要素(NX*NY個)が連続して並ぶ。メモリへのアクセス速度が極めて重要となるスーパーコンピューティングでは極めて重要である。†C言語ではarray03[k][j][i]が上の意味での「擬似」3次元配列である。array03とする。†if文はC言語とほとんど同じ。下の例を見れば一目瞭然であろう。actionともできる。else-if構文も簡単である。†これも下の例を見ればわかるであろう。上の関係演算子はそれぞれ下のようにも書ける。†bool変数はlogicalという型名を持ち、.true.か.false.の二つをとる。†C言語でいうfor文である。上のプログラムをdo_loop.f95に保存し、increment値(上の場合2)を自由に変えて実行せよ。整数のカウンターのないdo-loopも可能である。doこのままだと無限ループになるので、通常はある条件を満たせばループから抜け出すようにする。C言語だとbreak文でループから抜け出す。(正確には最も内側のループから抜け出す。Fortran90/95でbreakに相当するのはexitである。それに相当するのはFortran90/95ではcycleである。Fortran90/95プログラムの重要な構成部品である。関数の使い方は以下の例を見ればわかるであろう。次のプログラムをfunction01.f95として保存し、実行せよ。function01intent(in)は引数iが入力引数であり、関数next_intの内部で変更されることがないことを保証するものである。関数を以下のように内部副プログラムとしてメインの中に含むこともできる。次のプログラムをfunction02.f95として保存し、実行せよ。出力(返り値)が不要な場合も多い。Fortran90/95ではvoid関数をsubroutineと呼ぶ。subroutine名とする。†C言語は値渡し、Fortran90/95は参照渡しである。C言語が値渡しであることは、以下の例でkの値が変わっていないことから確認できる。k);}これと似たプログラム(同じではない)をFortran90/95で書くと以下のようになる。call_by_referenceこのプログラムではkの値はサブルーチンpassを読んだ後に変更されている。上の二つのプログラムをそれぞれcall_by_value.c、call_by_reference.f95という名前で保存し、実行せよ。値渡しに比べて参照渡しは値をコピーする必要がないので実行が速い。引数として渡した変数がそのサブルーチン内部で勝手に(誤って)変更されると見つけにくいバグになり、危険である。このような事故を防ぐためにFortran90/95には引数に入出力属性をつけることができる。コンパイラがエラーを出してくれる。†call_by_reference.f95を上のように変更してコンパイルせよ。入出力属性には以下の3種類がある。