{ BNSEARCH.pas - Carries out a binary search of the phone number text file Author - David Zhou Date - Nov. 5/ 2010 } program BNSEARCH; uses crt; const MAXNUM = 1500; NOTFND = 32014; type ArrayType = array[1..MAXNUM] of string [12]; var igPass :integer; {------FUNCTIONS STARTS-----} function BinSearch (var aspArray :ArrayType; spSearch :string; ipUBound, ipLBound :integer) :integer; var iPass, iCheckIndex :integer; begin inc(igPass); iCheckIndex := ((ipUBound - ipLBound) div 2) + ipLBound; if (ipUBound - ipLBound = 1) and (aspArray[iCheckIndex] <> spSearch) then begin BinSearch := NOTFND; end else begin if (aspArray[iCheckIndex] = spSearch) then begin BinSearch := iCheckIndex; end else if (spSearch > aspArray[iCheckIndex]) then begin BinSearch := BinSearch(aspArray, spSearch, ipUBound, iCheckIndex); end else if (spSearch < aspArray[iCheckIndex]) then begin BinSearch := BinSearch(aspArray, spSearch, iCheckIndex, ipLBound); end; end; end; function LinSearch (var aspArray :ArrayType; spSearch :string) :integer; var iCount :integer; begin LinSearch := NOTFND; for iCount := 1 to MAXNUM do begin if (aspArray[iCount] = spSearch) then begin LinSearch := iCount; end; end; end; {----MAIN PROGRAM STARTS----} var asPhone :ArrayType; fhTextFile :text; iCount, iIndex, iUBound, iLBound :integer; sSearch, sRes :string; begin repeat clrscr; igPass := 0; assign(fhTextFile,'PHONE'); reset(fhTextFile); iCount := 1; for iCount := 1 to MAXNUM do begin readln(fhTextFile,asPhone[iCount]); end; write('Please enter a phone number to search for ie. 905-555-5555: '); readln(sSearch); writeln; writeln; iUBound := MAXNUM; iLBound := 1; iIndex := BinSearch(asPhone, sSearch, iUBound, iLBound); writeln('----BINARY SEARCH RESULTS----'); writeln('Search passed ',igPass,' time(s)'); if (iIndex <= 1500) then begin writeln(sSearch, ' found at index number ', iIndex); end else begin writeln('Not found'); end; writeln; writeln('----LINEAR SEARCH RESULTS----'); iIndex := LinSearch(asPhone, sSearch); if (iIndex <= 1500) then begin writeln(sSearch, ' found at index number ', iIndex); end else begin writeln('Not found'); end; writeln; write('Run again? (Y/N) '); readln(sRes); until (sRes = 'N') or (sRes = 'n'); writeln('Please press a key to exit.'); readkey; end.