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
© Copyright 2024 Paperzz