! 2.6.f90 ! 20140211 1.1 ! $Id: 2.6.f90 1.5 2025/07/13 10:41:57 s Exp $ ! ! r : a rate ! i : an index strem ! x : a cash flow stream ! pv : a preset value module subprog implicit none contains function pv(x, r, ii) result(v) real(8), intent(in) :: x(:) real(8), intent(in) :: r integer, intent(in) :: ii(:) real(8) :: v v = sum(x(:) / (1.0d0 + r / 12d0) ** ii(:)) end function end module subprog program ex2_6 use subprog implicit none integer, parameter :: n1 = 6, n2 = 6, n3 = 12, n4 = 12 real(8) pv1, pv2, pv3, pv4, r integer i1(n1), i2(n2), i3(n3), i4(n4) real(8) x1(n1), x2(n2), x3(n3), x4(n4) integer k ! input r = 0.12d0 i1(:) = (/(k, k=0, n1-1)/) i2(:) = (/(k, k=0, n2-1)/) i3(:) = (/(k, k=0, n3-1)/) i4(:) = (/(k, k=0, n4-1)/) x1(:) = -1000.0d0 x2(:) = -900.0d0 x2(1) = x2(1) - 1000.0d0 x3(:) = -1000.0d0 x4(:) = -900.0d0 x4(1) = x4(1) - 1000.0d0 ! calculation pv1 = pv(x1(:), r, i1(:)) pv2 = pv(x2(:), r, i2(:)) pv3 = pv(x3(:), r, i3(:)) pv4 = pv(x4(:), r, i4(:)) ! output write(*,*) '2.6.f90' write(*,*) 'input' write(*,'(a5,f7.2)') 'r=', r write(*,'(a5,12i7)') 'i1=', i1(:) write(*,'(a5,12i7)') 'i2=', i2(:) write(*,'(a5,12i7)') 'i3=', i3(:) write(*,'(a5,12i7)') 'i4=', i4(:) write(*,'(a5,12i7)') 'x1=', int(x1(:)) write(*,'(a5,12i7)') 'x2=', int(x2(:)) write(*,'(a5,12i7)') 'x3=', int(x3(:)) write(*,'(a5,12i7)') 'x4=', int(x4(:)) write(*,*) 'output' write(*,'(a5,i7)') 'pv1=', int(pv1) write(*,'(a5,i7)') 'pv2=', int(pv2) write(*,'(a5,i7)') 'pv3=', int(pv3) write(*,'(a5,i7)') 'pv4=', int(pv4) end program ! end