FUNCTION RANDOM

   *  Returns a random number between any 2 numbers.

   *  Syntax: =RANDOM(Lower Value, Higher Value)

   *  Example:  lnX=RANDOM(5,10)

   PARAMETER anLow,anHigh

   lnRnumber=INT((RAND()*(anHigh-anLow+1))+anLow)

   RETURN lnRnumber


   FUNCTION A_RANDOM

   *  Returns an array of random numbers between any 2 numbers.

   *  The array must already be defined

   *  Syntax:   =A_RANDOM(ArrayName,Lower Value, Upper Value)

   *  Example:  =A_RANDOM('gaMyarray',17,25)

   PARAMETER lcA_name,anLow,anHigh

   lnAlength=ALEN(&lcA_name)

   FOR lni=1 TO lnAlength

     &lcA_name(lni)=INT((RAND()*(anHigh-anLow+1))+anLow)

   ENDFOR

   RETURN &lcA_name


   FUNCTION U_RANDOM

   *  Returns an array of unique random numbers  between any 2 numbers.

   *  The array must already be defined

   *  Syntax:   =U_RANDOM(Array Name, Lower Value, Upper Value)

   *  Example:  =U_RANDOM('gaMyarray',1,10)

   PARAMETER lcA_name,anLow,anHigh

   lnAlength=ALEN(&lcA_name)

   IF lnAlength>anHigh-anLow

      lnAlength=anHigh-anLow+1

   ENDIF

   &lcA_name=.F.

   lni=1

   DO WHILE lni<=lnAlength

      lnRnumber=INT((RAND()*(anHigh-anLow+1))+anLow)

      llNextnum=.T.

      IF lnRnumber=anLow .OR. lnRnumber=anHigh

         DO CASE

         CASE lnRnumber=anLow

            lnK=1

            DO WHILE lnK>0

               anLow=anLow+1

               lnK=ASCAN(&lcA_name,anLow)

            ENDDO

         CASE lnRnumber=anHigh

            lnK=1

            DO WHILE lnK>0

               anHigh=anHigh-1

               lnK=ASCAN(&lcA_name,anHigh)

            ENDDO

         ENDCASE

      ELSE

         lnK=ASCAN(&lcA_name,lnRnumber)

         IF lnK>0

            llNextnum=.F.

         ENDIF

      ENDIF

      IF llNextnum

         &lcA_name(lni)=lnRnumber

         lni=lni+1

      ENDIF

   ENDDO


发表评论