Нужна помощь с ошибкой алгоритма бинарного поиска - PullRequest
2 голосов
/ 18 апреля 2011

При использовании компилятора 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 ]

6 голосов
/ 18 апреля 2011

Я не собираюсь допускать, что в последний раз я использовал FORTRAN, но он выглядит совсем не так, как я помню.Так что это всего лишь предположение.

Основываясь на сообщении об ошибке, я бы сказал, что это в этой строке (вы не сказали, какой):

IF (Found == .TRUE.) THEN

Опять просто гадание, вы обычноне проверяйте логическое значение, сравнивая его с истиной / ложью, вы используете его напрямую:

IF (Found) THEN
5 голосов
/ 18 апреля 2011

Реляционный оператор .EQ. (или ==), как и .NE. (/=), .LT. (<) и т. Д., Предназначен только для сравнения чисел, для сравненияследует использовать .EQV. и .NEQV.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...