[itbase2020]Fortran 実習 条件分岐

プログラムでは, 条件によって処理の内容を変えることが良くあります. Fortran ではこの条件分岐の方法がいくつか提供されていますが, ここでは最も基本的な方法である if 文について説明します.

if 文

if 文は例えば下のようにのように書きます.

if ( 条件文 ) then

  実行文 1

else

  実行文 2

end if

このプログラムは, まず条件文が評価され, それが成り立つときには 実行文 1 が実行されます. もし条件文が成り立たない場合には実行文 2 のみが実行されます.

下のようなプログラムを ifelse.f90 というファイル名で作成して 実行してみましょう.

program ifelse

  implicit none

  real :: val

  write( 6, * ) "Input a number: "      ! 数値の入力を促す
  read ( 5, * ) val                     ! キーボードから数値を入力

  if ( val > 0 ) then
    ! 数値が正の時の処理
    write( 6, * ) "Positive"

  else
    ! それ以外の時の処理
    write( 6, * ) "Zero or Negative"

  end if

end program ifelse

入力を促されたときには正の数値や負の数値を入力して動作を確認してみましょう.

上の例では, キーボードから数値を入力すると, その数値が 正なのかそうでないのかによって画面に表示される文字が変わります.

なお, else 文は必ず必要なわけではなく, なくても構いません. つまり, if 文は下のような構造でも問題ありません.

if ( val > 0 ) then
  ! 数値が正の時の処理
  write( 6, * ) "Positive"

end if

また, if 文は, 下のように複数を重ねることもできます.

if ( 条件文 1 ) then

  実行文 1

else if ( 条件文 2 ) then

  実行文 2

else if ( 条件文 3 ) then

  実行文 3

else

  実行文 4

end if

また, if 文は, 下のように入れ子にすることもできます.

if ( 条件文 1 ) then

  実行文 1

  if ( 条件文 2 ) then

    実行文 2

  else

    実行文 3

  end if

else

  実行文 4

end if

比較演算子・論理演算子

条件文に使える比較演算子や論理演算子には下のようなものがあります.

演算子旧来の書き方意味使用例
==.eq.等しいa == b
/=.ne.等しくないa /= b
>.gt.より大きいa > b
>=.ge.以上a >= b
<.lt.より小さいa < b
<=.le.以下a <= b
.not.以外 (否定).not. (a==b)
.and.かつ(a==b).and.(c==d)
.or.もしくは(a==b).or.(c==d)

練習問題 1

上に示したプログラム ifelse.f90 を変更して, 正の値の時には "Positive" と表示し, ゼロの時には "Zero" と表示し, 負の値の時には "Negative" と表示するプログラムを作りなさい.

プログラム例

練習問題 2

二つの整数をキーボードから入力し, 一つ目の整数が二つ目の 整数で割り切れるかどうかを調べるプログラムを作りなさい. 割り切れるときには "OK" と表示し, 割り切れないときには "NG" と 表示しなさい.

ヒントとプログラム例

  • 一つ目の整数が二つ目の整数で割り切れるかどうかはどのように判定すればよいでしょう?
  • プログラム例

練習問題 3

キーボードから年 (西暦) を入力し, その年が閏年ならば "Leap year!" と表示し, そうでなければ "Non leap year" と表示するプログラムを作りなさい.

ヒントとプログラム例

  • 閏年 グレゴリオ暦での閏年は, 4 で割り切れる年のうち, 100 で割り切れる年を除き, 400 で割り切れる年を含めた年である.
  • プログラム例
Last modified:2020/10/22 21:00:40
Keyword(s):
References:[[itbase2020]惑星学実験実習の基礎II]