Fortranプログラミング入門

Fortranプログラミング入門
-算術演算子・入出力の詳細-
関根 晃太
算術演算子
算術演算子
Fortranでの表現
優先度
+
+
低
-
-
低
×
*
中
÷
/
中
べき乗
**
高
算術演算子には演算順序の優先順位が決まっている!
優先順位を明確に指定する場合は( )を使う
P-1
算術演算子
異なる型同士の演算は,強い型に自動で変換される:
・整数型 < 実数型 < 複素数型
・単精度 < 倍精度
例えば…(◌は算術演算子)
整数 ◌ 実数 → 実数
複素数 ◌ 実数 → 複素数
複素数 ◌ 整数 → 複素数
単精度実数 ◌ 倍精度実数
→ 倍精度実数
倍精度複素数 ◌ 単精度実数 → 倍精度複素数
P-2
課題1
整数型の変数int
単精度実数型の変数re
倍精度実数型の変数re8
単精度複素数型の変数comp
倍精度複素数型の変数comp8
を宣言,及び定数の代入を行い出力せよ.また,
・int * comp
・re + re8
・re8 – comp
・int * (re8 – comp8)
・comp8 / re8
を出力せよ.ファイル名はtype.f90とせよ.
P-3
入力文
☆文法 read(装置番号,書式) 入力対象, 入力対象, …
・「装置番号」から「書式」の通りに入力し,「入力対
象」に代入する
・装置番号が*か5は標準入力(キーボード入力)
・書式を*にすると標準書式で入力
P-4
例題1
倍精度実数型で変数a,h,Sを宣言せよ.aとhをread文を用
いてキーボードから値を代入できるようにせよ.そのとき,
面積Sを表示するプログラムを書け.但しプログラム名を
remes.f90とせよ.
キーボード入力
P-5
例題1
program remes
implicit none
real(8) :: a,h,S
write(*,*) 'a='
read(*,*) a
write(*,*) 'h='
read(*,*) h
S=a*h/2.0d0
write(*,*) S
stop
end program remes
P-6
例題1
program remes2
implicit none
real(8) :: a,h,S
write(*,*) 'a= h='
read(*,*) a, h
S=a*h/2.0d0
write(*,*) S
stop
end program remes2
P-7
外部ファイルの入出力
☆文法 open(装置番号,オプション)
ファイルを開き装置番号との関連付けを行う
・装置番号を表す自然数.5と6は使用不可
・オプション
file = ‘ファイル名’
-> ファイル名を指定する
P-8
外部ファイルの入出力
☆文法 close (装置番号,オプション)
ファイルを閉じ装置番号との関連付けを取り消す
・装置番号はopen文で開いたファイルを指定する
ファイルの使用開始
(open文)
ファイルへの入出力
(read文,write文)
ファイルの使用終了
(colse文)
P-9
例題2 外部ファイルへの入出力
「kaki」ファイルと「yomi」を作成せよ.
「yomi」ファイルには
1, 2
3, 4, 5
と記入せよ.
そのとき,「yomi」ファイルの内容を「kaki」ファイルにコピーするプ
ログラムを書け.ファイル名は「copy.f90」とせよ.
・「yomi」と「kaki」ファイルをopen文で開く
・「yomi」ファイルをread文で読み込む
・write文で「kaki」ファイルに書き込む
・close文で「yomi」と「kaki」ファイルを閉じる
P-10
例題2 外部ファイルへの入出力
ファイル copy.f90
program copy
implicit none
integer :: a, b, c
open(10,file='yomi')
open(20,file='kaki')
read(10,*) a,b
write(20,*) a,b
read(10,*) a,b,c
write(20,*) a,b,c
close(10)
close(20)
stop
end program copy
ファイル yomi
1, 2
3, 4, 5
ファイル kaki
?
P-11
外部ファイルへの入出力
☆文法 open(装置番号,オプション)
ファイルを開き装置番号との関連付けを行う
・装置番号を表す自然数.5と6は使用不可
・オプション
status = ‘NEW’‘OLD’‘REPLACE’‘SCRATH’ ‘UNKOWN’
->NEW : 開くファイルが既に存在するとエラー
OLD :開くファイルが存在しないとエラー
REPLACE : 開くファイルが既に存在するなら上書き.
ファイルが存在しないなら新規作成.
SCRATH : 一時ファイルに対し指定
UNKOWN : 不明時.statusを書かないとUNKOWN
P-12
外部ファイルへの入出力
☆文法 open(装置番号,オプション)
ファイルを開き装置番号との関連付けを行う
・装置番号を表す自然数.5と6は使用不可
・オプション
action = ‘READ’ ‘WRITE’ ‘READWRITE’
-> READ : 読み込み専用でファイルを開く
WRITE : 書き込み専用でファイルを開く
READWRITE : 特に制限なくファイルを開く.Actionを書
かないとREADWRITEになる.
P-13
課題2 外部ファイルへの入出力
「kaki」ファイルと「yomi」を作成せよ.
「yomi」ファイルには
1, 2
3, 4, 5
と記入せよ.
そのとき,「yomi」ファイルの内容を「kaki」ファイルにコピーするプ
ログラムを書け.ファイル名は「copy2.f90」とせよ.
但し,以下の2点を導入せよ.
・「yomi」が存在しないとエラー,読み込み専用で開け
・「kaki」が存在するとエラー,書き込み専用で開け
P-14
外部ファイルへの入出力
☆文法 open(装置番号,オプション)
ファイルを開き装置番号との関連付けを行う
・装置番号を表す自然数.5と6は使用不可
・オプション
err = s
-> ファイルを開くときにエラーが発生した場合,
文番号sに飛んで処理を続ける(エラー処理).
補足 : 文番号とは
文に番号が付けられる.
文番号 実行文
P-15
外部ファイルへの入出力
例えば…
program プログラム名
implicit none
・・・
open(10, file=‘ファイル名’, status=‘NEW’,err=1000)
open(10, file=‘ファイル名’, status=‘NEW’,err=2000)
・・・
stop
1000 write(*,*) ‘ERROR : cannot open a file1’
2000 write(*,*) ‘ERROR : cannot open a file2’
stop
end program プログラム名
P-16
課題3 外部ファイルへの入出力
「kaki」ファイルと「yomi」を作成せよ.
「yomi」ファイルには
1, 2
3, 4, 5
と記入せよ.
そのとき,「yomi」ファイルの内容を「kaki」ファイルにコピーするプ
ログラムを書け.ファイル名は「copy3.f90」とせよ.
但し,以下の2点を導入せよ.
・「yomi」が存在しないとエラー,読み込み専用,
エラーが発生したら’Error : Cannot open yomi file’と出力せよ.
・「kaki」が存在するとエラー,書き込み専用で開け
P-17
エラーが発生したら’Error : Cannot open kaki file’と出力せよ.
書式
☆文法 文番号 format(カンマで区切った編集記述子)
編集記述子
・I形編集記述子 i数字
整数型の変数や定数の値を表示,書き込みするため
の編集記述子.
˽˽˽#####
・˽はスペース, #は表示する数字
・iの後ろの数字の数だけ表示
・iの後ろの数字よりも表示桁が小さい場合
スペースで埋める
・ iの後ろの数字よりも表示桁が大きい場合,表示不可
P-18
書式
☆文法 文番号 format(カンマで区切った編集記述子)
編集記述子
・I形編集記述子 i数字
整数型の変数や定数の値を表示,書き込みするため
の編集記述子.
例
出力結果
integer :: a = 1234
a=***
i3 : 3桁の数字を表示
write(*,100) a
表示できない…
write(*,200) a
a=˽1234 i5 : 5桁の数字を表示
100 format(‘a=’,i3)
スペースで埋める
200 format(‘a=’,i5)
P-19
書式
☆文法 文番号 format(カンマで区切った編集記述子)
編集記述子
・I形編集記述子 i数字
整数型の変数や定数の値を表示,書き込みするため
の編集記述子.
例
出力結果
integer :: a = 1234
a=*** a=˽1234
write(*,100) a, a
100 format(‘a=’,i3,’ a=’,i5)
P-20
書式
☆文法 文番号 format(カンマで区切った編集記述子)
編集記述子
・F形編集記述子 f数字1.数字2
実数型の変数や定数の値を表示,書き込みするため
の編集記述子.
˽±###.####
数字2の幅
数字1の幅
: 小数点以下の数字を数字2の数だけ表示
: スペース,符号,小数点を含めた数字を数字1の数
だけ表示
P-21
書式
☆文法 文番号 format(カンマで区切った編集記述子)
編集記述子
・F形編集記述子 f数字1.数字2
実数型の変数や定数の値を表示,書き込みするため
の編集記述子.
例
出力結果
real :: a = -12.3456
a=˽˽˽˽-12.35
write(*,100) a
write(*,200) a
a=˽˽˽˽-12.3456
100 format(‘a=’,f10.2)
200 format(‘a=’, f12.4)
P-22
書式
☆文法 文番号 format(カンマで区切った編集記述子)
編集記述子
・E形編集記述子 e数字1.数字2
実数型の変数や定数の指数で表示,書き込みするため
の編集記述子.
˽±0.####E±###
数字2の幅
数字1の幅
: 小数点以下の数字を数字2の数だけ表示
: スペース,符号,小数点,Eを含めた数字を数字2の数
だけ表示
P-23
書式
☆文法 文番号 format(カンマで区切った編集記述子)
編集記述子
・E形編集記述子 e数字1.数字2
実数型の変数や定数の指数で表示,書き込みするため
の編集記述子.
例
出力結果
real :: a = -12.3456
a=˽-0.12E+02
write(*,100) a
write(*,200) a
a=˽-0.1235E+02
100 format(‘a=’,e10.2)
200 format(‘a=’, e12.4)
P-24
課題4
「inpx」ファイルを作成せよ.「inpx」に0.5d0と書いておく.xの値を「
inpx」ファイルから読み込み
の値を計算するプログラムを作成せよ.
但し,出力は「outy」ファイルを指定し,指数表示で小数点以下11
桁,全体で16桁表示するプログラムを作成せよ.
Real(8)を
但しファイル名は「calcx.f90」とせよ.
使おう!
P-25
エクストラ課題
3点のx-y座標を入力するファイル「inpoint」を作成し,その値を読
み込み三角形の面積を出力するプログラムを書け.但し,出力先
は特に指定しない.
Real(8)を
使おう!
P-26