! --------------------------------------------------------------------
! PROGRAM TableLookUp
! Given an array and a input value, this program can determine if
! the value if in the table. If it is, the array location where the
! value is stored is returned.
! --------------------------------------------------------------------
PROGRAM TableLookUp
IMPLICIT NONE
INTEGER, PARAMETER :: TableSize = 100
INTEGER, DIMENSION(1:TableSize) :: Table
INTEGER :: ActualSize
INTEGER :: Key
INTEGER :: Location
INTEGER :: i
INTEGER :: end_of_input
READ(*,*) ActualSize ! read in the actual size and table
READ(*,*) (Table(i), i = 1, ActualSize)
WRITE(*,*) "Input Table:"
WRITE(*,*) (Table(i), i = 1, ActualSize)
WRITE(*,*)
DO ! keep reading in a key value
WRITE(*,*) "A search key please --> "
READ(*,*,IOSTAT=end_of_input) Key
IF (end_of_input < 0) EXIT ! EXIT of end-of-file reached
Location = LookUp(Table, ActualSize, Key) ! do a table look up
IF (Location > 0) THEN ! display the search result
WRITE(*,*) "Key value ", Key, " appears in location ", Location
ELSE
WRITE(*,*) "Key value ", Key, " is not found"
END IF
END DO
WRITE(*,*)
WRITE(*,*) "Table lookup operation completes"
CONTAINS
! --------------------------------------------------------------------
! INTEGER FUNCTION LookUp():
! Given an array x() and a key value Data, this function determines
! if Data is a member of x(). If it is, the index where Data can be
! found is returned; otherwise, it returns 0.
! --------------------------------------------------------------------
INTEGER FUNCTION LookUp(x, Size, Data)
IMPLICIT NONE
INTEGER, DIMENSION(1:), INTENT(IN) :: x
INTEGER, INTENT(IN) :: Size
INTEGER, INTENT(IN) :: Data
INTEGER :: i
LookUp = 0 ! assume not found
DO i = 1, Size ! check each array element
IF (x(i) == Data) THEN ! is it equal to Data?
LookUp = i ! YES, found. Record location
EXIT ! and bail out
END IF
END DO
END FUNCTION LookUp
END PROGRAM TableLookUp