1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| program main
implicit none
integer, allocatable :: arr(:)
integer :: maxi
arr = (/ 1, 2, 2, 6, 8, 2 /)
print '(99i4)', arr
maxi = val_occ_max (arr)
print '(i4)', maxi
contains
function val_occ_max (v1)
integer, intent(in) :: v1(:)
integer, allocatable :: v2(:)
integer :: value, occur, val_occ_max, nb_occ_max
allocate(v2(size(v1)))
v2(:) = v1(:)
val_occ_max = 0
nb_occ_max = 0
do
if (size(v2) <= 0) exit
value = maxval(v2)
occur = count(v2 == value)
print '(3i4)', value, occur, size(v2)
if (occur > nb_occ_max) then
val_occ_max = value
nb_occ_max = occur
endif
v2 = pack(v1, v1 < value)
enddo
deallocate(v2)
end function val_occ_max
end program main |
Partager