Fortranプログラミング入門
関根 晃太
-組み込み関数・条件分岐(2)-
組み込み関数
Fortranの特徴: 数学に関する組み込み関数が多数ある! 例えば sin関数, cos関数, 平方根など… 使い方 real :: pi = 3.14159265, sinpi sinpi = sin(pi)
P-1 入力引数 関数名
多くの場合, 入力引数の型と 戻り値の型は同じ
戻り値
組み込み関数
P-2
関数名 意味 入力引数の型 sqrt(x) 平方根 単/倍精度実数
単精度複素数 abs(x) 絶対値 整数
単/倍精度実数 単精度複素数
sin(x) cos(x) 正弦 余弦 (ラジアン入力)
単/倍精度実数 単精度複素数
tan(x) 正接 (ラジアン入力)
単/倍精度実数
asin(x) acos(x) atan(x) 逆正弦 逆余弦 逆正接 単/倍精度実数
組み込み関数
P-3
関数名 意味 入力引数の型 exp(x) 指数関数 単/倍精度実数
単精度複素数 log(x) 自然対数 単/倍精度実数
単精度複素数 log10(x) 常用対数 単/倍精度実数 aimag(x) 虚数部 単精度複素数
(戻り値:単精度実数) conjg(x) 複素共役 単精度複素数 mod(x,y) x/yの余り 整数
単/倍精度実数
組み込み関数
P-4
関数名 意味 入力引数の型 max(x,y,z,・・・) min(x,y,z,・・・)
最大値 最小値
整数 単/倍精度実数
int(x) 整数型への変換 単/倍精度実数 (戻り値:整数)
real(x) 単精度実数型への変換 整数 倍精度実数
(戻り値:単精度実数) cmplx(x)
cmplx(x,y) 複素数型への変換 xは実部,yは虚部
引数がxのみの場合は虚部が0の複素数
単/倍精度実数 (戻り値:単/倍精度
複素数)
例題1
数学関数を用いて円周率πの近似値を倍精度実数型で作成し,表示せよ. ヒント: cos(π)=-1 tan(π/4)=1
P-5
πは実装されてい
ないので,作り方を覚えよう!!
例題1
program makepi implicit none real(8) :: pi1, pi2 pi1 = acos(-1d0) pi2 = 4d0*atan(1d0) write(*,*) pi1, pi2 stop end program makepi
P-6
課題1
πを単精度実数型を作成せよ.xを単精度実数型,zを単 精度実数型,izを単精度複素数型の変数とする.xを read文でキーボード入力し値を代入せよ.但し,z = xπ, iz = ixπとする.そのとき,De Moivreの公式 を確かめよ. (右辺と左辺それぞれを出力せよ) ファイル名はdemoi.f90とせよ.
P-7
複素数型に変換: cmplx(実部,虚部)
条件分岐(select case文)
☆文法 select case (式) case (選択子1) 実行文1 case (選択子2) 実行文2 ・・・・ case default 実行文3 end select P-8
・式は整数型,文字型,論理型 ・選択子は カンマ区切り で同じ型の定数を指定か, 下限:上限 のようにコロンで範囲を指定 ・case defaultはいずれの選択子 にも含まれない場合に実行さ れる.記述しなくてもOK!
条件分岐(select case文)
☆文法 select case (式) case (選択子1) 実行文1 case (選択子2) 実行文2 ・・・・ case default 実行文3 end select P-9
integer :: n read(*,*) n select case (n) case (1,2,3) 実行文1 case (3:6) 実行文2 case (7:) 実行文3 case default 実行文4 end select
例題2
整数型でnを宣言し,read文で値をキーボードから入力せよ.さらにnが 1,2,3 のとき 1,2,3 4から5 のとき 4:5 -3から0あるいは6のとき -3:0,6 7以上のとき 7: それ以外のとき default と出力するプログラムを作成せよ.
P-10
例題2
P-11
program seltest implicit none integer :: n write(*,*) 'n=' read(*,*) n select case (n) case (1,2,3) write(*,*) '1,2,3' case (4:5) write(*,*) ‘4:5' case (-3:0,6) write(*,*) '-3:0,6' case (7:) write(*,*) '7:' case default write(*,*) 'default' end select stop end program seltest
課題2
整数型の変数sを宣言し,read文でキーボードから値を読み込めるようにせよ.そのとき,sの値が ・3,4,5のときspring ・6,7,8のときsummer ・9,10,11のときautumn ・12,1,2のときwinter ・それ以外のとき? を出力するプログラムを作成せよ.但し,select case文を使うこと.ファイル名はseason2.f90とせよ.
P-12
go to文
☆文法 go to 文番号 ・文番号が一致する行へジャンプする 例 go to 1000 ・・・ 1000 write(*,*) ‘check 1000’ ・・・ ※現在のFortranでは非推奨の書き方 P-13
例題3
整数型の変数nを宣言し,read文で値を読み込む.nの値が0以下ならばn<=0と表示し,再度read文でnの値を読み込む.nが0よりも大きいならばn>0と表示し,終了するプログラムを作成せよ.
P-14
If文とgo to文を 組み合わせよう!!
例題3
P-15
program ifgo implicit none integer :: i 1000 write(*,*) 'i=' read(*,*) I if (i <= 0) then write(*,*) 'i<=0...' go to 1000 end if write(*,*) 'i > 0!!' stop end program ifgo
課題3
整数型の変数nを宣言する.read文でnの値を代入する.nが0以下ならn<=0と出力し,read文で再度nの値を代入可能にする.nに正の値が代入されたのなら,1からnまでの値を出力するプログラムを作成せよ.
P-16
1ずつ増加させて 出力する変数iを
宣言しよう
エクストラ課題
整数型の変数nを宣言する.read文でnの値を代入する.nが偶数ならThis is an even number,0以下ならn<=0と出力し,read文で再度nの値を代入可能にする.nに奇数が代入されたのなら,1からnまでの奇数の和を求め出力せよ.
P-17
偶奇の判定は mod関数を使おう!