同じような処理を何度も繰り返したい場合はdo文を使います。
この記事ではdo文について説明します。
記事の最後にサンプルプログラムを掲載しています。
do文の記述ルール
do文の基本形は以下のとおりです。変数が初期値から最終値まで処理1が繰り返し実行されます。使用できる変数の型は、整数型(integer)です。刻み幅は省略可能です。
do 変数 = 初期値, 最終値, [刻み幅]
__処理1
end do
以下のように、 do文の中にdo文を入れることもできます。
do 変数1 = 初期値, 最終値, [刻み幅]
__do 変数2 = 初期値, 最終値, [刻み幅]
____処理1
__end do
end do
以下のように、 exit を使うことで、条件1が満たされた場合に、doループを抜けることができます。
do 変数 = 初期値, 最終値, [刻み幅]
__if (条件1) exit
__処理1
end do
以下のように、 cycle を使うことで、条件1が満たされた場合に、cycle以下に書かれた処理をスキップすることができます。以下の例では、処理1は常に実行され、処理2は条件1が満たされた場合はスキップされます。
do 変数 = 初期値, 最終値, [刻み幅]
__処理1
__if (条件1) cycle
__処理2
end do
以下のように記述した場合、条件1が満たされるまで、無限に繰り返しが実行されます。条件1が適切でない場合、プログラムが止まらなくなってしまうので、注意して下さいね。プログラムが止まらない場合は、Ctrl + C で強制終了できます。
do
__if (条件1) exit
__処理1
end do
do文のちょっとしたtips
tipsを以下に列挙します。読みやすいプログラムや、速いプログラムを書くときに役に立つと思うので、頭の片隅に置いておいて下さいね。
・アルゴリズムを工夫して、do文の中の演算を減らしましょう。特に、掛け算、割り算、if文を減らすとgoodです。
・Fortran77の時代はgoto文でループを抜ける等の処理を行っていましたが、プログラムの可読性を上げるために、 exit や cycle を使いましょう。
・可読性を落とさない範囲で、多重ループを減らしましょう。最適化や並列化によって高い計算速度が得られる場合があります。
サンプルプログラム
サンプルプログラムを下記します。4-5行目は変数の型宣言、7-8行目は変数に初期値を代入、10-14行目は基本的なdo文のデストで、1~10までの和を計算しています。また、16-21行目は exit のテスト、23-29行目は cycle のテストです。
以下のFortranプログラムをコピペし、****.f90の名前で保存して下さい(****の部分は適当でいいです)。コピペが面倒な場合は、こちらからダウンロードして下さい(右クリックメニューから保存)。→ sample07.f90
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | program sample07 implicit none !-------------------------------------------------------------------- integer :: i, m, n real(8) :: x !-------------------------------------------------------------------- m = 10 n = 5 x = 0.0d0 do i = 1, m x = x + dble(i) end do write(*,'(a,f5.1)') 'x = ', x x = 0.0d0 do i = 1, m if (i > n) exit x = x + dble(i) end do write(*,'(a,f5.1)') 'x = ', x x = 0.0d0 do i = 1, m x = x + dble(i) if (i > n) cycle x = x + dble(i) end do write(*,'(a,f5.1)') 'x = ', x !-------------------------------------------------------------------- end program sample07 |
使い方は、前記事と同様に、****.f90を以下の****.batにドラッグ&ドロップするだけです。
64bit用 → comp_exe_64.bat
32bit用 → comp_exe_32.bat
こんな画面が出たでしょうか?出ていれば正常終了です。7-8行目の値を変えて、色々試してみて下さい。
→ 次の記事へ(配列(1)-基本操作)
← 前の記事へ(条件分岐(case))
目次(Fortran90)