package body Bin_Search is -- This procedure no longer contains an error procedure Binary_Search (List : in Integer_Array; Value : in Integer; Location : out Natural) is Found : Boolean; -- Has Value been found yet? Midpoint : Natural; -- Index of search area's midpoint First_Index : Natural; -- First index in current search area Last_Index : Natural; -- Last index in current search area begin Found := False; First_Index := List'First; Last_Index := List'Last; -- Search until element found or the current search area is empty. -- Current search area is List (First_Index..Last_Index) loop exit when First_Index > Last_Index or Found; -- Find middle element in the current search area. Midpoint := (First_Index + Last_Index) / 2; -- Compare Value to middle element in search area. if List(Midpoint) = Value then Found := True; elsif Value < List(Midpoint) then Last_Index := Midpoint - 1; -- Search area now 1st half else First_Index := Midpoint + 1; -- Search area now 2nd half end if; end loop; -- Set value of Location. if Found then Location := Midpoint; else Location := 0; end if; end Binary_Search; end Bin_Search;