Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

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.