program BinarySearch;

{ Binäre Suche. Wichtig: Die Tabelle muß sortiert sein. Dies wird an dieser
 Stelle nicht mit einem Sortieralgorithmus erzielt, sondern bei der
 Erzeugung der zufälligen Inhalte. Es ist aber auf jeden Fall sicher-
 zustellen. }

const
   TableSize = 20;

var
   Table    : Array[1..TableSize] of Byte;
   Index    : LongInt;
   Last	    : Real;
   Key	    : Byte;

function BinSearch(Key : Byte) : LongInt;
var
   L, R	  : LongInt;
   Middle : LongInt;
begin	  
   L := 1;
   R := TableSize + 1;
   while L < R do
   begin
      Middle := (L + R) div 2;
      if Table[Middle] < Key then L := Middle + 1
      else R := Middle;
   end;
   if Table[R] = Key then BinSearch := R else BinSearch := -1;
end;

begin
   Randomize;
   Last := 0;
   for Index := 1 to TableSize do
   begin
      Last := Last + Random(200 * 10 div TableSize) / 100;
      Table[Index] := Round(Last);
      Writeln(Index:2,': ',Table[Index]:2);
   end;
   Writeln;
   Write('Schlüssel: ');
   Readln(Key);
   Index := BinSearch(Key);
   if Index <> -1 then
      Writeln('Gefunden bei ',Index)
   else Writeln('Nicht gefunden.');
end.
