![]() Graphic by Keith Ohlfs |
Problem Set 6
|
[CS111 Home Page] [Syllabus] [Students] [Lecture Notes] [Assignments] [Programs] [Documentation] [Software Installation] [FAQ] [CS Dept.] [CWIS]
The purpose of this problem set is to give you more experience with recursion and writing recursive methods which return values.
Homework Problems :
Save the modified Patchwork.java
and
HarvestWorld.java
files in the ps6_programs
folder. Submit the entire ps6_programs
folder to your
drop folder on the cs111 server. Turn in a hardcopy of the modified
Patchwork.java
and HarvestWorld.java
.
When submitting your hardcopies, we ask that you turn in only one package of materials. Please staple your files together with a cover page, and submit your hardcopy package by placing it in the box outside of Jennifer's office (E104, across from E101).
Reminders
Homework Problem 1: Patchwork
Your goal in this problem is to write a recursive method that draws the following Picture in PictureWorld:
This picture is specified by the following method in the file Patchwork.java within the folder Patchwork:
In this problem, you are to write a recursive definition of the following method:
public Picture patchwork(int levels, Color c1, Color c2, Color c3, Color c4)
Returns a picture of the above pictured staircase pattern nested levels levels deep, using colors c1, c2, c3, and c4
To see the picture created by patchwork(n, Color.red, Color.yellow, Color.blue, Color.green) for values of n between 0 and 6, experiment with the test applet Patchwork.java within the Test subfolder of the Patchwork folder.
In your definition, you should pay careful attention to how the color parameters shift in recursive calls. Your final definition should be very short. You should be able to write the entire definition in a handful of lines without defining any auxiliary methods of your own. However, you should use the following auxiliary methods, which we have provided for you:
public Picture patch(Color c) Return a picture that consists of a solid patch of color c public Picture fourPics(p1, p2, p3, p4) Return a picture that consists of four pictures p1, p2, p3 and p4, with p1 in the upper left corner, p2 in the upper right corner, p3 in the lower left corner and p4 in the lower right corner.
Note: Please read this entire problem carefully. Simply generating the correct final pattern is not enough to get full credit. Each specified method must behave as described below.
Bagels in BuggleWorld grow in fields (you knew that, didn't you?).
Twice a year the Harvester
buggles go out and harvest
bagels so that buggles in BuggleWorld will have bagels to eat and
play with throughout the year. Bagels are the most important
commodity in BuggleWorld. Therefore, their harvesting procedure is
quite complex and elaborate. It is described below:
Harvester
is assigned a field of bagels to
harvest. The buggle does not know the width or height of the bagel
field. The buggle starts in the left bottom corner of the field
and harvests bagels one row at a time (a row is a vertical column
on the BuggleWorld grid). It doesn't matter if the buggle chooses
to harvest the closest row first and work down to the end of the
field or to walk to the end of the field and harvest rows on the
way back to the beginning. Note that there are no bagels planted
in the bottom horizontal row of the field. Instead, that is the
path that buggles walk on to get from row to row.Harvester
buggles do all the work,
their supervisors want to be able to quickly look at the field
and see how it did. It's a bit difficult to see the entire
field, so the Harvester
buggle must mark each row
indicating whether or not the row did well. Bad rows (fewer
bagels than blank spaces) are marked red and will get more
fertilizer and attention in the next growing season. Good rows
(more bagels than blank spaces) are marked green. Fair rows
(same number of bagels as blank spaces) are left uncolored.
Each row is also tagged with the number of empty spaces (i.e.
spaces covered with black tarp). See the pictures below for
clarification.Harvester
buggle must count the
number of bagels harvested in the field and report that to her
supervisor.The following two pictures show the state of a field before and after the buggle has harvested it.
|
|
Your task is to write the methods that will make the
Harvester
buggle do its job. You are free to write any
auxiliary methods needed. At a minimum, you must define the
following methods for the Harvester
class. Each method
must perform as specified in the comments below:
Your task is to write the methods that will make the
Harvester
buggle do its job. You are free to write any
auxiliary methods needed. At a minimum, you must define the
following methods for the Harvester
class. The complete
specifications for each method are given in HarvestWorld.java
(as usual, you can download the program files from the download
directory). Each method must satisfy the specification in the
code file. The descriptions below are intended to supplement and
clarify the specifications in the code file. Note that all the
methods described below must meet the following invariant:
The buggle's state (position, heading, color, and brush state) will
not be changed by execution of this method. Assumes the buggle's
brush is initially up.
public int
harvestField()
This method assumes that the buggle is starting in the lower left
corner of a field facing EAST. When this method is invoked, the
buggle will harvest the field of bagels to its front and left (up to
the walls in front of and to the left of the buggle) and return the
number of bagels harvested in this field.
public int
harvestRow()
When this method is invoked, the buggle will harvest the row of
bagels to its left (i.e. the vertical column above the
buggle). The number of bagels harvested in this row is returned. This
method should be invoked when the buggle is facing EAST and in the
bottom row (the clear path) of the field.
public int
harvestBagels()
When this method is invoked, the buggle will pick up all the bagels
between it and the wall and return the number of bagels picked up.
This method should be invoked when the buggle is facing NORTH and in
the bottom row (the clear path) of the field.
public void
stackBagels(
int
numberBagels)
When this method is invoked, the buggle will create a stack of the
specified number of bagels in front of itself. This method
assumes that there will always be at least enough space in front of
the buggle for the bagel stack. This method should be invoked when
the buggle is facing NORTH and in the bottom row (the clear path) of
the field.
public int
pullTarp()
When this method is invoked, the buggle should draw a black line
from the wall in front of the buggle to the current
cell in front of the buggle (i.e. do not color the cell the
buggle is on when the method is invoked). This method returns the
number of cells colored. This method should be invoked when the
buggle is facing NORTH and at the end of its bagel stack (i.e. right
where the tarp should start).
public void
markRow(
int
numberBagels,
int
numberSpaces)
This method paints the current cell green if numberBagels is greater
than numberSpaces. The current cell is painted red if numberBagels is
less than numberSpaces. The current cell is not painted if the
numberBagels is equal to numberSpaces. The buggle also marks the cell
with the numberSpaces (using dropInt());
Notes:
paintCell
to color cells:public void
paintCell (Color
c)
dropInt
to drop an integer into a particular
cell:public int
dropInt (int n)