H DFTNAME(TESTBINS) DATEDIT(*YMD/) F********** TESTBINS: 񕪒T **************************************** F* F********************************************************************** D BIN_SEARCH PR 4S 0 D AR 4S 0 VALUE DIM(10) D KEY 4S 0 VALUE D NUM 4S 0 VALUE D AR S 4S 0 DIM(10) D TRUE S 4S 0 INZ(0) D FALSE S 4S 0 INZ(-1) D KEY S 4S 0 INZ(35) D RES S 4S 0 D FLD4 S 4A D NUM S 4S 0 C '* TESTBINS *'DSPLY ANS 1 C EVAL NUM = %ELEM(AR) C EVAL RES = BIN_SEARCH(AR:KEY:NUM) C IF RES = FALSE C '* NOT FOUND 'DSPLY ANS C ELSE C MOVE RES FLD4 C DOW %SUBST(FLD4:1:1)= '0' C EVAL FLD4 = %SUBST(FLD4:2:3) C ENDDO C 'FOUND AT ' CAT FLD4 DSP40 40 C DSP40 DSPLY ANS C ENDIF C SETON LR C RETURN C****************************************************** C *INZSR BEGSR C****************************************************** C Z-ADD 0 AR(1) C Z-ADD 5 AR(2) C Z-ADD 10 AR(3) C Z-ADD 15 AR(4) C Z-ADD 20 AR(5) C Z-ADD 25 AR(6) C Z-ADD 30 AR(7) C Z-ADD 35 AR(8) C Z-ADD 40 AR(9) C Z-ADD 45 AR(10) C ENDSR C****************************************************** P BIN_SEARCH B EXPORT C****************************************************** D PI 4S 0 D AR 4S 0 VALUE DIM(10) D KEY 4S 0 VALUE D NUM 4S 0 VALUE D N S 4S 0 D LOW S 4S 0 INZ(0) D HIGH S 4S 0 D MIDDLE S 4S 0 C EVAL HIGH = NUM + 1 C DOW LOW <= HIGH C EVAL MIDDLE = (LOW + HIGH)/2 C IF KEY = AR(MIDDLE) C RETURN MIDDLE C ELSE C IF KEY <= AR(MIDDLE) C EVAL HIGH = MIDDLE - 1 C ELSE C EVAL LOW = MIDDLE + 1 C ENDIF C ENDIF C ENDDO C RETURN FALSE P E