SEARCH and SEARCH ALL
Problem Description
Search tables using linear SEARCH and binary SEARCH ALL.
Expected Output
Finding elements in tables
Hints
SEARCH for linear search, SEARCH ALL for binary (table must be sorted).
Solution
IDENTIFICATION DIVISION.
PROGRAM-ID. TABSRCH.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-EMP-TABLE.
05 WS-EMP OCCURS 5 TIMES
ASCENDING KEY IS WS-EMP-ID
INDEXED BY EMP-IDX.
10 WS-EMP-ID PIC 9(4).
10 WS-EMP-NAME PIC X(15).
10 WS-EMP-SAL PIC 9(6).
01 WS-SEARCH-ID PIC 9(4).
01 WS-FOUND PIC 9 VALUE 0.
PROCEDURE DIVISION.
* Initialize sorted table
MOVE 1001 TO WS-EMP-ID(1).
MOVE "ALICE" TO WS-EMP-NAME(1).
MOVE 50000 TO WS-EMP-SAL(1).
MOVE 1002 TO WS-EMP-ID(2).
MOVE "BOB" TO WS-EMP-NAME(2).
MOVE 55000 TO WS-EMP-SAL(2).
MOVE 1003 TO WS-EMP-ID(3).
MOVE "CHARLIE" TO WS-EMP-NAME(3).
MOVE 60000 TO WS-EMP-SAL(3).
MOVE 1004 TO WS-EMP-ID(4).
MOVE "DIANA" TO WS-EMP-NAME(4).
MOVE 65000 TO WS-EMP-SAL(4).
MOVE 1005 TO WS-EMP-ID(5).
MOVE "EDWARD" TO WS-EMP-NAME(5).
MOVE 70000 TO WS-EMP-SAL(5).
DISPLAY "ENTER EMPLOYEE ID TO SEARCH: ".
ACCEPT WS-SEARCH-ID.
* Binary search (faster, table must be sorted)
SEARCH ALL WS-EMP
AT END
DISPLAY "EMPLOYEE NOT FOUND"
WHEN WS-EMP-ID(EMP-IDX) = WS-SEARCH-ID
DISPLAY "FOUND: " WS-EMP-NAME(EMP-IDX)
DISPLAY "SALARY: " WS-EMP-SAL(EMP-IDX)
END-SEARCH.
STOP RUN.
Explanation:
SEARCH ALL requires ASCENDING/DESCENDING KEY and INDEXED BY. Much faster than linear.