FORTRAN プログラミング入門 第4 回 プログラムの流れと条 …ax-b.com/FPR1_2014/class601/slides/140420.04.if_else.pdfFORTRAN プログラミング入門,– 第4

Post on 26-Dec-2020

0 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

Transcript

木村拓馬

FORTRANプログラミング入門–第 4回 プログラムの流れと条件分岐 (1)–

木村拓馬

2014年4月21日 13:25

FORTRAN プログラミング入門,–第 4 回 プログラムの流れと条件分岐 (1)– 1/12

木村拓馬

.本日は..

......

流れ図・フローチャート

条件分岐

関係演算子

条件分岐・IF文

FORTRAN プログラミング入門,–第 4 回 プログラムの流れと条件分岐 (1)– 2/12

木村拓馬

プログラムの流れアルゴリズム

コンピュータに実行させたい処理手順,プログラムの流れ

流れ図 (フローチャート)アルゴリズムを誰が見ても正しく簡単に理解できるように,図記号と書き

方が JISで定められている1.この記号を用いて書いたものを流れ図という.

図 1: 記号の一部.この図は PowerPoint のフローチャート用記号を使用

1詳しくは,”JISX0121-情報処理用流れ図・プログラム網図・システム資源図記号,社団法人情報処理学会,1986”が日本工業標準調査会のホームページで閲覧できる

FORTRAN プログラミング入門,–第 4 回 プログラムの流れと条件分岐 (1)– 3/12

木村拓馬

図 2: 流れ図の例

フローチャートを作成する利点

他の人にアルゴリズムを説明しやすくなる.

ミスが少なくなる.

与えられた問題の分析,理解につながる.

プログラム作成が効率的になり,作成時間が短縮できる.

後のプログラム保守が楽になる.

他の言語への移植が容易になる.

(情報処理技術者試験に役立つ)

必ずフローチャートを作成しなければならないわけではないが,大きなプログラムを作成する際は,まずフローチャートを作成しておくと便利

(フローチャートでなくても処理を箇条書きしておくだけで十分意味があると思う).

FORTRAN プログラミング入門,–第 4 回 プログラムの流れと条件分岐 (1)– 4/12

木村拓馬

図 2: 流れ図の例

フローチャートを作成する利点

他の人にアルゴリズムを説明しやすくなる.

ミスが少なくなる.

与えられた問題の分析,理解につながる.

プログラム作成が効率的になり,作成時間が短縮できる.

後のプログラム保守が楽になる.

他の言語への移植が容易になる.

(情報処理技術者試験に役立つ)

必ずフローチャートを作成しなければならないわけではないが,大きなプログラムを作成する際は,まずフローチャートを作成しておくと便利

(フローチャートでなくても処理を箇条書きしておくだけで十分意味があると思う).

FORTRAN プログラミング入門,–第 4 回 プログラムの流れと条件分岐 (1)– 4/12

木村拓馬

関係演算子(比較演算子)2つの値を比較する際は,表 1の関係演算子を用いる.

表 1: 関係演算子.”新しい”は f90 で記号化されたもの.”古い”のも使用できる

関係演算子 使用法

意味 新しい 古い 新しい 古い

より小さい (<) < .LT. a < b a .LT. bより小さいか等しい (≤) <= .LE. a <= b a .LE. b等しい (=) == .EQ. a == b a .EQ. b等しくない (,) /= .NE. a /= b a .NE. bより大きい (>) > .GT. a > b a .GT. bより大きいか等しい (≥) >= .GE. a >= b a .GE. b

.例)関係演算の結果は論理値 (logical) になる (ex4.1.f90)...

......

PROGRAM JOKENWRITE(*,*) 3>1WRITE(*,*) 3<=1

END PROGRAM JOKEN

を実行すると,.

......TF

を返す.T は真 (true),F は偽 (false).FORTRAN プログラミング入門,–第 4 回 プログラムの流れと条件分岐 (1)– 5/12

木村拓馬

条件分岐

IF文プログラムは基本的には書かれた順に上から処理される.しかし,ある条

件に当てはまる場合と当てはまらない場合で処理を変更したい場合がある.

IF文は,その機能を実現する命令文.以下の(条件)は logicalの値.ふつうは前述の関係演算を用いる.

.条件が成立する (真)場合のみ処理を実行する..

......

IF (条件) THEN条件が真の場合の処理 (何行でもよい)

END IF.処理が 1文だけの場合は以下のように省略できる........IF (条件)条件が真の場合の処理.条件が成立する (真)場合も成立しない (偽)場合も処理を実行する..

......

IF (条件) THEN条件が真の場合の処理 (何行でもよい)

ELSE条件が偽の場合の処理 (何行でもよい)

END IFFORTRAN プログラミング入門,–第 4 回 プログラムの流れと条件分岐 (1)– 6/12

木村拓馬

条件分岐.条件が複数ある場合..

......

IF (条件 1) THEN条件 1が真の場合の処理 (何行でもよい)

ELSE IF (条件 2) THEN条件 1が偽で条件 2が真の場合の処理 (何行でもよい)...

ELSE IF (条件 n) THEN条件 1から条件 n-1が偽で条件 nが真の場合の処理 (何行でもよい)

ELSEどの条件も偽の場合の処理 (何行でもよい)

END IF

.処理文の中に IF文が含まれてもよい (いわゆる入れ子)...

......

IF (条件 1) THENIF (条件 2) THEN条件 1と条件 2がともに真の場合の処理 (何行でもよい)

END IFEND IF

FORTRAN プログラミング入門,–第 4 回 プログラムの流れと条件分岐 (1)– 7/12

木村拓馬

IF文のフローチャート

図 3: 条件が真の場合のみ処理 図 4: 条件が真・偽どちらの場合も処理

図 5: 条件が複数の場合FORTRAN プログラミング入門,–第 4 回 プログラムの流れと条件分岐 (1)– 8/12

木村拓馬

.例)整数を入力したら符号を答える (ex4.2.f90)...

......

program pminteger :: iwrite(*,*) ’input an integer -->’read(*,*) iif (i==0) then

write(*,*) ’0’elseif (i>0) then

write(*,*) ’+’else

write(*,*) ’-’end if

end program pm

図 6: 流れ図FORTRAN プログラミング入門,–第 4 回 プログラムの流れと条件分岐 (1)– 9/12

木村拓馬

.例)二次方程式の解の個数は判別式を調べればよい (ex4.3.f90)...

......

program discriminantreal :: a,b,c,dwrite(*,*) ’input 3 numbers a,b,c-->’read(*,*) a,b,cd=b*b-4.0*a*cwrite(*,*) ’a*xˆ2+b*x+c has’if (d>0.0) then

write(*,*) ’two real roots’elseif(d==0.0) then

write(*,*) ’a real double root’else

write(*,*) ’no real roots’end if

end program discriminant

を実行し a=1, b=0, c=-1 と入力すると,.

......a*xˆ2+b*x+c hastwo real roots

を実行し a=1, b=0, c=1 と入力すると,.

......a*xˆ2+b*x+c hasno real roots

注意:計算誤差により等式(==)の判別に失敗することがあるので注意([4, p.11]).

FORTRAN プログラミング入門,–第 4 回 プログラムの流れと条件分岐 (1)– 10/12

木村拓馬

参考文献

[1] JIS X 0121:1986(情報処理用流れ図・プログラム網図・システム資源図記号)

[2] JIS X 3001-1:2009 (プログラム言語 Fortran –第 1部:基底言語)

[3] 戸川隼人:ザ・Fortran90/95,サイエンス社(1999)

[4] 伊理正夫,藤野和建: 数値計算の常識,共立出版 (1985)

FORTRAN プログラミング入門,–第 4 回 プログラムの流れと条件分岐 (1)– 11/12

木村拓馬

appendix計算誤差により等式(==)の判別に失敗することがあるので注意 [4, p.11]

p.10の例で,ax2 + bx + c = 0に対し判別式 d = b2 − 4acの計算を行っている.

  a=1, b=2, c=1.00000001の場合,手計算では,

d = b2 − 4ac = 4.0 − 4.00000004 = −0.00000004 < 0

より解なしのはずだが,このプログラムは,

.

...... a real double root

と,重解ありと判定する. プログラムの最後に,

.

...... write(*,*) ’d=’,d

を付け加えて確認すると,.......d=0.0 となっている.

 第 3回講義で紹介した通り,real型の変数は有効数字が7桁程度であり,

4.0 − 4.00000004

のような計算はまともな計算結果が返ってこない.

 計算機で実数型の計算を行うときは計算誤差に注意!

FORTRAN プログラミング入門,–第 4 回 プログラムの流れと条件分岐 (1)– 12/12

top related