{
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.