Files
harbour-core/contrib/hbnf/amedian.prg
vszakats 9687850865 2013-03-16 02:10 UTC+0100 Viktor Szakats (harbour syenar.net)
* (all files)
    * stripped svn header
    * minor cleanups
    ; use following command to find out the history of files:
       git log
       git log --follow
       git blame
       git annotate
2013-03-16 02:11:42 +01:00

54 lines
1.3 KiB
Plaintext

/*
* Author....: Ralph Oliver, TRANSCOM SYSTEMS
* CIS ID....: 74030,703
*
* This is an original work by Ralph Oliver and is placed in the
* public domain.
*
* This program uses the preprocessor #defines and #command
* by David Husnian.
*
* Modification history:
* ---------------------
*
* Rev 1.1 15 Aug 1991 23:05:22 GLENN
* Forest Belt proofread/edited/cleaned up doc
*
* Rev 1.0 07 Jun 1991 23:03:20 GLENN
* Initial revision.
*
*/
#define FORCE_BETWEEN( x, y, z ) ( y := Max( Min( y, z ), x ) )
FUNCTION ft_AMedian( aArray, nStart, nEnd )
LOCAL nTemplen, aTemparray, nMiddle1, nMiddle2, nMedian
__defaultNIL( @nStart, 1 )
__defaultNIL( @nEnd, Len( aArray ) )
// Make Sure Bounds are in Range
FORCE_BETWEEN( 1, nEnd, Len( aArray ) )
FORCE_BETWEEN( 1, nStart, nEnd )
// Length of aTemparray
nTemplen := ( nEnd - nStart ) + 1
// Initialize aTemparray
aTemparray := ACopy( aArray, Array( nTemplen ), nStart, nTemplen )
// Sort aTemparray
aTemparray := ASort( aTemparray )
// Determine middle value(s)
IF ( nTemplen % 2 ) == 0
nMiddle1 := aTemparray[ nTemplen / 2 ]
nMiddle2 := aTemparray[ Int( nTemplen / 2 ) + 1 ]
nMedian := Int( ( nMIddle1 + nMiddle2 ) / 2 )
ELSE
nMedian := aTemparray[ Int( nTemplen / 2 ) + 1 ]
ENDIF
RETURN nMedian