放送大学で興味深い二つの探索プログラムが紹介されていたのでここで紹介しよう。
放送大学とは BS231 チャンネルでの TV番組である、と思っていたら
千葉市に実際のキャンパスもあるようである。
ここでは「データ構造とプログラミング」の第2回「配列」で取り上げられた番組の中の
プログラムを実際に IBM System i で実行可能なILE-RPGソースに書き直したものを
読者に紹介する。
大学とは言っても、実際にプログラム開発のある人から見れば高校 1年生レベルの内容なので
興味のある人は TV番組を録画して見ることをぜひお勧めする。
最初にここで紹介するのは線形探索( Linear Search ) と呼ばれる、配列を順次に
LOOPして読み取っていく方法である。
0001.00 H DFTNAME(TESTLINS) DATEDIT(*YMD/) 0002.00 F********** TESTLINS: 線形探索 **************************************** 0003.00 F* 0004.00 F********************************************************************** 0005.00 D LIN_SEARCH PR 4S 0 0006.00 D AR 4S 0 VALUE DIM(10) 0007.00 D KEY 4S 0 VALUE 0008.00 D NUM 4S 0 VALUE 0009.00 0010.00 D AR S 4S 0 DIM(10) 0011.00 D TRUE S 4S 0 INZ(0) 0012.00 D FALSE S 4S 0 INZ(-1) 0013.00 D KEY S 4S 0 INZ(35) 0014.00 D RES S 4S 0 0015.00 D FLD4 S 4A 0016.00 D NUM S 4S 0 0017.00 0018.00 C '* TESTLINS *'DSPLY ANS 1 0019.00 C EVAL NUM = %ELEM(AR) 0020.00 C EVAL RES = LIN_SEARCH(AR:KEY:NUM) 0021.00 C IF RES = FALSE 0022.00 C '* NOT FOUND 'DSPLY ANS 0023.00 C ELSE 0024.00 C MOVE RES FLD4 0025.00 C DOW %SUBST(FLD4:1:1)= '0' 0026.00 C EVAL FLD4 = %SUBST(FLD4:2:3) 0027.00 C ENDDO 0028.00 C 'FOUND AT ' CAT FLD4 DSP40 40 0029.00 C DSP40 DSPLY ANS 0030.00 C ENDIF 0031.00 C SETON LR 0032.00 C RETURN 0033.00 C****************************************************** 0034.00 C *INZSR BEGSR 0035.00 C****************************************************** 0036.00 C Z-ADD 0 AR(1) 0037.00 C Z-ADD 5 AR(2) 0038.00 C Z-ADD 10 AR(3) 0039.00 C Z-ADD 15 AR(4) 0040.00 C Z-ADD 20 AR(5) 0041.00 C Z-ADD 25 AR(6) 0042.00 C Z-ADD 30 AR(7) 0043.00 C Z-ADD 35 AR(8) 0044.00 C Z-ADD 40 AR(9) 0045.00 C Z-ADD 45 AR(10) 0046.00 C ENDSR 0047.00 C****************************************************** 0048.00 P LIN_SEARCH B EXPORT 0049.00 C****************************************************** 0050.00 D PI 4S 0 0051.00 D AR 4S 0 VALUE DIM(10) 0052.00 D KEY 4S 0 VALUE 0053.00 D NUM 4S 0 VALUE 0054.00 D N S 4S 0 0055.00 0056.00 C 1 DO NUM N 0057.00 C KEY IFEQ AR(N) 0058.00 C RETURN N 0059.00 C ENDIF 0060.00 C ENDDO 0061.00 C RETURN FALSE 0062.00 P E
プロシージャー : |
|
0025.00 C DOW %SUBST(FLD4:1:1)= '0' 0026.00 C EVAL FLD4 = %SUBST(FLD4:2:3) 0027.00 C ENDDO