私は Schaum の Outline of Programming With Fortran 77 本を使用しています。値のグループをブラケットする方法を使用したバイナリ検索の例があります。まず、コードは次のとおりです。
INTEGER X(100)
INTEGER RANGE
INTEGER START , FINISH
PRINT *, 'Number of values ?'
READ *, N
DO 10 I = 1, N
READ *, X(I)
END DO
PRINT *, 'Enter Value'
READ *, VAL
START = 1
FINISH = N
RANGE = FINISH - START
MID = (START + FINISH) /2
DO WHILE( X(MID) .NE. VAL .AND. RANGE .NE. 0)
IF (VAL .GT. X(MID))THEN
START = MID
ELSE
FINISH = MID
END IF
RANGE = FINISH - START
MID = (START + FINISH)/2
END DO
IF( X(MID) .NE. VAL) THEN
PRINT *, VAL, 'NOT FOUND'
ELSE
PRINT *, 'VALUE AT' , MID
END IF
END
問題は、次のような7つの値の配列を入力すると
2 | 9 | 11 | 23 | 49 | 55 | 66
たとえば、次の場合に 66 を検索します。
ミッド = 5
、次のループの新しい MID は 6 になります。しかし、それが 6 のときは、次のループのためにインクリメントできません。
ミッド = (スタート + フィニッシュ)/2 = (6+7)/2 = 6
もちろん、7になるはずです。
それはまだ6です。もちろん、私のプログラムは決して出力を与えません。ここで何をしようか?