Pesquisa binária em questão de matriz usando Fortran
Estou usando o livro Schaum's Outline of Programming With Fortran 77, e há um exemplo sobre a pesquisa binária usando o método bracketing group of values. Primeiro de tudo aqui está o código:
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
O problema é, quando eu entro 7 valores como matriz
2 | 9 | 11 | 23 | 49 | 55 | 66
E procure 66 por exemplo, quando
MID = 5
, o novo MID para o próximo loop se torna 6. Mas quando é 6, ele não pode ser incrementado para o próximo loop porque
MID = (START + FINISH) / 2 = (6 + 7) / 2 = 6
Onde deveria ser 7, claro.
Ainda em 6. E meu programa nunca me dá uma saída, é claro. O que devo fazer aqui?