.................. program 9 .................. C ifの使い方を知るためだけの、殆ど無意味なプログラム C (何をやってるか、考えてみてください) */ program main real*8 x do i=1,10 read(*,*)x if( x.gt.10)then write(*,*)x," > 10" else if(x.gt.5)then write(*,*)"10 >= ",x," > 5" else if(x.gt.0)then write(*,*)"5 >= ",x," > 0" else write(*,*)x," <= 0 " stop endif enddo end .................. program 10 .................. C if文の利用例として2分法で非線形方程式の解を求める。 C 下の例題では C x^3 + 5x^2 - 3x -5 = 0 C の解を求めている(^はべき乗を表す)。 program main parameter(nmax=50) real*8 x1,x2,x3 real*8 f1,f2,f3 C 解探索の範囲を指定 read(*,*)x1,x2 C 2分法を最大nmax回くりかえす do irepeat = 1,nmax f1 = x1**3 + 5*x1**2 - 3*x1 -5 f2 = x2**3 + 5*x2**2 - 3*x2 -5 C x1とx2の差が与えた精度以内なら終了 if(abs((x1-x2)/x1).le. 1e-10)then write(*,*)"convergence" write(*,*)"x1 = ",x1," f1 = ",f1 write(*,*)"x2 = ",x2," f2 = ",f2 stop C 収束してないと判断されたとき。 C f1とf2の符号が逆なら範囲を二分する else if(f1*f2.lt.0)then x3 = (x1+x2)/2 f3 = x3**3 + 5*x3**2 - 3*x3 -5 if(f1*f3.lt.0)then x2=x3 else x1=x3 endif write(*,*)irepeat," step x1=",x1," f1=",f1," x2=",x2," f2=",f2 C f1とf2の積が正なら、この範囲に解がないと判断して終了 else write(*,*)"no solution is found between ",x1," and ",x2 stop endif enddo C nmax回のくりかえしで解に収束しなかったときは終了 write(*,*)"not converged after ",nmax," steps" end