---
# System prepended metadata

title: Search Binary(p.409)
tags: [Pascal Programming D1]

---

###### tags: `Pascal Programming D1`
# Search Binary(p.409)
##    Ver II (6/10/2021)

program search;
type
    ExamType = record
             Name : string[30];
             Mark : 0..100
    end;
const
     Num = 11;
var
   Student : array[1..Num] of ExamType;
   position : integer;

procedure InputData;
var
   Examfile : text;
   count : integer;
begin
  assign(Examfile, 'exam.txt');
  reset(Examfile);
  count := 0;
  while not eof(Examfile) do begin
        count := count + 1;
        with Student[count] do begin
              readln(Examfile, Name);
              readln(Examfile, Mark)
        end;
  end;
  close(Examfile)
end;

procedure Search(var index : integer);
var
   target : string;
   found : boolean;
   count : integer;
   top, bottom, middle : integer;
begin
     write('Enter name of student: ');
     readln(target);
     found := false;
     count := 0;
     index := 0;
     top := 1;
     bottom := Num;
     repeat
       count := count + 1;
       middle := (top + bottom) div 2;
       with Student[middle] do
       begin
            if target > Name
            then top := middle + 1
            else if target < Name
                 then bottom := middle - 1
                 else begin
                      index := middle;
                      found := true
                 end;
       end;
     until found or (count = Num);
     writeln(' Number of iterations = ', count)
end;

procedure DisplayResult(index : integer);
begin
  if index = 0
     then writeln('Record not found!')
     else with Student[Index] do
          begin
                writeln( 'Record found!');
                writeln( 'Student name = ', Name);
                writeln( 'Exam mark = ', Mark);
                readln;
          end;
end;

begin
  InputData;
  Search(position);
  DisplayResult(position)
end.
