Нужна помощь с ошибкой алгоритма бинарного поиска
Используя компилятор g95, у меня есть ошибка:
Error: Operands of comparison operator '.EQ.' at (1) are LOGICAL(4)/LOGICAL(4)
Я без понятия что это значит. Я включаю подпрограмму. У вас есть идеи, как это исправить?
Большое спасибо за ваше время.
SUBROUTINE search(iarray, ItemSought, Found, Location)
CHARACTER(20), DIMENSION(50),INTENT(IN)::itemarray
CHARACTER(20)::ItemSought
LOGICAL, INTENT(OUT)::Found
INTEGER, INTENT(OUT)::Location
INTEGER:: First, Last, Middle
WRITE(*,'(1x,A)',ADVANCE="NO"),"What are you searching for? "
READ*, ItemSought
First=1
Last=SIZE(Iarray)
FOUND = .FALSE.
DO
IF ((First > Last) .OR. Found) RETURN
Middle = (First+Last)/2
IF (ItemSought < Iarray(Middle)) THEN
Last=Middle-1
ELSE IF (ItemSought > Iarray(Middle)) THEN
First=Middle+1
ELSE
Found = .TRUE.
Location = Middle
END IF
END DO
IF (Found == .TRUE.) THEN
PRINT*, Itemsought
END SUBROUTINE
2 ответа
Решение
Я не собираюсь признавать, что в прошлый раз я использовал FORTRAN, но он выглядит совсем не так, как я помню. Так что это всего лишь предположение.
Исходя из сообщения об ошибке, я бы сказал, что это в этой строке (вы не сказали, какой):
IF (Found == .TRUE.) THEN
Опять же, просто догадываясь, вы обычно не проверяете логическое значение, сравнивая его с истиной / ложью, вы используете его напрямую:
IF (Found) THEN
.EQ.
(или же ==
) оператор отношений, так же, как .NE.
(/=
), .LT.
(<
) и так далее, для сравнения только чисел, для сравнения логических значений, которые вы должны использовать .EQV.
а также .NEQV.