如何使用 OO Fortran 从五个数字中获取最小的数字

How to obtain the smallest figure out of five figures using OO Fortran

在给定的五位数字中,用什么方法可以得到最小的数字。例如 23764。如何让 2 成为最小值。

把这个数字当成一个数字比如456879,为了得到最小的那个数字是4,我实现了下面的

program findsmallestFigure
implicit none
integer:: figure
integer:: c,smallest,largest

   smallest = 9
   largest = 0
   figure = 23456

 do while(figure .GT. 0 )  
   c = MOD(figure,10)
   largest = max(c,largest)
   smallest = min(c,smallest)
   figure = figure/10
 end do

  print *,'The smallest digit is',smallest
end

如何使用 Fortran 中的面向对象方法获得相同的结果?

创建一个包含所有结果的用户定义类型的模块,以及用于填充值的子例程

module numstat

    ! Holds the statistics of a figure
    type stat
        integer :: smallest, largest, count
    end type

    ! Constructor from a figure. Invoke by 'stat(1234)`
    interface stat
        module procedure :: calc_stat
    end interface

    contains

    ! Fill statistics type from a figure
    function calc_stat(fig) result(s)
    integer, intent(in) :: fig
    type(stat) :: s
    integer :: digit, f
        ! make a copy of the figure because intent(in) arguments
        ! are immutable (cannot change).
        f = fig 
        s%smallest = 9
        s%largest = 0
        s%count = 0

        do while(f > 0 )
            s%count = s%count + 1
            digit = mod(f, 10)
            s%largest = max(s%largest, digit)
            s%smallest = min(s%smallest, digit)
            f = f/10
        end do

    end function

end module

然后在主程序中使用模块

program SONumstat
use numstat
implicit none    
type(stat) :: s
integer :: figure

figure = 23456

s = stat(figure)

print *,'The number of digits is ', s%count
print *,'The smallest digit is ',s%smallest
print *,'The largest digit is ',s%largest

end program SONumstat