Programming C, C++, Java, PHP, Ruby, Turing, VB
Computer Science Canada 
Programming C, C++, Java, PHP, Ruby, Turing, VB  

Username:   Password: 
 RegisterRegister   
 Binary Search Help!
Index -> Programming, Turing -> Turing Help
View previous topic Printable versionDownload TopicSubscribe to this topicPrivate MessagesRefresh page View next topic
Author Message
Fallis15




PostPosted: Mon Jan 14, 2008 6:43 pm   Post subject: Binary Search Help!

I have to do this for school and i need to replace the "search" procedure so that its linear search and not binary search, but even before i can do that i have a problem. its this example i copied down from the workbook, but it doesn't give you the example of the text file to be opened and searched in so i dont know how to set up the text file so it reads properly, i make the name, adress and phone for each student justified so that it has the 30, 30, and 8 characters for each but it still doesnt find the student when i run the program and type in one of the names, any suggestions?

This is the program starting here
===================================================


% The "BinarySearch" program
% Finds a particular record in a sorted file
% Using the binary search method
type studentType :
record
name : string (30)
address : string (30)
phone : string (8)
end record
const maxFile := 500
var studentFile : array 1 .. maxFile of studentType
var count : int


procedure readFile
% Uses global variables
var students : int
open : students , "studentFile.txt", get
assert students > 0
count := 0
loop
get : students, skip
exit when eof (students)
count := count + 1
get : students, studentFile (count).name : 30,
studentFile (count).address : 30,
studentFile (count).phone : 8
end loop
put "There are ", count, " students in file"
end readFile


procedure search (studentFile : array 1 .. * of studentType, var key : string (*), count : int, var place : int)
var first, last, middle : int
if length (key) <= 30 then
% Pad with blanks
key := key + repeat (" ", 30 - length (key))
end if

% Initialize the binary search
first := 1
last := count
% Search until one element is left
% If key sought is in list this will be it
loop
middle := (first + last) div 2
if studentFile (middle).name >= key then
% Discard last half of list
last := middle
else
% Discard first half of list including middle
first := middle + 1
end if
% exit when only one record left
exit when first >= last
end loop

if studentFile (first).name = key then
place := first
else
place := 0
end if
end search

readFile
var nameSought : string (30)
loop
var place : int
put "Enter name of student to be found (\"stop\" to exit)"
get nameSought : *
exit when nameSought = "stop"
search (studentFile, nameSought, count, place)
if place not= 0 then
bind sought to studentFile (place)
put "name" : 30, "address" : 30, "phone" : 8
put sought.name : 30, sought.address : 30,
sought.phone : 8
else
put "Not In File!!"
end if
end loop


======================================================
Sponsor
Sponsor
Sponsor
sponsor
Display posts from previous:   
   Index -> Programming, Turing -> Turing Help
View previous topic Tell A FriendPrintable versionDownload TopicSubscribe to this topicPrivate MessagesRefresh page View next topic

Page 1 of 1  [ 1 Posts ]
Jump to:   


Style:  
Search: