Description
In this programming assignment you will complete the Complex class discussed in class that represents
complex numbers as a pair of double values. Recall that a complex number z is an expression of the form
z a bi
where a and b are real numbers, and i is the so-called imaginary unit having the property that
1
2
i . Complex numbers are used in many branches of physics and engineering to solve real world
problems, in spite of their seemingly abstract nature. Complex numbers have a simple geometric
interpretation as vectors in a 2-dimensional plane.
For this project we are concerned mainly with the arithmetic and algebraic properties of complex numbers.
Several common operations are defined below. Let
z a bi
and
w c di
be particular complex
numbers.
Add: z w (a c) (b d)i
Subtract:
z w (a c) (b d)i
Multiply:
zw (ac bd) (ad bc)i
Reciprocal: i
a b
b
a b
a
z
2 2 2 2
1
Divide: i
a b
ad bc
a b
ac bd
z
w
2 2 2 2
Conjugate:
z a bi
Real and Imaginary parts: Re(z) a
and
Im(z) b
Absolute value (also called modulus):
2 2
z a b
Argument:
arg(z) the angle in the range -π θ π that z makes with the positive real axis z a bi z a bi
imaginary axis
real axis
a
b
2
Be in class (or see the notes from) Wednesday 3-2-16 for a discussion of the preceding definitions. Some
of these calculations can be simplified by the fact that
2 2
zz a b
. For instance
1/ 2
z zz ,
zz
z
z
1
and
zz
wz
z
w
.
Your task in this project will be to fill in the template Complex.java posted in the Examples section of the
course website in the folder pa6. The template includes stubs for the above complex arithmetic functions,
along with some other required functions listed and described below.
Complex(String s){}
This is perhaps the most difficult function to write. It is a constructor for the Complex class that reads a
string s and parses it as a complex number. It should accept strings of the form ” 47i
“, ” 3.58.2i
“, ”
5.1
“, ” 17i
“, etc. It will throw a NumberFormatException if the input string s cannot be parsed. See
the example ComplexParser.java also posted on the website for help in doing this.
public String toString()
This function overrides Object’s toString() method and returns the string representation of a complex
number. The strings returned will be exactly those accepted by the above constructor.
public boolean equals(Object obj)
This function also overrides it’s namesake in the Object superclass. It will return true if and only if this
Complex and (Complex)obj have the same real and imaginary parts.
static Complex valueOf(double a, double b)
static Complex valueOf(double a)
static Complex valueOf(String s)
These functions mimic the valueOf() methods appearing in the Java wrapper classes. Each of them
returns a new Complex object obtained by calling an appropriate constructor.
What to turn in
A file called ComplexTest.java is posted on the webpage that exercises the functions you define in class
Complex. Sample input and output for ComplexTest will also be posted. You are to submit
ComplexTest.java (with no changes of any kind) with this project. A Makefile for the project is also posted.
This Makefile compiles both ComplexTest.java and Complex.java and places them in an executable Jar file
called ComplexTest. The Makefile also includes phony targets called clean, spotless and submit, that
remove all .class files, remove the executable Jar file and submit the project (respectively). Submit the
three files: Makefile, ComplexTest.java and Complex.java to the assignment name pa6 by the due date.
This project is considerably easier than the two most recent programs, but it still takes some time to
complete, so do not wait until the last minute to start.