Programming Logic and Design Sample Assignment

Programming Exercises

1. Complete the following tasks:

a. Design a className named Circle with fields named radius, area, and diameter. Include a constructor that sets the radius to 1. Include get methods for each field, but include a set method only for the radius. When the radius is set, do not allow it to be zero or a negative number. When the radius is set, calculate the diameter (twice the radius) and the area (the radius squared times pi, which is approximately 3.14). Create the className diagram and write the pseudocode that defines the className.

Answer: A sample solution follows

Diagram:

Circle

-radius: num

-area: num

-diameter: num

+setRadius(rad : num) : void

+getRadius() : num

+getArea() : num

+getDiameter() : num

Pseudocode:

className Circle

Declarations

private num radius

private num area

private num diameter

public Circle()

radius = 1

return

public void setRadius(num rad)

if rad <= 0 then

radius = 1

else

radius = rad

endif

diameter = 2 * radius

area = (radius * radius) * 3.14

return

public num getRadius()

return radius

public num getArea()

return area

public num getDiameter()

return diameter

endClass

b. Design an application that declares two Circles. Set the radius of one manually, but allow the other to use the default value supplied by the constructor. Then, display each Circle’s values.

Answer: A sample solution follows

Pseudocode:

start

Declarations

Circle myCircle

Circle yourCircle

myCircle.setRadius(5)

output “Circle 1 info:”

output myCircle.getRadius()

output myCircle.getArea()

output myCircle.getDiameter()

output “Circle 2 info:”

output yourCircle.getRadius()

output yourCircle.getArea()

output yourCircle.getDiameter()

stop

2. Complete the following tasks:

a. Design a className named PhoneCall with four fields: two strings that hold the 10-digit phone numbers that originated and received the call, and two numeric fields that hold the length of the call in minutes and the cost of the call. Include a constructor that sets the phone numbers to Xs and the numeric fields to 0. Include get and set methods for the phone number and call length fields, but do not include a set method for the cost field. When the call length is set, calculate the cost of the call at three cents per minute for the first 10 minutes, and two cents per subsequent minute. Create the className diagram and write the pseudocode that defines the className.

Answer: A sample solution follows

Diagram:

PhoneCall

-origCall: string

-recCall: string

-length: num

-cost: num

+setOrigCall(number : string) : void

+setRecCall(number : string) : void

+setLength(len : num) : void

+getOrigCall() : string

+getRecCall() : string

+getLength() : num

+getCost() : num

Pseudocode:

className PhoneCall

Declarations

private string origCall

private string recCall

private num length

private num cost

public PhoneCall()

origCall = “XXXXXXXXXX”

recCall = “XXXXXXXXXX”

length = 0

cost = 0

return

public void setOrigCall(string number)

origCall = number

return

public void setRecCall(string number)

recCall = number

return

public void setLength(num len)

length = len

if length > 10 then

cost = (3 * 10) + (2 * (length – 10))

else

cost = 3 * length

endif

return

public string getOrigCall()

return origCall

public string getRecCall()

return recCall

public num getLength()

return length

public num getCost()

return cost

endClass

b. Design an application that declares three PhoneCalls. Set the length of one PhoneCall to 10 minutes, another to 11 minutes, and allow the third object to use the default value supplied by the constructor. Then, display each PhoneCall’s values.

Answer: A sample solution follows

Pseudocode:

start

Declarations

PhoneCall callOne

PhoneCall callTwo

PhoneCall callThree

callOne.setLength(10)

callTwo.setLength(11)

output “PhoneCall 1 info:”

output “Originating number = ”, callOne.getOrigCall()

output “Receiving number = ”, callOne.getRecCall()

output “Call length = ”, callOne.getLength()

output “Call cost = ”, callOne.getCost()

output “PhoneCall 2 info:”

output “Originating number = ”, callTwo.getOrigCall()

output “Receiving number = ”, callTwo.getRecCall()

output “Call length = ”, callTwo.getLength()

output “Call cost = ”, callTwo.getCost()

output “PhoneCall 3 info:”

output “Originating number = ”,

callThree.getOrigCall()

output “Receiving number = ”, callThree.getRecCall()

output “Call length = ”, callThree.getLength()

output “Call cost = ”, callThree.getCost()

stop

c. Create a child className named InternationalPhoneCall. Override the parent className method that sets the call length to calculate the cost of the call at 40 cents per minute.

Answer: A sample solution follows

Diagram:

PhoneCall

-origCall: string

-recCall: string

-length: num

-cost: num

+setOrigCall(number : string) : void

+setRecCall(number : string) : void

+setLength(len : num) : void

+getOrigCall() : string

+getRecCall() : string

+getLength() : num

+getCost() : num

InternationalPhoneCall

+setLength(len : num) : void

Pseudocode:

className InternationPhoneCall inheritsFrom PhoneCall

public void setLength(num len)

length = len

cost = length * 40

return

endClass

d. Create the logic for an application that instantiates a PhoneCall object and an InternationalPhoneCall object and displays the costs for both.

Answer: A sample solution follows

Pseudocode:

start

Declarations

PhoneCall myCall

InternationalPhoneCall yourCall

myCall.setLength(15)

yourCall.setLength(14)

output “PhoneCall cost:”

output myCall.getCost()

output “InternationalPhoneCall cost:”

output yourCall.getCost()

stop

3. Assigned

4. Complete the following tasks:

a. Create a className named Meal that includes a string variable for the meal’s description, an array of strings that holds up to five of the Meal’s components (for example, “roasted chicken”, “mashed potatoes”, and “green beans”), and a numeric variable that holds the calorie count. Include a method that prompts the user for a value for each field. Also create two overloaded methods named display(). The first method takes no parameters and displays the Meal details. The second takes a numeric parameter that indicates how many of the Meal’s components to display, or an error message if the parameter value is less than 0 or more than 5.

Answer: A sample solution follows

Diagram:

(the student may or may not provide get and set methods)

Meal

-description: string

-components: string[]

-calories: num

+setValues() : void

+display() : void

+display(numOfComps : num) : void

Pseudocode:

className Meal

Declarations

private string description

private string components[5]

private num calories

public void setValues()

Declarations

num x = 0

output “Enter a description >> ”

input description

while x < 5

output “Enter a meal component >> ”

input components[x]

x = x + 1

endwhile

output “Enter the number of calories >> ”

input calories

return

public void display()

Declarations

num x = 0

output “Description: ”, description

output “Components: ”

while x < 5

output x + 1, “. ”, components[x]

x = x + 1

endwhile

output “Number of calories: ”, calories

return

public void display(num numOfComps)

Declarations

num x = 0

if (x => 0 AND x <= 5) then

output “Description: ”, description

output “Components: ”

while x < numOfComps

output x + 1, “. ”, components[x]

x = x + 1

endwhile

output “Number of calories: ”, calories

else

output “Invalid number of components”

endif

return

endClass

b. Create an application that declares two Meal objects and demonstrates how both method versions can be called.

Answer: A sample solution follows

Pseudocode:

start

Declarations

Meal lunch

Meal dinner

lunch.setValues()

dinner.setValues()

output “Calling display() with no args:”

lunch.display()

output “Calling display() with 1 arg:”

dinner.display(3)

stop

5. Complete the following tasks:

a. Create a className named Trip that includes four string variables: destination (for example, “London”), means of transportation (for example, “air”), departure date (for example, “12/15/2015”), and trip’s purpose (for example, “business”). Include two overloaded constructors. The default constructor sets each field to “XXX”. The nondefault constructor accepts four parameters—one for each field. Include two overloaded display() methods. The parameterless version displays all the Trip details. The second version accepts a string that represents a destination and displays the Trip details only if the Trip’s destination matches the parameter.

Answer: A sample solution follows

Diagram:

(the student may or may not provide get and set methods)

Trip

-destination: string

-meansOfTransport: string

-departDate: string

-purpose: string

+display() : void

+display(dest : string) : void

Pseudocode:

className Pay

Declarations

private string destination

private string meansOfTransport

private string departDate

private string purpose

public Trip()

destination = “XXX”

meansOfTransport = “XXX”

departDate = “XXX”

purpose = “XXX”

return

public Trip(string dest, string trans, string date,

string purp)

destination = dest

meansOfTransport = trans

departDate = date

purpose = purp

return

public void display()

output “Destination: ”, destination

output “Means of Transportation: ”,

meansOfTransport

output “Departure Date: ”, departDate

output “Purpose: ”, purpose

return

public void display(string dest)

if (destination = dest) then

output “Destination: ”, destination

output “Means of Transportation: ”,

meansOfTransport

output “Departure Date: ”, departDate

output “Purpose: ”, purpose

endif

return

endClass

b. Create an application that instantiates several Trip objects and demonstrates all the methods.

Answer: A sample solution follows

Pseudocode:

start

Declarations

Trip trip1

Trip trip2(“London”, “train”, “6/14/2015”,

“pleasure”)

Trip trip3(“Paris”, “air”, “12/16//2016”,

“business”)

trip1.display()

trip2.display()

trip3.display(“Boston”)

trip3.display(“Paris”)

stop

6. Assigned

7. Assigned

8. Complete the following tasks:

a. Create a className for a cell phone service named Message that includes a field for the price of the message. Create get and set methods for the field.

Answer: A sample solution follows

Diagram:

Message

#price: num

+setPrice(pr : num) : void

+getPrice() : num

Pseudocode:

className Message

Declarations

protected num price

public void setPrice(num pr)

price = pr

return

public num getPrice()

return price

endClass

b. Derive three subclasses—VoiceMessage, TextMessage, and PictureMessage. The VoiceMessage className includes a numeric field to hold the length of the message in minutes and a get and set method for the field. When a VoiceMessage’s length value is set, the price is calculated at 4 cents per minute. The TextMessage className includes a numeric field to hold the length of the message in words and a get and set method for the field. When a TextMessage’s length value is set, the price is calculated at 2 cents per word. The PictureMessage className includes a numeric field that holds the size of the picture in kilobytes and get and set methods for the field. When a PictureMessage’s length value is set, the price is calculated at 1 cent per kilobyte.

Answer: A sample solution follows

Diagram (VoiceMessage):

Message

#price: num

+setPrice(pr : num) : void

+getPrice() : num

VoiceMessage

-length: num

+setLength(len : num) : void

+getLength() : num

Pseudocode (VoiceMessage):

className VoiceMessage inheritsFrom Message

Declarations

private num length

public void setLength(num len)

length = len

price = length * 4

return

public num getLength()

return length

endClass

Diagram (TextMessage):

Message

#price: num

+setPrice(pr : num) : void

+getPrice() : num

TextMessage

-length: num

+setLength(len : num) : void

+getLength() : num

Pseudocode (TextMessage):

className TextMessage inheritsFrom Message

Declarations

private num length

public void setLength(num len)

length = len

price = 2 * length

return

public num getLength()

return length

endClass

Diagram (PictureMessage):

Message

#price: num

+setPrice(pr : num) : void

+getPrice() : num

PictureMessage

-size: num

+setSize(sz : num) : void

+getSize() : num

Pseudocode (PictureMessage):

className PictureMessage inheritsFrom Message

Declarations

private num size

public void setSize(num sz)

size = sz

price = size

return

public num getSize()

return size

endClass

c. Design a program that instantiates one object of each of the three classes, and demonstrate using all the methods defined for each className.

Answer: A sample solution follows

Pseudocode:

start

Declarations

VoiceMessage vMessage

TextMessage tMessage

PictureMessage pMessage

vMessage.setLength(15)

tMessage.setLength(24)

pMessage.setSize(124)

output “VoiceMessage info:”

output “Length = ”, vMessage.getLength()

output “Price = ”, vMessage.getPrice()

output “TextMessage info:”

output “Length = ”, tMessage.getLength()

output “Price = ”, tMessage.getPrice()

output “PictureMessage info:”

output “Size = ”, pMessage.getSize()

output “Price = ”, pMessage.getPrice()

stop

9. Complete the following tasks:

a. Create a className named Order that performs order processing of a single item. The className has four fields: customer name, customer number, quantity ordered, and unit price. Include set and get methods for each field. The set methods prompt the user for values for each field. This className also needs a computePrice() method to compute the total price (quantity multiplied by unit price) and a method to display the field values.

Answer: A sample solution follows

Diagram:

Order

-customerName: string

-customerNumber: num

-quantityOrdered: num

-unitPrice: num

+setCustomerName() : void

+setCustomerNumber() : void

+setQuantityOrdered() : void

+setUnitPrice() : void

+getCustomerName() : string

+getCustomerNumber() : num

+getQuantityOrdered() : num

+getUnitPrice() : num

+computePrice() : num

+displayValues() : void

Pseudocode:

className Order

Declarations

private string customerName

private num customerNumber

private num quantityOrdered

private num unitPrice

public void setCustomerName()

output “Enter a customer name:”

input customerName

return

public void setCustomerNumber()

output “Enter a customer number:”

input customerNumber

return

public void setQuantityOrdered()

output “Enter quantity ordered:”

input quantityOrdered

return

public void setUnitPrice()

output “Enter a unit price:”

input unitPrice

return

public string getCustomerName()

return customerName

public num getCustomerNumber()

return customerNumber

public num getQuantityOrdered()

return quantityOrdered

public num getUnitPrice()

return unitPrice

public num computePrice()

Declarations

num totalPrice

totalPrice = quantityOrdered * unitPrice

return totalPrice

public displayValues()

output “Customer name: ”, customerName

output “Customer number: ”, customerNumber

output “Quantity ordered: ”, quantityOrdered

output “Unit price: ”, unitPrice

return

endClass

b. Create a subclass named ShippedOrder that overrides computePrice() by adding a shipping and handling charge of $4.00.

Answer: A sample solution follows

Diagram:

Order

-customerName: string

-customerNumber: num

-quantityOrdered: num

-unitPrice: num

+setCustomerName() : void

+setCustomerNumber() : void

+setQuantityOrdered() : void

+setUnitPrice() : void

+getCustomerName() : string

+getCustomerNumber() : num

+getQuantityOrdered() : num

+getUnitPrice() : num

+computePrice() : num

+displayValues() : void

ShippedOrder

+computePrice() : num

Pseudocode:

className ShippedOrder inheritsFrom Order

public num computePrice()

Declarations

num price

num SHIPPING_CHARGE = 4

price = getQuantityOrdered() * getUnitPrice() +

SHIPPING_CHARGE

return price

endClass

c. Create the logic for an application that instantiates an object of each of these two classes. Prompt the user for data for the Order object and display the results; then prompt the user for data for the ShippedOrder object and display the results.

Answer: A sample solution follows

Pseudocode:

start

Declarations

Order order1

ShippedOrder order2

order1.setCustomerName()

order1.setCustomerNumber()

order1.setQuantityOrdered()

order1.setUnitPrice()

order1.displayValues()

output “Total Price: ”, order1.computePrice()

order2.setCustomerName()

order2.setCustomerNumber()

order2.setQuantityOrdered()

order2.setUnitPrice()

order2.displayValues()

output “Total Price: ”, order2.computePrice()

stop

d. Create the logic for an application that continuously prompts for order information until the user enters ZZZ for the customer name or 10 orders have been taken, whichever comes first. Ask the user whether each order will be shipped, and create an Order or a ShippedOrder appropriately. Store each order in an array. When the user finishes entering data, display all the order information taken as well as the total price that was computed for each order.

Answer: A sample solution follows

Pseudocode:

start

Declarations

num x

num shippedCnt

num notShippedCnt

num MAX = 10

string QUIT = “ZZZ”

ShippedOrder shippedOrders[MAX]

Order notShippedOrders[MAX]

string name = “AAA”

string type

x = 0

shippedCnt = 0

notShippedCnt = 0

while x < MAX AND name <> QUIT

output “Will this order be shipped?”

input type

if type = “yes” then

shippedOrders[shippedCnt].

setCustomerName()

shippedOrders[shippedCnt].

setCustomerNumber()

shippedOrders[shippedCnt].

setQuantityOrdered()

shippedOrders[shippedCnt].setUnitPrice()

name = shippedOrders[shippedCnt].

getCustomerName()

shippedCnt = shippedCnt + 1

else

notShippedOrders[notShippedCnt].

setCustomerName()

notShippedOrders[notShippedCnt].

setCustomerNumber()

notShippedOrders[notShippedCnt].

setQuantityOrdered()

notShippedOrders[notShippedCnt].

setUnitPrice()

name = notShippedOrders[notShippedCnt].

getCustomerName()

notShippedCnt = notShippedCnt + 1

endif

x = x + 1

endwhile

x = 0

while x < shippedCnt

shippedOrders[x].displayValues()

output “Total Price: ”,

shippedOrders[x].computePrice()

x = x + 1

endwhile

x = 0

while x < notShippedCnt

notShippedOrders[x].displayValues()

output “Total Price: ”,

notShippedOrders[x].computePrice()

x = x + 1

endwhile

stop

10. Complete the following tasks:

a. Design a method that calculates the cost of a weekly cleaning job for Molly’s Maid Service. Variables include a job location code of B for business, which costs $200, or R for residential, which costs $140. The method should throw an exception if the location code is invalid.

Answer:

public num calculateCost(string location)

Declarations

num jobCost

num BUSINESS_COST = 200

num RESIDENTIAL_COST = 140

if location = {"B"} then

jobCost = BUSINESS_COST

else

if location = {"R"} then

jobCost = RESIDENTIAL_COST

else

Exception mistake

throw mistake

endif

endif

return jobCost

b. Write a module that calls the module designed in Exercise 10a. If the module throws an exception, force the price of the job to 0.

Answer:

public void getMaidData()

Declarations

string location

num cost

output “Enter the location >>”

input location

try

cost = calculateCost(location)

endTry

catch(Exception mistake)

cost = 0

endCatch

output “The cost is: ”, cost

return

c. Write a module that calls the module designed in Exercise 10a. If the module throws an exception, require the user to reenter the location code.

Answer:

public void getMaidData()

Declarations

string location = “Z”

num cost

while location = “Z”

output “Enter the location >>”

input location

try

cost = calculateCost(location)

endTry

catch(Exception mistake)

location = “Z”

output “Reenter location”

endCatch

endwhile

output “The cost is: ”, cost

return

d. Write a module that calls the module designed in Exercise 10a. If the module throws an exception, force the location code to “R” and the base price to $140.

Answer:

public void getMaidData()

Declarations

string location

num cost

output “Enter the location >>”

input location

try

cost = calculateCost(location)

endTry

catch(Exception mistake)

location = “R”

cost = calculateCost(location)

endCatch

output “The cost is: ”, cost

return

11. Complete the following tasks:

a. Design a method that calculates the monthly cost to rent a roadside billboard. Variables include the size of the billboard (S,M, or L, for small, medium, or large) and its location ( H, M, or L for high-, medium-, or low-traffic areas). The method should throw an exception if the size or location code is invalid. The monthly rental cost is shown in Table 11-1.

High Traffic

Medium Traffic

Low Traffic

Small size

100.00

65.00

35.00

Medium size

150.00

95.00

48.00

Large size

210.00

130.00

60.00

Table 11-1 Monthly billboard rental rates

Answer:

public num calculateRent(string size, string location)

Declarations

num rent

num SMALL_HIGH = 100

num SMALL_MED = 65

num SMALL_LOW = 35

num MEDIUM_HIGH = 150

num MEDIUM_MED = 95

num MEDIUM_LOW = 48

num LARGE_HIGH = 210

num LARGE_MED = 130

num LARGE_LOW = 60

if size = {"S"} then

if location = “H” then

rent = SMALL_HIGH

else

if location = “M” then

rent = SMALL_MED

else

if location = “L” then

rent = SMALL_LOW

else

Exception mistake

throw mistake

endif

endif

endif

else

if size = {"M"} then

if location = “H” then

rent = MEDIUM_HIGH

else

if location = “M” then

rent = MEDIUM_MED

else

if location = “L” then

rent = MEDIUM_LOW

else

Exception mistake

throw mistake

endif

endif

endif

else

if size = “L” then

if location = “H” then

rent = LARGE_HIGH

else

if location = “M” then

rent = LARGE_MED

else

if location = “L” then

rent = LARGE_LOW

else

Exception mistake

throw mistake

endif

endif

endif

else

Exception mistake

throw mistake

endif

endif

endif

return rent

Performing Maintenance

1. A file named MAINTENANCE11-01.txt is included with your downloadable student files. Assume that this program is a working program in your organization and that it needs modifications as described in the comments (lines that begin with two slashes) at the beginning of the file. Your job is to alter the program to meet the new specifications.

Answer :


{`
// This program accepts product data about 100 products.

// It displays data about the most expensive product

// and the average price of all products.

// Modify the program to use a Product className to

// hold product data. Include a constructor

// that accepts all the data fields as parameters.`}

className Product

Declarations

private string idNum

private string description

private num price

public Product(string id, string descrip, num pr)

idNum = id

description = descrip

price = pr

return

public void setIdNum(string id)

idNum = id

return

public void setDescription(string des)

description = des

return

public void setPrice(num pr)

if pr < 0

price = 0

else

price = pr

endif

return

public string getIdNum()

return idNum

public string getDescription()

return description

public num getPrice()

return price

endClass

start

Declarations

num SIZE = 100

Product products[SIZE]

num x = 0

num total = 0

num avg

num highestPrice = 0

string highestId

string higestDescrip

while x < SIZE

products[x] = getData()

total = total + products[x].getPrice()

if products[x].getPrice() > highestPrice

highestPrice = products[x].getPrice()

highestDesc = products[x].getDescription()

highestId = products[x].getIdNum()

endif

x = x + 1

endwhile

avg = total / SIZE

output "The highest priced product is highestId,

highestDescrip, " $", highestPrice

output "The average price of all products is $", avg

stop

Product getData()

string id

string descrip

num price

output "Enter id or "

input id

output "Enter description "

input descrip

output "Enter price "

input price

Product p(id, descrip, price)

return p

Find the Bugs

1. Your downloadable files for Chapter 11 include DEBUG11-01.txt, DEBUG11-02.txt, and DEBUG11-03.txt. Each file starts with some comments that describe the problem. Comments are lines that begin with two slashes (//). Following the comments, each file contains pseudocode that has one or more bugs you must find and correct.

Answer :


DEBUG11-01

{`// This file defines the Patient className used by

// a doctor's office. The Patient className has two

// overloaded constructors -- a default constructor,

// and one that requires an ID number and full name.

// A demonstration program declares two Patient objects.`}

className Patient

Declarations

private string idNum

private string lastName

private string firstName

public Patient() // constructor should be public

idNum = "0000"

lastName = "XXXX"

firstName = "XXXX"

return

public Patient(string id, string last, string first)

idNum = id // field is idNum

lastName = last

firstName = first

return

public void display() // display() is a void method

output "Patient #", idNum, lastName, firstName

return

endClass

start

Declarations

Patient patient1

Patient patient2("234", "Lee", "Lydia")

patient1.display()

patient2.display()

stop

DEBUG 11-02

{'// This file defines the Building className'}

{'// and the Hotel className that inherits from it.'}

{'// A demonstration program declares and uses a Hotel object.'}

className Building

Declarations

private string streetAddress

private num squareFeet

public string getAddress()

return streetAddress

public num getSquareFeet()

{`// getSquareFeet() is a num method`}

return squareFeet

public void setSquareFeet(num feet)

{`// setSquareFeet() requires a parameter`}

squareFeet = feet

return

public void setStreetAddress(string address)

streetAddress = address // assign parameter to field

return

endClass

className Hotel inheritsFrom Building

Declarations

private num numberOfRooms

public Hotel(string address, num sqFt, num rooms)

setStreetAddress(address)

[`// must use set method to set address`]

setSquareFeet(sqFt)

{`// must use set method to set square feet`}

numberOfRooms = rooms

return

public num getNumberOfRooms

return numberOfRooms

endClass

start

Declarations

{`Hotel hotel("100 Main Street", 8000, 20)`}

output hotel.getAddress(), hotel.getSquareFeet(),

hotel.getNumberOfRooms()

{`// must use object with each method call`}

stop

DEBUG11-03

{`// This program gets and displays the user's ID number

// which must be between 1000 and 8999 inclusive.

// If the ID is invalid, then an exception is thrown

// When the exception is caught, an error message is

// displayed and the ID is set to 0.
`}

start

Declarations

num id

{`output "This program gets your ID"`}

try

id = getIdNum()

endtry

catch(Exception mistake)

output {"Invalid ID number"}

id = 0

{`// id should be set to a non-garbage value`}

endcatch

output {"ID is "}, id

{`// variable is id`}

stop

public num getIdNum()

Declarations

num idNum

num LOW = 1000

num HIGH = 8999

output {"Please enter ID number "}

input idNum

{`// variable is idNum`}

if idNum < LOW OR idNum > HIGH then

{`// test should be OR`}

Exception mistake

throw mistake

{`// throw the object mistake`}

endif

return idNum

{`// return the entered idNum`}

2. Your downloadable files for Chapter 11 include a file named DEBUG11-04.jpg that contains a className diagram with syntax and/or logical errors. Examine the className diagram and then find and correct all the bugs.

Answer :

Game Zone

1. a. Computer games often contain different characters or creatures. For example, you might design a game in which alien beings possess specific characteristics such as color, number of eyes, or number of lives. Create an Alien className. Include at least three data members of your choice. Include a constructor that requires a value for each data field and a method named toString() that returns a string that contains a complete description of the Alien.

Answer: A sample solution follows

Diagram:

Alien

-color: string

-numOfEyes: num

-numOfLives: num

+setColor(col : string) : void

+setNumOfEyes(eyes : num) : void

+setNumOfLives(lives : num) : void

+getColor() : string

+getNumOfEyes() : num

+getNumOfLives() : num

+toString() : void

Pseudocode:

className Alien

Declarations

private string color

private num numOfEyes

private num numOfLives

public Alien(string col, num eyes, num lives)

color = col

numOfEyes = eyes

numOfLives = lives

return

public void setColor(string col)

color = col

return

public void setNumOfEyes(num eyes)

numOfEyes = eyes

return

public void setNumOfLives(num lives)

numOfLives = lives

return

public string getColor()

return color

public num getNumOfEyes()

return numOfEyes

public num getNumOfLives()

return numOfLives

public void toString()

output “The alien is ”, color, “ with ”,

numOfEyes, “ eyes and ”, numOfLives, “lives”

return

endClass


b. Create two classes—Martian and Jupiterian—that descend from Alien. Supply each with a constructor that sets the Alien data fields with values you choose. For example, you can decide that a Martian object has four eyes but a Jupiterian object has only two.

Answer: A sample solution follows

Pseudocode (Martian):

className Martian inheritsFrom Alien

public Martian()

setColor(“green”)

setNumOfEyes(2)

setNumOfLives(1)

return

endClass

Pseudocode (Jupiterian):

className Jupiterian inheritsFrom Alien

public Jupiterian()

setColor(“red”)

setNumOfEyes(5)

setNumOfLives(9)

return

endClass


c. Create an application that instantiates one Martian and one Jupiterian. Call the toString() method with each object and display the results.

Answer: A sample solution follows

Pseudocode:

start

Declarations

Martian marty

Jupiterian jupy

marty.toString()

jupy.toString()

stop

2. In Chapter 2, you learned that in many programming languages you can generate a random number between 1 and a limiting value named LIMIT by using a statement similar to randomNumber = random(LIMIT). In Chapters 4 and 5, you created and fine-tuned the logic for a guessing game in which the application generates a random number and the player tries to guess it. As written, the game should work as long as the player enters numeric guesses. However, if the player enters a letter or other non-numeric character, the game throws an automatically generated exception. Improve the game by handling any exception so that the user is informed of the error and allowed to attempt correct data entry again.

Answer:

start

Declarations

num myRandomNumber

num guess = 0

num count

num LIMIT

string PROMPT = “Enter a number between 1 and ”

string CORRECT = “You guessed correctly!”

string HIGH = “You guessed too high!”

string LOW = “You guessed too low!”

myRandomNumber = random(LIMIT)

output PROMPT, LIMIT

count = 0

while guess <> myRandomNumber

try

guess = getGuess(LIMIT, PROMPT)

endtry

catch(Exception mistake)

guess = getGuess(LIMIT, PROMPT)

endcatch

count = count + 1

if guess = myRandomNumber then

output CORRECT

else

if guess > myRandomNumber then

print HIGH

else

print LOW

endif

endif

endwhile

output “It took ”, count, “ guesses!”

stop

public num getGuess(num limit, string prompt)

Declarations

num guess

output PROMPT, LIMIT

input guess

if guess not num then

Exception mistake

throw mistake

endif

return guess

3. a. In Chapter 10, you developed a Card className that contains a string data field to hold a suit and an integer data field for a value from 1 to 13. Now extend the className to create a className called BlackjackCard. In the game of Blackjack, each card has a point value as well as a face value. These two values match for cards with values of 2 through 10, and the point value is 10 for Jacks, Queens, and Kings (face values 11 through 13). For a simplified version of the game, assume that the value of the Ace is 11. (In the official version of Blackjack, the player chooses whether each Ace is worth 1 or 11 points.)

Answer: A sample solution follows

className BlackjackCard inheritsFrom Card

Declarations

private num pointValue

public void setPointValue()

{

Declarations

num value

num FACE_LIMIT = 11

num FACE_POINTS = 10

num ACE_POINTS = 11

value = getValue()

if value = 1 then

pointValue = ACE_POINTS

else

if value < FACE_LIMIT then

pointValue = value

else

pointValue = FACE_POINTS

endif

endif

}

public num getPointValue()

return pointValue

endClass

Declarations

private string suit

private num value

public void setSuit(num number)

{`
string[] SUITS[4] = "diamonds", "clubs", "hearts", "spades"
suit = SUITS[number - 1];
`}

public void setValue(num val)

value = val

return

public string getSuit()

return suit

public num getValue()

return value

endClass

start

Declarations

num SUIT_LIMIT = 4

num VALUE_LIMIT = 13

num suitNum

num value

Card card1

Card card2

suitNum = random(SUIT_LIMIT)

value = random(VALUE_LIMIT)

card1.setSuit(suitNum)

card1.setValue(value)

suitNum = random(SUIT_LIMIT)

value = random(VALUE_LIMIT)

card2.setSuit(suitNum)

card2.setValue(value)

output “Card 1 is: ”, card1.getValue(),

“ of ”, card1.getSuit()

output “Card 2 is: ”, card2.getValue(),

“ of ”, card2.getSuit()

stop

b. Randomly assign values to 10 BlackCard objects, then design an application that plays a modified version of Blackjack. In this version, the objective is to accumulate cards whose total value equals 21, or whose value is closer to 21 than the opponent’s total value without exceeding 21. Deal five BlackjackCards each to the player and the computer. Make sure that each BlackjackCard is unique. For example, a deck cannot contain more than one Queen of Spades.

Determine the winner as follows:

· If the player’s first two, first three, first four, or all five cards have a total value of exactly 21, the player wins, even if the computer also achieves a total of 21.

· If the player’s first two cards do not total exactly 21, sum as many as needed to achieve the highest possible total that does not exceed 21. For example, suppose the player’s five cards are valued as follows: 10, 4, 5, 9, 2. In that case, the player’s total for the first three cards is 19; counting any more cards would cause the total to exceed 21.

· After you have determined the player’s total, sum the computer’s cards in sequence. For example, suppose the computer’s cards are 10, 10, 5, 6, 7. The first two cards total 20; you would not use the third card because it would cause the total to exceed 21.

· The winner has the highest total among the cards used. For example, if the player’s total using the first three cards is 19 and the computer’s total using the first two cards is 20, the computer wins.

Display a message that indicates whether the game ended in a tie, the computer won, or the player won.

Answer: A sample solution follows

start

Declarations

num x = 0

num index

num suit

num faceValue

num playerSum

num playerWin

num playerDone

num computerWin

num computerDone

num computerSum

num SUIT_LIMIT = 4

num VALUE_LIMIT = 13

num NUM_OF_CARDS = 5

num TOTAL_CARDS = 52

num WINNING_NUMBER = 21

{`// set all array items to the value 1`}

num deckOfCards[TOTAL_CARDS] = 1

BlackjackCard playerCards[NUM_OF_CARDS]

BlackjackCard computerCards[NUM_OF_CARDS]

while x < NUM_OF_CARDS

playerCards[x].setValue(random(VALUE_LIMIT))

playerCards[x].setSuit(random(SUIT_LIMIT))

suit = playerCards[x].getSuit

faceValue = playerCards[x].getValue

{`// remove this card from the “deck”`}

index = (suit+1) * faceValue

deckOfCards[index] = 0

computerCards[x].setValue(random(VALUE_LIMIT))

computerCards[x].setSuit(random(SUIT_LIMIT))

{`// if computer card is not in “deck”
// get a new card, else remove card from “deck”
`}

suit = computerCards[x].getSuit

faceValue = computerCards[x].getValue

index = (suit+1) * faceValue

while deckOfCards[index] = 0 then

computerCards[x].setValue(random(VALUE_LIMIT))

computerCards[x].setSuit(random(SUIT_LIMIT))

endwhile

deckOfCards[index] = 0

x = x + 1

endwhile

{`// check values`}

x = 0

playerSum = 0

playerDone = 0

playerWin = 0

while x < NUM_OF_CARDS AND playerDone = 0

playerSum = playerCards[x] + playerSum

if playerSum = WINNING_NUMBER then

playerWin = 1

playerDone = 1

else

if playerSum > WINNING_NUMBER then

playerSum = playerSum – playerCards[x]

playerDone = 1

endif

endif

x = x + 1

endwhile

[`// check values`]

x = 0

computerSum = 0

computerDone = 0

computerWin = 0

while x < NUM_OF_CARDS AND computerDone = 0 AND playerWin <> 1

computerSum = computerCards[x] + computerSum

if computerSum = WINNING_NUMBER then

computerWin = 1

computerDone = 1

else

if computerSum > WINNING_NUMBER then

computerSum = computerSum – computerCards[x]

computerDone = 1

endif

endif

x = x + 1

endwhile

if playerWin = 1 OR playerSum > computerSum then

output “You win!”

else

if computerWin = 1 OR computerSum > playerSum then

output “The computer wins!”

endif

endif

stop

Up for Discussion

1. Many programmers think object-oriented programming is a superior approach to procedural programming. Others think it adds a level of complexity that is not needed in many scenarios. Find and summarize arguments on both sides. With which side do you agree?

Answer :

Those who feel object-oriented programming is the superior approach cite its similarity to how objects operate in the real word. Data and its methods are packaged. Polymorphism provides more natural syntax and inheritance provides reusability. Those who feel procedural programming is the superior approach cite its simplicity. They feel object-orientation adds an unnecessary layer to what would otherwise be simple code.

2. Many object-oriented programmers are opposed to using multiple inheritance. Find out why and decide whether you agree with this stance.

Answer :

Multiple inheritance has been criticized because of the increased complexity it causes, particularly in the chaining of constructors and destructors. Problems also arise if both base classes used for multiple inheritance have data members or methods with the same signature, leading to ambiguous situations. Many say that if you feel you need multiple inheritance, it is a sign of poor design.

3. If you are completing all the programming exercises in this book, you can see how much work goes into planning a full-blown professional program. How would you feel if someone copied your work without compensating you? Investigate the magnitude of software piracy in our society. What are the penalties for illegally copying software? Are there circumstances in which it is acceptable to copy a program? If a friend asked you to copy a program for him, would you? What should we do about this problem, if anything?

Answer :

Different sources report different dollar amounts, but software piracy seems to account for at least $13 billion in software revenue lost worldwide per year.

According to the U.S. Copyright Act, illegal reproduction of software is subject to civil damages of as much as $100,000 per title infringed plus criminal penalties, including fines of as much as $250,000 per title infringed and imprisonment of up to five years.

Companies devote a large portion of their earnings to the creation of new software products. The programmers, writers, and all those involved in the creation of these new products deserve fair compensation. Companies will not continue to develop new products unless they can make a profit. Just as every customer pays a little for a store’s losses to shoplifters, every purchaser of legal software pays a little for illegal copies.

Students may agree with some of this, but have a hard time denying a friend a copy of a program. They might argue that, “The software companies can afford it and I am just a poor student,” and “It only costs a few cents for a blank CD. Why should I pay $100 for one?”

citation generator
citaion generator
make money online