fortranプログラミング入門...s を宣言し,read文でキーボードから値を...

18
Fortranプログラミング入門 関根 晃太 -関係/論理演算子・条件分岐-

Upload: others

Post on 04-Aug-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Fortranプログラミング入門...s を宣言し,read文でキーボードから値を 読み込めるようにせよ.そのとき,sの値が ・ 3,4,5 のときspring ・

Fortranプログラミング入門

関根 晃太

-関係/論理演算子・条件分岐-

Page 2: Fortranプログラミング入門...s を宣言し,read文でキーボードから値を 読み込めるようにせよ.そのとき,sの値が ・ 3,4,5 のときspring ・

関係演算子

関係演算子はTかFを返す(論理型). 数学みたいに○○ ≦ ○○ ≦○○はできない! 二つの数字の比較のみ(二項演算子) P-1

関係演算子 Fortranでの表現

< < .lt.

≦ <= .le.

> > .gt.

≧ >= .ge.

= == .eq.

≠ /= .ne.

fortran 90以降 古い表現

Tは真(True) Fは偽(False)

Page 3: Fortranプログラミング入門...s を宣言し,read文でキーボードから値を 読み込めるようにせよ.そのとき,sの値が ・ 3,4,5 のときspring ・

例題1

整数型の変数iとjを宣言し,read文でキーボードから値を読み込めるようにせよ.また,論理型の変数loを宣言し,次の計算をした結果を出力せよ.ファイル名はlogi.f90とせよ. ・ lo = i < j ・ lo = i ≧ j ・ lo = i == j ・ lo = i ≠ j

P-2

Logical を使おう!

Page 4: Fortranプログラミング入門...s を宣言し,read文でキーボードから値を 読み込めるようにせよ.そのとき,sの値が ・ 3,4,5 のときspring ・

例題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

Page 5: Fortranプログラミング入門...s を宣言し,read文でキーボードから値を 読み込めるようにせよ.そのとき,sの値が ・ 3,4,5 のときspring ・

論理演算子

真理値表

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

Page 6: Fortranプログラミング入門...s を宣言し,read文でキーボードから値を 読み込めるようにせよ.そのとき,sの値が ・ 3,4,5 のときspring ・

例題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

Page 7: Fortranプログラミング入門...s を宣言し,read文でキーボードから値を 読み込めるようにせよ.そのとき,sの値が ・ 3,4,5 のときspring ・

例題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

Page 8: Fortranプログラミング入門...s を宣言し,read文でキーボードから値を 読み込めるようにせよ.そのとき,sの値が ・ 3,4,5 のときspring ・

課題1

論理型の変数a,bを宣言し, read文でキーボードから値(.true.あるいは.false.)を読み込めるようにせよ.そのときDe Morganの法則を実装し,正しければ.eqv.を使いTを表示せよ.

P-7

論理型は .true. あるいは .false.

で値を代入

Page 9: Fortranプログラミング入門...s を宣言し,read文でキーボードから値を 読み込めるようにせよ.そのとき,sの値が ・ 3,4,5 のときspring ・

条件分岐(if文)

☆文法 if (論理式) then 実行文 endif ・論理式がTならば実行文が実行される. ・論理式がFならばendif以降が実行される

P-8

論理式

実行文

T

F

Page 10: Fortranプログラミング入門...s を宣言し,read文でキーボードから値を 読み込めるようにせよ.そのとき,sの値が ・ 3,4,5 のときspring ・

例題3

整数型の変数iとjを宣言し,read文でキーボードから値を

読み込めるようにせよ.また,次の論理式が正しいときのみwrite文で出力せよ.ファイル名はlogif.f90とせよ. ・ (i < j).and.(i == j) ・ (i < 10).or.(j > 1)

P-9

Page 11: Fortranプログラミング入門...s を宣言し,read文でキーボードから値を 読み込めるようにせよ.そのとき,sの値が ・ 3,4,5 のときspring ・

例題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

Page 12: Fortranプログラミング入門...s を宣言し,read文でキーボードから値を 読み込めるようにせよ.そのとき,sの値が ・ 3,4,5 のときspring ・

条件分岐(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で多くの条件を 追加できる!!

Page 13: Fortranプログラミング入門...s を宣言し,read文でキーボードから値を 読み込めるようにせよ.そのとき,sの値が ・ 3,4,5 のときspring ・

条件分岐(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

Page 14: Fortranプログラミング入門...s を宣言し,read文でキーボードから値を 読み込めるようにせよ.そのとき,sの値が ・ 3,4,5 のときspring ・

例題4

整数型の変数iとjを宣言し,read文でキーボードから値を読み込めるようにせよ.また,次の 論理式が正しいとき : True 論理式が間違っているとき : False をif, else if文を使って出力せよ.ファイル名はlogif.f90とせよ. ・ (i < 10).or.(j > 1)

P-13

Page 15: Fortranプログラミング入門...s を宣言し,read文でキーボードから値を 読み込めるようにせよ.そのとき,sの値が ・ 3,4,5 のときspring ・

例題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

Page 16: Fortranプログラミング入門...s を宣言し,read文でキーボードから値を 読み込めるようにせよ.そのとき,sの値が ・ 3,4,5 のときspring ・

条件分岐(if文)

☆文法 if (論理式1) then 実行文1 else if (論理式2) then 実行文2 else if (論理式3) then 実行文3 ・・・ else 実行文E endif P-15

Page 17: Fortranプログラミング入門...s を宣言し,read文でキーボードから値を 読み込めるようにせよ.そのとき,sの値が ・ 3,4,5 のときspring ・

課題2

整数型の変数sを宣言し,read文でキーボードから値を読み込めるようにせよ.そのとき,sの値が ・3,4,5のときspring ・6,7,8のときsummer ・9,10,11のときautumn ・12,1,2のときwinter ・それ以外のとき? を出力するプログラムを作成せよ.ファイル名はseason.f90とせよ.

P-16

Page 18: Fortranプログラミング入門...s を宣言し,read文でキーボードから値を 読み込めるようにせよ.そのとき,sの値が ・ 3,4,5 のときspring ・

エクストラ課題

実数型の変数a,b,cを宣言し,read文でキーボードから値を読み込めるようにせよ.そのとき,a,b,cを係数とする2次方程式 の根を出力するプログラムを作成せよ.但し,実解が存在しない場合,「解なし」を表示せよ.

P-18