fortranプログラミング入門...s を宣言し,read文でキーボードから値を...
TRANSCRIPT
Fortranプログラミング入門
関根 晃太
-関係/論理演算子・条件分岐-
関係演算子
関係演算子はTかFを返す(論理型). 数学みたいに○○ ≦ ○○ ≦○○はできない! 二つの数字の比較のみ(二項演算子) P-1
関係演算子 Fortranでの表現
< < .lt.
≦ <= .le.
> > .gt.
≧ >= .ge.
= == .eq.
≠ /= .ne.
fortran 90以降 古い表現
Tは真(True) Fは偽(False)
例題1
整数型の変数iとjを宣言し,read文でキーボードから値を読み込めるようにせよ.また,論理型の変数loを宣言し,次の計算をした結果を出力せよ.ファイル名はlogi.f90とせよ. ・ lo = i < j ・ lo = i ≧ j ・ lo = i == j ・ lo = i ≠ j
P-2
Logical を使おう!
例題1
program logi logical :: lo integer :: i, j write(*,*) 'Please input i and j.' read(*,*) i, j lo = i < j write(*,*) "i < j is ", lo lo = i >= j write(*,*) "i >= j is", lo ・・・ stop end program logi
P-3
論理演算子
真理値表
P-4
論理演算子 Fortranでの表現 使い方
⋂ (かつ) .and. i.and.j
∪(または) .or. i.or.j
¬(否定) .not. .not.i
論理等価 .eqv. i.eqv.j
論理非等価 .neqv. i.neqv.j
x y x ⋂ y T T T
T F F
F T F
F F F
x y x ∪ y T T T
T F T
F T T
F F F
x ¬x T F
F T
例題2
整数型の変数iとjを宣言し,read文でキーボードから値を読み込めるようにせよ.また,論理型の変数loを宣言し,次の計算をした結果を出力せよ.ファイル名はlogi2.f90とせよ. ・ lo = (i < j).and.(i == j) ・ lo = (i < 10).or.(j > 1) ・ lo = .not.(i == j) ・ lo = (i < 10) .eqv. (j > 1)
P-5
例題2
program logi2 logical :: lo integer :: i, j write(*,*) 'Please input i and j.' read(*,*) i, j lo = (i < j).and.(i == j) write(*,*) "i<j.and.i==j is ", lo lo = (i<10).or.(j>1) write(*,*) "i<10.or.j>1 is ", lo ・・・ stop end program logi2
P-6
課題1
論理型の変数a,bを宣言し, read文でキーボードから値(.true.あるいは.false.)を読み込めるようにせよ.そのときDe Morganの法則を実装し,正しければ.eqv.を使いTを表示せよ.
P-7
論理型は .true. あるいは .false.
で値を代入
条件分岐(if文)
☆文法 if (論理式) then 実行文 endif ・論理式がTならば実行文が実行される. ・論理式がFならばendif以降が実行される
P-8
論理式
実行文
T
F
例題3
整数型の変数iとjを宣言し,read文でキーボードから値を
読み込めるようにせよ.また,次の論理式が正しいときのみwrite文で出力せよ.ファイル名はlogif.f90とせよ. ・ (i < j).and.(i == j) ・ (i < 10).or.(j > 1)
P-9
例題3
program logif integer :: i, j write(*,*) 'Please input i and j.' read(*,*) i, j if ((i < j).and.(i == j)) then write(*,*) "i<j.and.i==j is True" endif if ((i<10).or.(j>1)) then write(*,*) "i<10.or.j>1 is True" endif stop end program logif
P-10
条件分岐(if文)
☆文法 if (論理式1) then 実行文1 else if (論理式2) then 実行文2 endif ・論理式1がTならば実行文1が実行される ・論理式1がFならば論理式2をチェック ・論理式2がTならば実行文1が実行される ・論理式2もFならばendif以降が実行される P-11
else ifで多くの条件を 追加できる!!
条件分岐(if文)
☆文法 if (論理式1) then 実行文1 else if (論理式2) then 実行文2 else if (論理式3) then ・・・・ endif
P-12
論理式1
実行文1
T
F
論理式2
実行文2
F
T
例題4
整数型の変数iとjを宣言し,read文でキーボードから値を読み込めるようにせよ.また,次の 論理式が正しいとき : True 論理式が間違っているとき : False をif, else if文を使って出力せよ.ファイル名はlogif.f90とせよ. ・ (i < 10).or.(j > 1)
P-13
例題4
program logif2 integer :: i, j write(*,*) 'Please input i and j.' read(*,*) i, j if((i<10).or.(j>1)) then write(*,*) "i<10.or.j>1 is True" else if (.not.((i<10).or.(j>1))) then write(*,*) "i<10.or.j>1 is False..." endif stop end program logif2
P-14
条件分岐(if文)
☆文法 if (論理式1) then 実行文1 else if (論理式2) then 実行文2 else if (論理式3) then 実行文3 ・・・ else 実行文E endif P-15
課題2
整数型の変数sを宣言し,read文でキーボードから値を読み込めるようにせよ.そのとき,sの値が ・3,4,5のときspring ・6,7,8のときsummer ・9,10,11のときautumn ・12,1,2のときwinter ・それ以外のとき? を出力するプログラムを作成せよ.ファイル名はseason.f90とせよ.
P-16
エクストラ課題
実数型の変数a,b,cを宣言し,read文でキーボードから値を読み込めるようにせよ.そのとき,a,b,cを係数とする2次方程式 の根を出力するプログラムを作成せよ.但し,実解が存在しない場合,「解なし」を表示せよ.
P-18