情報処理概論

授業内容(第5回)

情報処理概論(第5回)

Fortranの文法の説明
IF構文(続き)IF THEN文、ELSE文 、ELSE IF文 、END IF文CASE構文SELECT CASE文、CASE文、END SELECT文

DO構文
DO文、END DO文、EXIT文

情報基盤センター 井上 仁

プログラムの基本制御構造
連接

連接
順に処理する

順に処理する

処理1

WA = A + B

処理2

SA = A - B

一定回数、あるいは条件を満たすあいだ処理を繰り返す

処理3

SEKI = A * B

IF構文(1)選択(1)選択
条件によって処理を選択する反復

IF (論理式) THEN
ブロック (論理式が真のとき実行)
ENDIF
(例)
ブロックは、複数の実行文
IF (b.NE.0) THEN
sho=a/b
ENDIF

IF (b.NE.0) THEN
WRITE(*,*) ’b is not 0’
sho = a / b
ENDIF条件によって処理を選択する
条件

条件

処理1

処理1

IF (B.NE.0) SHO = A / B
IF (B.NE.0) THENSHO = A / B
ENDIF

条件によって、処理1が実行されるか、実行されない

第5回

1情報処理概論

選択(2)IF構文(2)
IF (論理式) THEN
ブロック1 (論理式が真のとき実行)
ELSE
ブロック2 (論理式が偽のとき実行)
ENDIF
(例)
IF (b.NE.0) THEN
WRITE(*,*) 'wa=',wa,' sa=',sa,' seki=',seki,' sho=',sho
ELSE
WRITE(*,*) 'wa=',wa,' sa=',sa,' seki=',seki
ENDIF

条件によって処理を選択する
処理1
条件
処理2

IF (B.NE.0) THEN
WRITE(*,*) ……
ELSE
WRITE(*,*) ……
ENDIF

条件によって、処理1が実行されるか、処理2が実行される

IF構文の例

IF構文(3)
IF (論理式1) THEN
ブロック1 (論理式1が真のとき)
ELSE IF (論理式2) THEN (論理式1が偽のとき)
ブロック2 (論理式2が真のとき)..................
ELSE IF (論理式n) THEN (論理式n-1が偽のとき)
ブロックn (論理式nが真のとき)
ELSE
ブロックn+1 (論理式nが偽のとき)
ENDIF

選択(3)

IF (point >= 80) THEN
WRITE(*,*) 'A’
ELSEIF (point >= 70) THEN
WRITE(*,*) 'B’
ELSEIF (point >= 60) THEN
WRITE(*,*) 'C’
ELSE
WRITE(*,*) 'D’
ENDIF

選択(3’)
処理1

処理1
条件1
条件2

処理2
処理3

条件3
処理4

IF (point >= 80) THEN
WRITE(*,*) 'A’
ELSEIF (point >= 70) THEN
WRITE(*,*) 'B’
ELSEIF (point >= 60) THEN
WRITE(*,*) 'C’
ELSE
WRITE(*,*) 'D’
ENDIF

条件によって、処理1が実行されるか、処理2が実行されるか、処理3が実行されるか、処理4が実行される。

第5回

条件1
条件2

処理2
処理3

条件3
処理4
IF (point >= 80) THEN
WRITE(*,*) 'A’
ELSEIF (point >= 70) THEN
WRITE(*,*) 'B’
ELSEIF (point >= 60) THEN
WRITE(*,*) 'C’
ELSE
WRITE(*,*) 'D’
ENDIF

SELECT CASE (point)
CASE(80:)
WRITE(*,*) ’A’
CASE(70:79)
WRITE(*,*) ’B’CASE(60:69)
WRITE(*,*) ’C’
CASE DEFAULT
WRITE(*,*) ’D’
END SELECT2情報処理概論

CASE構文(1)CASE構文(2) 選択子は、値や範囲の並びを括弧でくくったもの

SELCECT CASE (式)CASE 選択子1
ブロック1
CASE 選択子2
ブロック2.......
END SELECT並びは、コンマ(,)で区切ったもの
範囲は、下限と上限をコロン(:)で区切ったもの
DEFAULTは、どの選択子にも含まれないすべての値(例)
CASE (1)
CASE (2:5)
CASE (7:)
CASE (:9)
CASE (1, 2:5, 10)
CASE DEFAULT

CASE構文(3)

演習5-1
点数を入力して、成績を出力するプログラムを

SELECT CASE (point)
CASE(80:)
WRITE(*,*) ’A’
CASE(70:79)
WRITE(*,*) ’B’CASE(60:69)
WRITE(*,*) ’C’
CASE DEFAULT
WRITE(*,*) ’D’
END SELECT

作成しなさい(IF構文、あるいはCASE構文を用いる)。

DO構文(1)

反復
一定回数、あるいは条件を満たすあいだ処理を繰り返す
変数=式1,式2(,式3)処理

式1：始値, 式2：限界値, 式3：増分値

∞

第5回

1
2,3,4,5
7,8,9,10,11,･･････,6,7,8,9
1,2,3,4,5,10

処理

DO i = 1, 10
処理
END DO

DO
処理
END DO

変数=式1,式2(,式3)

DO 変数 = 式1, 式2, 式3処理
END DO
式1: 始値式2: 限界値
式3: 増分値

処理(1) 変数 = 始値
(2) 変数と限界値の比較
増分が+で、変数＞限界値or 増分が-で、変数＜限界値⇒ END DOの次の文へ(終了)
それ以外⇒ END DOまで実行(3) 変数に増分値を加えて(2)へ

3情報処理概論

DO構文の例(do.f90)

DO構文の例(do1.f90)
 iの値が1からnの間繰り返す

 iの値が1から3の間繰り返す

PROGRAM do1

PROGRAM do
INTEGER :: i
DO i = 1, 3
WRITE(*,*) i, ’回目’
END DO
STOP

実行例

INTEGER :: i, n

1 回目
2 回目
3 回目

READ(*,*) n
DO i = 1, n
WRITE(*,*) i, i**2
END DOSTOPEND PROGRAM do

END PROGRAM do1

DO構文の例(do2.f90)

演習5-2

 iの値が1からnの間繰り返す(iの増分は2)

実行例
4123414916

do.f90, do1.f90 と do2.f90 を入力して、実行しなさい。

PROGRAM do2

実行例
4INTEGER :: i, nREAD(*,*) n
DO i = 1, n, 2
WRITE(*,*) i, i**2
END DOSTOP1319END PROGRAM do2

DO構文の入れ子(1) 九九の表を作る…
 まずは、九九の一覧を作る…
12… 91

1292

2

4

18

91881

…
9

第5回

1×1=11×2=2……………
1×9=92×1=22×2=4……………
9×1=99 × 2 = 18……………
9 × 9 = 81

DO構文の入れ子(2)DO 変数1 = 式11, 式12, 式13
DO 変数2 = 式21, 式22, 式23処理
END DOEND DO
DO i = 1, 9DO j = 1, 9
WRITE(*,*) i , ’*’, j, ’=’, i*j
END DOENDO DOij i*j
1×1=1
1×2=2……………
1×9=92×1=2
2×2=4……………
9×1=99 × 2 = 18……………
9 × 9 = 81

4

情報処理概論

演習5-3
九九の一覧を出力するプログラムを作成しなさい。

DO構文(2)
∞

処理

DO
処理
END DO

DO構文の例(do3.f90)
 無限ループ EXIT文でDOループを抜ける

演習5-4
do3.f90 を入力して、実行しなさい。

DO
WRITE(*,*) 'Input a'READ(*,*) aIF (a <= 0) EXIT
WRITE(*,*) a, 'が入力されました'
END DO

次回の予定(第6回)
Fortranプログラミング
DO構文(続き)配列
DO形並び

第5回

5