FORTRAN & 4 '
IF 文 岐
非常勤講師 宇 史睦
前回 課題 回答 解
半旬 計算方法 講師推奨ver そ 他方法 い 解
→ 同 計算 場合 複数 方法 あ !
0 グラ 違い&一部抜粋'
Do ii = 1, 3
k = (ii – 1 ) * 5 sum = 0.0
j = 0
Do i = 1 + k, 5 + k
sum = sum + tmp(i) j = j + 1
End do
j2 = REAL(j) ave = sum / j2 End do
Do i = 1, 60, 5 sum = 0.0
j = 0 do k = 0, 4
sum = sum + tmp(i+k) j = j + 1
End do
j2 = REAL(j) ave = sum / j2 End do
今回 場合 ほ 大差 い!
時 選択 い =
/ 0
ii 特定 半旬 規定 い
Do ii = 1, 3
k = (ii – 1 ) * 5 sum = 0.0
j = 0
Do i = 1 + k, 5 + k
sum = sum + tmp(i) j = j + 1
End do
j2 = REAL(j) ave = sum / j2 End do
例えば
第10半旬~12半旬 計算 い場合
ii い
Do ii = 10, 12
ば 必要 計算 可能
少 理解 い
グラ コ い
要 変数k 値 一目 い
計算 い日付& 60 'さえ変え ば OK
Do i = 1, 60, 5 sum = 0.0
j = 0 do k = 0, 4
sum = sum + tmp(i+k) j = j + 1
End do
j2 = REAL(j) ave = sum / j2 End do
大 計算 場合 便利
Do i = 1, 60, 5
60さえ変え ば
簡単 計算区間 変更
グラ わ や さ
グラ 理解 要 変数k 値 一目 わ
そ 他 回答
k = 0
Do i = 1, 12 sum = 0.0 j = 0 do n = 1, 5
sum = sum + tmp(k) j = j + 1
k = k + 1 End do
j2 = REAL(j) ave = sum / j2 End do
Do i = 1, 12 sum = 0.0 j = 0 do k = 1, 5
read(1,*)imn, idy, tmp sum = sum + tmp
j = j + 1 End do
j2 = REAL(j) ave = sum / j2 End do
1 K 全体 Loop数 ウン 2 配列 使用 計算 方法
1 2 い コ ン
1
途中 半旬 計算 面倒 い
パッ 見 う 計算 い わ い
& ウン 多用'
前回習 二 応用 ○
2
結果的 OK & 作成 OK'
計算 セス い い 何番目
込 計算 い 断 時間 必要
途中 半旬 計算 面倒 い
結果 自 考え 望 結果 得 ば良い 綺麗 グ
ラ や汎用性 高い グラ 慣 OK. /~2
方法 計算 セス 理解 い ば良い
前回 課題 calc_ave.f90 さ い
使用 FORTRAN 機能 以
• implicit none
• 変数 宣言 配列&Dimension' 宣言
• OPEN, READ, WRITE
• Do文 &一部 多 含 '
• Do文 配列 活用
fukushu.csv
全気温 & 均 最高 最低' 均値 計算 う
復習/
前 教員 作成 早 人
以降 スライ 目 通
配列 組 方 可能
込 変数 そ 配列 使用
容易 間違わ
必要 日 取 出
Integer :: day
real,dimension(31) :: tmp
OPEN ,FILE= ./test.csv , “TATU“= old DO i = 1, 28
read(1,*) day, tmp(day) END DO
CLOSE(1)
test.csv
Day, temperature 1, 4.7 2, 5.6 3, 7.0 4, 0.5 5, -0.4
28, 9.1
/
人 講師 一緒 作成 う
本日 話題
IF 文 場合
IF 文
条件文 処理 岐さ 機能
IF文 基本的 流
IF 開始 条件文 i ≦k
IF文 抜 処理
いいえ い
変数i 変数j
処理A
処理B
ELSE or ELSE IF IF(条件文)THEN
処理A ELSE
処理B END IF
IF(条件文1)THEN 処理A
ELSE IF(条件文2)THEN END IF
if ( data > 0.0 ) then write(*,*) data
具体例
IF 文 う 時 利用 ==
• あ 特定条件 一致 場合 指示 処理 行う
→ 一致 い場合 処理 行う 可能&ELSE IF文'
気象 利用 使用 処理
測 処理
う う
全 数 不明 自動 込
IF 文 条件文&場合 等'
IF( 条件文 ) then
文法
条件文
複数条件
: : 小 :; : 小 イコ
< : 大 <; : 大 イコ
;; : イコ &等号 0 繋 '
-; : ノッ イコ
.and. :
.or. :
IF( r <= s ) THEN 処理A
END IF
IF( r <= s .and. r >= 0.0) THEN 処理A
END IF
IF 文 使 う i j 比較
sample1.f90
PROGRAM sample implicit none INTEGER :: i, jWRITE(0,*)"---- CASE 1 ---" i = 1
j = 2
IF (i < j ) THEN
W‘ITE ,* CA“E . ", i, j END IF
WRITE(0,*)"---- CASE 2 ---" i = 3
j = 2
IF (i < j ) THEN
W‘ITE ,* CA“E . ", i, j ELSE
W‘ITE ,* CA“E . ",i, j END IF
END PROGRAM sample
CASE 1
値: i = 1 j = 2 条件: i j 小さい = 結果: YES
WRITE文 実行さ END IF &IF文終了' CASE 2
値: i = 3 j = 2 条件: i j 小さい = 結果: NO
ELSE
→ 限 当 い
2 目 WRITE文 実行さ
END IF &IF文終了'
色々条件 変え 結果 見 う
• sample1.f90 CASE1, CASE 2 以 条件 変え
思 通 挙動 示 確認 う
1. CASE0: i;0 j;.
条件式 i < j 場合
2. CASE0: i;0 j;0
条件式 i ;; j 場合
3. CASE2: i = 2, j = 0
条件式 i < j i <; .
/
i > j .and. i == 0
簡略化 IF 文 使い方
IF文 基本的 文法 以 あ
処理 1行 書 場合 簡略化
基本的 文法
IF& 条件文' then 処理A
ELSE
処理B END IF
簡略化
IF(条件文' 処理A
Sample1.f90 CASE1 IF文 1行 書い う
0
人 独自 や う
い場合 講師 明 聞
値 -999.9 以外 画面出力
• 配布 &sample_data.csv' 3列目 値 -999.9 &観測
測時 使用さ 値' い 画面
出力 加え IF文 使用 測 月
日 出力 &出席点:提出'
注意点:実数 変数 -999.9 場合 -999.90000000001 いう小さ 値 入 い 場合 あ う 場合 うIF文 作 =
• CHECK POINT!!
ッ 注意 う
何回繰 返 ば い=
2列目 値 実数data 変数 代入 場合 IF文
う記述 = if( date ○ ??? 'then
1
課題/
う う 計算
う う 定義
1. 西暦 4 割 う う
2. 西暦 100 割
3. 西暦 400 割 う う
1900 2016 う う う 計算 何回
う う あ ウン &2 以 IF文 作成
や い'
=> 1900 2000 う う 計29 う う 課題0
2
余 返 関数 MOD&引数,割 値'
例' MOD(10,3' → / 返 MOD(10,2' → 0
講師 ゆ 前 ンス ション 行う 最初 自
考え 作成 [20 後 開始]
補足: IOSTAT EXIT 関数
READ文 ション: iostat
READ文 正常 込 ば:.
正常 混 場合:/以
終え 場合:-/
返 EXIT関数
DO文 中 実行さ 繰 返 回数 関係
1 END DO 外
& 繰 返 回数 足
強制的 DO文 終わ '
3
IOSTAT EXIT 文 挙動
integer :: day, eof real :: tmp
OPEN(1, FILE='../data/test.csv',STATUS="old")
DO
read(1, *,IOSTAT=eof )day, tmp
WRITE(0,"(I3,F6.1,I3)")day,tmp, eof if( eof < 0 )exit
END DO CLOSE(1)
sample2.f90 EOF 値 う 出力さ 見 う
Iostat, exit 利用 便利 !
個数 不明 計算条件 数 わ 場
合 Do文 繰 返 回数 指定 い
&例えば 複数ファイ 一気 込 場合'
そ 以 う ばOK!
DO ifile = 1, 2
if( ifile == 1 ) fname = ../data/dy_ 5_ .dat if( ifile == 2 ) fname = ../data/dy_ 5_ .dat OPEN(1, FILE = fname, “TATU“= old
DO
READ& END DO CLOSE(/' END DO
IF 文 利用 複数ファイ 込
• OPEN文 DO Loop 繰 返 毎 開 ファイ 変え
複数ファイ 込 行う
• 使用 ファイ 気温 月 日
• 込 / 変数 格納 う
– REAL,DIMENSION(2,31) :: tmp j = 1
Do
READ(1,*,IOSTAT = i) data(ifile,j) IF( j < 0 ) exit
j = j + 1 END DO
課題0
途中 行う 込 箇所 自身
作成 人 課題フ 提出