All pastes #1989728 Raw Edit

BNSEARCH.PAS

public text v1 · immutable
#1989728 ·published 2010-11-13 05:23 UTC
rendered paste body
{ 
           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.