Deprecated:  The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
!-----  Ex8_5: 抽選を行うサブルーチン -----
!        n1 = 応募者数, n2= 当選者数, kk : 当選者番号
   SUBROUTINE chusen(kk, n1, n2)
      INTEGER, INTENT(IN) :: n1, n2
      INTEGER, INTENT(OUT) :: kk(n1)
      INTEGER :: i, ir, j
      REAL :: x
      kk = (/ ( i, i = 1, n1) /)
      PRINT*,'乱数発生のシード(なるべく大きい整数)を入れてください:'
      READ*, ir
      DO i = 1, MIN(n1 ,n2)
         CALL ran(ir, x)
         j = i + INT( x*(n1 - i + 1) )
         CALL swap( kk(j), kk(i) )
      END DO
   END SUBROUTINE
!-----   入れ替え
   SUBROUTINE swap(i, j)
      INTEGER, INTENT(INOUT) :: i, j
      INTEGER :: k
         k = i; i = j; j = k
   END SUBROUTINE
!-----   乱数発生
   SUBROUTINE ran(i, r)
      INTEGER, INTENT(INOUT):: i
      REAL, INTENT(OUT) :: r
      INTEGER, PARAMETER :: mask = 2147483647, a = 48828125
         i = IAND( a*i, mask )
         r = REAL(i)/REAL(mask)
   END SUBROUTINE
!-----   入出力
   PROGRAM main
      INTEGER, ALLOCATABLE :: number(:)
      INTEGER :: n, m, i
      PRINT*, '応募者数は?';   READ*, n
      PRINT*, '当選者数は?';   READ*, m
      ALLOCATE( number(n) )
      CALL chusen( number, n, m )
!-----   出力
      PRINT *,' 順位    番号'
      DO i = 1, MIN(n, m)
         PRINT '(2X, I4, I8 )', i, number(i)
      END DO
   END