File: SEARCH.PS of Tape: Various/Decus/decus-3
(Source file text) 

PROGRAM BINARYSEARCH( FRAGMENT );

  CONST IMAX=100;

  VAR   WERT: ARRAY[1..IMAX] OF REAL;      (* STEIGEND SORTIERTES ARRAY *)
        ZAHL: REAL;                        (* GESUCHTE ZAHL *)
        I,                                 (* INDEX *)
        UNTERGRENZE, OBERGRENZE: INTEGER;  (* SUCHINTERVALL *)
        GEFUNDEN: BOOLEAN;                 (* BOOL'SCHE VARIABLE *)



BEGIN

    UNTERGRENZE := 1;   OBERGRENZE := IMAX;

    REPEAT

        I := ( UNTERGRENZE + OBERGRENZE )  DIV  2;

        GEFUNDEN :=  ZAHL=WERT[I];

        IF ZAHL>WERT[I] THEN UNTERGRENZE := I + 1
                        ELSE OBERGRENZE  := I - 1

    UNTIL GEFUNDEN OR (UNTERGRENZE>OBERGRENZE)

END.