Programming Assignment #1
COP 3330 Spring Term
2009
Due: Friday January
15th, 2009 Midnight
Objective: Upon
completing this assignment, you should be able to implement a simple class, as
well as gain a better understanding of the building and use of classes and
objects.
Task: An equilateral triangle is a triangle whose sides are equal. If two equilateral
triangles are "glued" together along a common side, this will form a
diamond. You are to write a class called Diamond, using filenames diamond.h and diamond.cpp, that
will allow the creation and handling of diamonds based on the above
description, whose sides are integers in the range 1-39 characters.
Details:
- The constructor for the
Diamond class should have 3 parameters: an integer size (required), which
is the length of a side; a border character (optional, with a default of '#'); and a fill character (optional,
with a default of '*'). If
the size provided is less than 1, set the size to 1. If the size provided
is greater than 39, set the size to 39. The class will need to provide
internal storage for any member data that must be kept track of.
- There should be member
functions GetSize,
Perimeter, and Area, which will return the size
of a side, the perimeter of the diamond, and the area of the diamond,
respectively. The first 2 should return integer results. The Area function should return its
result as a double.
- Notes on Perimeter and
Area: Perimeter is the length of
the side * 4. The area of the
diamond is calculated by obtaining the area of an equilateral triangle
and multiplying that area by 2.
- There should be member
functions Grow and Shrink, which will increase or
decrease (respectively) the size of the Diamond's sides by 1, unless this
would cause the size to go out of bounds (out of the 1-39 range); in the
latter case, Grow and Shrink should make no change to the
size.
- There should be member
functions SetBorder
and SetFill,
which each allow a new border or fill character (respectively) to be
passed in as a parameter. There is a chart of ASCII characters in an
appendix of the textbook. The characters that should be allowed for the
border or fill characters are any characters from the '!' (ascii 33) up through the '~' (ascii
126). If an attempt is made to set the border or fill characters to
anything outisde the allowable range, the
function should set the border or fill back to its original default (the
ones listed for the constructor -- the border default is '#' and the fill default is '*').
- There should be a member
function called Draw
that will display a picture of the Diamond on the screen. You may assume
that the cursor is already at the beginning of a line when the function
begins, and you should make sure that you leave the cursor on the line
following the picture afterwards (i.e. print a newline after the last line
of the diamond). Use the border character to draw the border of the
diamond, and use the fill character to draw the internal characters.
Separate the characters on a line in the picture by a single space to make
the Diamond look more proportional (so that the halves look more like
equilateral triangles). You may not use formatting functions like setw to
draw the diamond. This must be handled with loops. (You will only print
out the newline, spaces, the border character, and maybe the fill
character on any given line).
- Notes on Draw:
- A diamond of size one
(1) will only display a single border character and no fill.
- A diamond of size two
(2) will display the diamond with only border characters and no fill
characters. Here is an example
with a border character of “#”.
#
# #
#
- A diamond of size
three (3) will have exactly on fill character .
Notice there is a space between the fill character and the border
character. When looking at the
examples you will notice that there will always be a space between all
of the fill characters.
- Provide a member function
called Summary that
displays all information about a diamond: its size, perimeter, area, and a
picture of what it looks like. When displaying the area (decimal data),
always show exactly 2 decimal places. Your output should be in the exact
same format as mine (seen in the linked sample run below)
- I am providing a sample
driver program (called driver.cpp)
that uses objects of type Diamond and illustrates the usage of the member
functions. You can get the driver.cpp
file at this link.
I have also provided the output from the sample
execution of my driver.cpp program at this link. Your class
declaration and definition files must work with my main program, as-is (do not
change my program to make your code work!). You are encouraged to write your
own driver routines to further test the functionality of your class, as well.
Most questions about the required behavior of the class can be determined by
carefully examining my driver program and the sample execution. Keep in mind,
this is just a sample. Your class must meet the specified requirements
listed above in the specification -- not just satisfy this driver
program. (For instance, I haven't tested every illegal fill character in
this driver program -- I've just shown a sample). Your class will be tested
with a larger set of calls than this driver program represents.
- General Requirements
- No global variables,
other than constants!
- All member data of
your class must be private
- Use the const qualifier on member
functions wherever it is appropriate.
- You will need to use
the <iostream>
library for output. You may use the <iomanip> library for
formatting your decimal output to two places, if you wish to use the
parameterized stream manipulators, but you may not use setw() or other output formatting
functions for drawing the actual diamond. You may use the <cmath>
library
- When you write source
code, it should be readable and well-documented.
- Your diamond.h file should contain the class declaration
only. The diamond.cpp file should contain the member function
definitions.
- Submission
- Programs must be
submitted through the Blackboard site using your FSUID account.
- Both files ( diamond.h and diamond.cpp)
should be combined in a tar file diamond.tar.
- Submit file diamond.tar through the
blackboard site.
Submitting:
Program submissions should be done through the BlackBoard
digital drop box system. Do not send program submissions through e-mail
-- e-mail attachments will not be accepted as valid submissions.
General Advice - always keep an untouched copy of your finished
homework files on your computer science account. These files will have a
time-stamp which will show when they were last worked on (a timestamp from the
CS servers) and will serve as a backup in case you ever have problems with
submitting files through the web site. Do
this for ALL programs.
For HW #1, submit the following files
diamond.h
diamond.cpp
Make sure your filenames are these exact names, and do not submit the
driver.cpp file. Remember that file
names on Unix are case sensitive.