There are two of them - I only have to find the bugs Examine the pseudocode that
ID: 3913136 • Letter: T
Question
There are two of them - I only have to find the bugs
Examine the pseudocode that follows the introductory comments, then find and correct all the bugs. Correct the code in this file, and be sure to clearly highlight the corrections.
1. Debugging
Each time a salesperson sells a car at the Pardeeville New and Used Auto Dealership, a record is created containing the salesperson’s name and the amount of the sale. Sales of new and used cars are kept in separate files because several reports are created for each sale type. However, management has requested a merged file so that all of the sales, whether the vehicle was new or used, are displayed together for each salesperson. The following code is intended to merge the files that have already been sorted by salesperson ID number.
start
Declarations
string newSalesperson
num newAmount
string usedSalesperson
num usedAmount
string bothAtEof = "N"
string HIGH_NAME = "ZZZZZ"
InputFile newSales
InputFile usedSales
OutputFile allsales
getReady()
while bothAtEof = "Y"
detailLoop()
endwhile
finish()
stop
getReady()
open newSales "NewSales.dat"
open usedSales "UsedSales.dat"
open allSales "AllSales.dat"
input newSalesperson, newAmount from newSales
if eof then
usedSalesperson = HIGH_NAME
endif
input usedSalesperson, usedAmount from usedSales
if eof then
usedsalesPerson = HIGH_NAME
endif
if newSalesperson = HIGH_NAME AND usedSalesperson = HIGH_NAME then
bothAtEof = "Y"
endif
return
detailLoop()
if newSalesperson > usedSalesperson then
output usedSalesperson, usedAmount to allSales
input newSalesperson, newAmount from newSales
if eof then
usedSalesperson = HIGH_NAME
endif
else
output newSalesperson, newAmount to allSales
input usedSalesperson, usedAmount from usedSales
if eof then
newSalesperson = HIGH_NAME
endif
endif
if newSalesperson = HIGH_NAME AND usedSalesperson = HIGH_NAME then
bothAtEof = "Y"
endif
return
finish()
close newSales
close usedSales
close allSales
return
2. Debugging
Two senior class homerooms at Littleville High School are having a fundraising drive for the prom. Each time a student solicits a contribution, a record is created with the student's name and the value. Two files have been created for Homeroom A and Homeroom B. Each file is sorted in contribution value order from highest to lowest. This program merges the two files.
start
Declarations
string roomAName
num roomAValue
string roomBName
num roomBValue
string bothFilesDone = "N"
num HIGH_VALUE = 999999
InputFile roomAFile
InputFile roomBFile
InputFile mergedFile
getReady()
while bothFilesDone = "N"
detailLoop()
endwhile
allDone()
stop
getReady()
open roomAFile "roomAFile.dat"
open roomBFile "roomBFile.dat"
open mergedFile "mergedFile.dat"
readA()
readB()
checkBoth()
return
readA()
input roomAName, roomAValue from roomAFile
if eof then
roomAValue = HIGH_VALUE
endif
return
readB()
input roomBName, roomBValue from roomBFile
if eof then
roomBValue = HIGH_VALUE
endif
return
checkBoth()
if roomAValue = HIGH_VALUE AND roomBValue = HIGH_VALUE then
bothFilesDone = "Y"
endif
return
detailLoop()
if roomAValue > roomBValue then
output roomBName, roomBValue to mergedFile
readA()
else
output roomAName, roomAValue to mergedFile
readB()
endif
return
allDone()
close roomAFile
close roomBFile
close mergeFile
return
Explanation / Answer
Debugging 1:
start
Declarations
string newSalesperson
num newAmount
string usedSalesperson
num usedAmount
string bothAtEof = "N"
string HIGH_NAME = "ZZZZZ"
InputFile newSales
InputFile usedSales
OutputFile allsales
getReady()
while bothAtEof = "Y" /* It should be while bothAtEof = "N" */
detailLoop()
endwhile
finish()
stop
getReady()
open newSales "NewSales.dat"
open usedSales "UsedSales.dat"
open allSales "AllSales.dat"
input newSalesperson, newAmount from newSales
if eof then
usedSalesperson = HIGH_NAME // it shound be newSalesperson=HIGH_NAME
endif
input usedSalesperson, usedAmount from usedSales
if eof then
usedsalesPerson = HIGH_NAME
endif
if newSalesperson = HIGH_NAME AND usedSalesperson = HIGH_NAME then
bothAtEof = "Y"
endif
return
detailLoop()
if newSalesperson > usedSalesperson then
output usedSalesperson, usedAmount to allSales
input newSalesperson, newAmount from newSales /* it should be input usedSalesperson, usedAmount from usedSales */
if eof then
usedSalesperson = HIGH_NAME
endif
else
output newSalesperson, newAmount to allSales
input usedSalesperson, usedAmount from usedSales /* It should be input newSalesperson, newAmount from newSales */
if eof then
newSalesperson = HIGH_NAME
endif
endif
if newSalesperson = HIGH_NAME AND usedSalesperson = HIGH_NAME then
bothAtEof = "Y"
endif
return
finish()
close newSales
close usedSales
close allSales
return
Explanation:
1. In the main function after variable declaration there is a while loop which states that the loop should run until bothAtEof="Y". while(bothAtEof="Y") should be while(bothAtEof="N") because bothAtEof variable was initialized with "N" and bothAtEof="Y" means the both files are empty so it will be infinte loop or thwors error bcause there is no information to copy into allSales.
2. The 6th line in getReady() method should be newSalesperson=HIGH_NAME because we are taking input from newSales and saving in newSalesperson and newAmount variables. When it reaches end of file we have to initialize newSalesperson to HIGH_NAME so that we can further check the condition and put bothAtEof variable to "Y". So that it can enter into while loop.
3. The 3rd line in detailLoop() method should be input usedSalesperson, usedAmount from usedSales because the above condition is if(newSalesperson>usedSalesperson) if its true the usedSales details will be moved to allSales. So now we have to take usedSales details to compare with newSales details bcoz usedSales details have already moved to allSales file. OR you can check the next lines if end of file occurs usedSalesperson=HIGH_NAME
4. The 9th line in detailLoop() method should be input newSalesperson, newAmount from newSales because the above condition is if(newSalesperson>usedSalesperson) if its false the newSales details will be moved to allSales. So now we have to take newSales details to compare with usedSales details bcoz newSales details have already moved to allSales file. OR you can check the next lines if end of file occurs newSalesperson=HIGH_NAME
Debugging 2:
start
Declarations
string roomAName
num roomAValue
string roomBName
num roomBValue
string bothFilesDone = "N"
num HIGH_VALUE = 999999
InputFile roomAFile
InputFile roomBFile
InputFile mergedFile
getReady()
while bothFilesDone = "N"
detailLoop()
endwhile
allDone()
stop
getReady()
open roomAFile "roomAFile.dat"
open roomBFile "roomBFile.dat"
open mergedFile "mergedFile.dat"
readA()
readB()
checkBoth()
return
readA()
input roomAName, roomAValue from roomAFile
if eof then
roomAValue = HIGH_VALUE
endif
return
readB()
input roomBName, roomBValue from roomBFile
if eof then
roomBValue = HIGH_VALUE
endif
return
checkBoth()
if roomAValue = HIGH_VALUE AND roomBValue = HIGH_VALUE then
bothFilesDone = "Y"
endif
return
detailLoop()
if roomAValue > roomBValue then
output roomBName, roomBValue to mergedFile /* It should be output roomAName, roomAValue to mergedFile */
readA()
else
output roomAName, roomAValue to mergedFile /* it should be output roomBName, roomBValue to mergedFile */
readB()
endif
/* Here checkBoth() method should be called */
return
allDone()
close roomAFile
close roomBFile
close mergeFile
return
Explanation:
1. The 2nd line in detailLoop() method should be output roomAName, roomAValue from roomAFile because the introductory comment of debbuging 2 states that Each file is sorted in contribution value order from highest to lowest. in if (roomAValue> roomBValue) is true means roomAFile values should be copied to mergerFile.
2. The 5th line in detailsLoop() method should be output roomBName, roomBValue from roomBFile beacuse as stated above if if condition is false then roomBFile values should be copied to mergeFile.
3. After endif in detailLoop() function there should be checkBoth() function because it will check for the both files are at EOF or not. If it is true then the "Y" is assigned to bothFileDone variable and then while(bothFileDone="N") will be failed so that we can exit from the loop. otherwise it will turn to infinite loop.