<サブローチン>
c234567890123456789
implicit none
integer i
real x,y,z,xmin,xmax,b,a
xmin=-24
xmax=16
b=1-(2*xmin)
a=(2*xmax)+1-(2*xmin)
do i=1,a
x=(i-b)*0.5
call sub(x,y)
z=z+y
end do
write(6,*)'z=',z
write(6,*)'xmin=',xmin
write(6,*)'xmax=',xmax
end
subroutine sub(x,y)
real x
if(x<.0)then
y=3.0+cos(x)
end if
if (x>=0)then
y=sqrt(3.0*x)+2.0
end if
return
end
<結果>
xs4%
xs4% g77 subroutine.f
xs4% a.out
z= 358.959015
xmin= -24.
xmax= 16.
xs4%
<関数副プログラム>
c234567890123456789
implicit none
integer i
real x,y,z,xmin,xmax,b,a,f
xmin=-24
xmax=16
b=1-(2*xmin)
a=(2*xmax)+1-(2*xmin)
do i=1,a
x=(i-b)*0.5
y=f(x)
z=z+y
end do
write(6,*)'z=',z
write(6,*)'xmin=',xmin
write(6,*)'xmax=',xmax
end
function f(x)
implicit none
real x,f
if(x<.0)then
f=3.0+cos(x)
end if
if (x>=0)then
f=sqrt(3.0*x)+2.0
end if
return
end
<結果>
xs4%
xs4% g77 fuku.f
xs4% a.out
z= 358.959015
xmin= -24.
xmax= 16.
xs4%
<注意>めんどくさかったので、 Xmin と Xmax をプログラム内に入力すれば、勝手に i の領域か決まるようにしてあります。