Write the class declaration for a class named complex

Assignment Help C/C++ Programming
Reference no: EM13756570

Principles of Programming with C++

1 Instructions

You may work in pairs (that is, as a group of two) with a partner on this lab project if you wish or you may work alone. If you work with a partner, only submit one lab project with both of your names in the source code file to Blackboard for grading; you will each earn the same number of points. What to hand in, and by when, is discussed in Section 5; read it.

2 Lab Objectives

After completing this assignment the student should be able to,

? Complete all of the objectives of the previous lab projects.

? Write a complete class declaration and class implementation from scratch.

? Understand very well how to write and use constructors, accessor, and mutator functions.

3 Prelab

? Download the Lab 10 Zip Archive from the course website to your Desktop or a temporary folder, e.g., C:\Temp. Extract the zip archive to the desktop or the temporary folder. After extraction, you will find five source code files on your desktop or the temporary folder: Lab10.cpp, Complex.hpp, Complex.cpp, ComplexTest.hpp, and ComplexTest.cpp. You will also find a file named complex-in.txt that contains test cases to be used in testing the Complex class.

? Create a new Code::Blocks project named Lab10 and add these source code files to your project. Follow the instructions in Steps 28 through 32 of the Code::Blocks tutorial1 to add the source code files to your project.

? Move complex-in.txt to the appropriate folder based on where your IDE expects it to be. If you are using Code::Blocks, this will be the folder where the .cpp and .hpp files are located.

4 Lab Exercise

A complex number is a mathematical number consisting of a real part and an imaginary part. Complex numbers are an extension of one-dimensional real numbers into the two-dimensional complex plane. They are written using the syntax real + imag i where i is √-1 . If c is a complex number, the real part can be referred to as R(c) and the imaginary part as I(c). For example, if c = -1.23 - 4.56i then, R(c) = -1.23 and I(c) = -4.56

Basic arithmetic operations on complex numbers include addition, subtraction, multiplication, and division. Let c1 and c2 be two complex numbers. The arithmetic operations are defined by the following rules.

Addition

The real part of the sum is the sum of the real parts. The imaginary part of the sum is the sum of the imaginary parts.

c1+c2 = ( R(c1) + R(c2)) + ( I (c1) + I ( c2)) i

Subtraction

The real part of the difference is the difference of the real parts. The imaginary part of the difference is the difference of the imagi -

nary parts.

c1-c2 = ( R(c1)- R(c2)) + ( I (c1)- I ( c2)) i

Note that c1 - c2 = c1 + -c2. Therefore, if we have the ability to form the negation of a complex number, then we can perform

subtraction by negating c2 and adding it to c1. We will use this technique in our subtraction function.

Multiplication

c1⋅c2 =( R(c1)⋅ R(c2)- I (c1)⋅ I (c2)) + ( I ( c1)⋅ R(c2) + R(c1)⋅ I (c2)) i

Division

c1

c2

=

R(c1)R( c2)+I (c1) I (c2)

R(c2)2+I ( c2)2 +

I (c1)R(c2)-R(c1) I (c2)

R(c2)2+ I (c2)2 i

Note that

c1

c2

=c1 × 1

c2

So if we have the ability to form the inverse of c2 then we can perform division by multiplying c1 by the inverse of c2. We will use this technique in implementing the division function.

1 https://devlang.com/cse100_codeblocks

(c) Kevin R. Burger :: Computer Science & Engineering :: Arizona State University Page 1

CSE100 Principles of Programming with C++ Lab 10 :: 5 pts

Your lab project is to implement a class named Complex which represents complex numbers and provides functions for performing addition, subtraction, multiplication, and division. You will also complete the code for another class named ComplexTest which tests the Complex class. For testing, your program will open a text file named complex-in.txt for reading; this file will have this format, operation R(c1) I(c1) R(c2) I(c2)

operation R(c1) I(c1) R(c2) I(c2)

operation R(c1) I(c1) R(c2) I(c2)

operation R(c1) I(c1) R(c2) I(c2)

operation will be a single character representing the arithmetic operation to be performed, i.e., operation will be one of '+', '','*', or '/'. Following operation, are the real and imaginary parts of two complex numbers a and b. For each pair, a and b, the program shall perform the specified operation on a and b and output the result to the output file which is to be named complexout. txt. There will be four test cases in the input file. A sample input file is, sample complex-in.txt

+ 1 2 3 8

Calculates (1 + 2i) + (3 8i)

3.4

5.6 7.8 9.1

Calculates (3.4 + 5.6i) (

7.8 9.1i)

* 1.11 2.222

3.3333 4.44444

Calculates (1.11 2.22i)

* (3.3333 4.44444i)

/ 3.4567 0.0023

45.6789 4.37838

Calculates (3.4567 0.0023i)

/ (45.6789 4.37838i)

The output is to be sent to a text file named complex-out.txt. The output file for the above input file will be formatted as shown below. Note that the real and imaginary parts are both printed in fixed notation with four digits after the decimal point-configure the stringstream object in Complex::toString() with fixed and setprecision(4). Also, notice that if the imaginary part is negative, then a ? sign is printed between the real and imaginary parts rather than a + sign. This is handled with an if-else statement in Complex::

toString().

complex-out.txt for the complex-in.txt file above

(1.0000 + 2.0000i) + (3.0000 8.0000i)

= (4.0000 6.0000i)

(3.4000 + 5.6000i) (

7.8000 9.1000i)

= (4.4000

+ 14.7000i)

(1.1100 2.2220i)

* (3.3333 4.4444i)

= (6.1756

12.3399i)

(3.4567 0.0023i)

/ (45.6789 4.3784i)

= (0.0750 + 0.0071i)

Your project will consist of five source code files, named and described below in Sections 4.1-4.5.

4 .1 Complex.hpp

Write the class declaration for a class named Complex using the class diagram below as a guide.

+===============================================================+

| Complex |

++

| mReal

: double |

| mImag

: double |

++

| + Complex () : <<ctor>> |

| + Complex (pInitReal : double, pInitImag : double) : <<ctor>> |

| + add (Complex& pRHSOp) : Complex |

| + div (Complex& pRHSOp) : Complex |

| + getImag () : double |

| + getReal () : double |

| + invert () : Complex |

| + mult (Complex& pRHSOp) : Complex |

| + negate () : Complex |

| + setImag (pNewImag : double) : void |

| + setReal (pNewReal : double) : void |

| + sub (Complex& pRHSOp) : Complex |

| + toString () : string |

| init(

pInitReal : double, pInitImag : double) : void |

+===============================================================+

4.2 Complex.cpp

Contains the implementation (function definitions) for the Complex class. Here is a brief description of each function. See the Complex.cpp source code file for the pseudocode descriptions of each function.

Complex::Complex ()

The default constructor. Initializes this Complex number to be 0 + 0 i by calling init(0, 0).

Complex::Complex (pInitReal : double, pInitImag : double)

A second constructor. Initializes this Complex number to be pInitReal + pInitImag i by calling init(pInitReal, pInitImag).

(c) Kevin R. Burger :: Computer Science & Engineering :: Arizona State University Page 2

CSE100 Principles of Programming with C++ Lab 10 :: 5 pts

Complex::add (Complex& pRHSOp) : Complex

Adds this Complex number and pRHSOp to form a new Complex number named sum and returns sum. Note: pRHSOp is passed byreference

because it is generally faster to pass objects by reference.

Complex::div (Complex& pRHSOp) : Complex

Divides this Complex number by pRHSOp to form and return a new Complex number which is the quotient. Note: to divide c1 by c2, we can multiply c1 by 1/c2. Therefore, to divide this Complex number by pRHSOp, we call mult() passing the Complex number returned by pRHSOp.invert() as the parameter.

Complex::getImag () : double

An accessor function for the mImag data member.

Complex::getReal () : double

An accessor function for the mReal data member.

Complex::init (pInitReal : double, pInitImag : double) : void

Initializes this Complex number so the mReal data member is initialized with pInitReal and the mImag data member with pInitImag.

Calls setReal() and setImag() mutator functions to initialize the data members.

Complex::invert () : Complex

Returns a new Complex number which is the inverse of this Complex number, i.e., 1 / this.

Complex::mult (Complex& pRHSOp) : Complex

Multiplies this Complex number by pRHSOp to form a new Complex number named product and returns product.

Complex::negate () : Complex

Returns a new Complex number which is the negation of this Complex number, i.e., -this.

Complex::setImag (pNewImag : double) : void

A mutator function for the mImag data member.

Complex::setReal (pNewReal : double) : void

A mutator function for the mReal data member.

Complex::sub (Complex& pRHSOp) : Complex

Subtracts pRHSOp from this Complex number to form and return a new Complex number which is the difference. Note: to subtract c2 from c1, we can add c1 and -c2. Therefore, to subtract pRHSOp from this Complex number, we call add() passing the Complex number returned by pRHSOp.negate() as the parameter.

Complex::toString () : string

Returns a string representation of this Complex number. The format is "(mReal?±?mImagi)" where ? represents a space character and ± means there will either be plus sign here or a minus sign. For example, if the mReal part of a number is 2.3123456 and the mImag part is 4.543217, then the returned string will be "(2.3123?+?4.5432i)". On the other hand, if the mImag part is negative, e.g., -4.543217, then the return string will be "(2.3123?-?4.5432i)". If the mImag part is 0 it will be omitted. For example, if the mReal part of the number is 12.1234567 and the mImag part if 0, then the return string will be "(2.3123)". Format the real and imaginary parts in fixed notation with four digits after the decimal point.

4.3 ComplexTest.hpp

Here is the class declaration for a class named ComplexTest which will be used to test the Complex class. The code for this file is already completed for you.

+=====================================================+

| ComplexTest |

++

++

| + ComplexTest () |

| + run () : void |

| runTest

(pFin: ifstream&, pFout : ofstream&) |

+=====================================================+

4.4 ComplexTest.cpp

Contains the implementation (function definitions) for the ComplexTest class.

ComplexTest::ComplexTest ()

Default constructor. Does nothing. It is written for you.

(c) Kevin R. Burger :: Computer Science & Engineering :: Arizona State University Page 3

CSE100 Principles of Programming with C++ Lab 10 :: 5 pts

ComplexTest::run ()

Tests the Complex class by opening the input file "complex-in.txt" for reading and calling runTest() four times to read and perform the four test cases.

ComplexTest::runTest (ifstream& pFin, ofstream& pFout)

Reads the operation character and the four doubles from the input file. Creates two Complex objects a and b initialized with the values read from the input file. Performs the required operation and writes the results of performing the test case to the output file.

Note: stream objects must always be passed by-reference because the << and >> operators change the values of some of the data members of the stream object.

4.5 Lab10.cpp

Contains the function definition for main(). The code is completed for you.

4.6 Additional Programming Requirements

1. Modify the comment header block of each source code file with your name, email address, lab date/time, and your lab TA.

2. Carefully format your code and follow the indentation of the text as shown in the example programs of the textbook.

3. Testing: When you run your program, it will read and perform the test cases from complex-in.txt and it will write the results to complex-out.txt. Update the header comment block at the top of ComplexTest.cpp with your testing results, i.e., the observed output and document whether each test case PASSED or FAILED.

5 What to Submit for Grading and by When

When you are finished with the program, create a new empty folder named Lab10. Copy all five of the source code files to this folder; there should only be five files in this folder: Lab10.cpp, Complex.hpp, Complex.cpp, ComplexTest.hpp, and ComplexTest.cpp.

Then compress this folder creating a zip archive named cse100-s15-lab10-auriteid.zip where asuriteid is your ASU user name that you use to log in to Blackboard, e.g., mine is kburger2. If you worked with a partner then name the zip archive cse100-s15-lab10- auriteid1-asurite2.zip where asurite1 and asurite2 are the user names of both partners. Then upload the .zip archive file to Blackboard using the lab submission link by the deadline. If your program does not compile or run correctly, upload what you have completed for grading anyway (you will generally receive some partial credit for effort). The deadline for the complete lab project is 4:00am Sat 11 Apr. Consult the online syllabus for the late and academic integrity policies.

Reference no: EM13756570

Questions Cloud

Difference between a spreadsheet and a database : How would you define the difference between a spreadsheet and a database? Can you think of scenarios in which a spreadsheet would be preferred over a database? What about a situation that would make a database a better tool than a spreadsheet
What impact did european settlement have on the americas : What impact did European settlement have on the Americas? What were the causes and consequences of the Salem witchcraft trials?
Discuss substitution without addressing complement : Discuss substitution without addressing complement. Jose and María address Complement addressing Substitution without.
Describing an initial offering for a global firm : Write a 750-to-1,000 word paper describing an initial offering for a global firm. Include the following:
Write the class declaration for a class named complex : Write the class declaration for a class named Complex using the class diagram
Compute the eight ratios for patton-fuller hospital : Compute the eight ratios for Patton-Fuller Hospital based on its unaudited financial statements and critique its operating results and financial position.
Develop an object-oriented design : Identify possible objects in ONE of the following systems and develop an object-oriented design for them. Using a UML class diagram and associated explanation to show your design. You may make many reasonable assumptions about the system when derivin..
Assembling the research paper and presentation : You are only required to submit a final paper and presentation. However, during the previous six weeks, you will be assembling the research paper and presentation. Feel free to post questions or portions of the paper for review at any time as an emai..
Discuss how cultural differences could make : Discuss how cultural differences could make keeping your information secure more difficult.

Reviews

Write a Review

C/C++ Programming Questions & Answers

  Write a program to hold an array of 20 numbers read

Write a program to hold an array of 20 numbers read in from the keyboard and display them backwards. Use a array and a loop to cycle through the numbers.

  Create a program, using at least one for loop

Create a program, using at least one For loop, that displays the Sales Amounts made in each of 4 regions (North, South, East, and West) during a three month period.

  Program to translates letter grade into number grade

In C++ (should be able to compile in Visual Studio 2010): Write a program to translates letter grade into number grade. Letter grades are A,B,C,D and F, possibly followed by a + or -.

  Read integers values one at a time from standard input

Write a C++ program to do the following. The program will read integers values one at a time from standard input (cin) until you read the value 150.

  Prepare a program for a company named retail-martbullprompt

prepare a program for a company named retail-mart.bullprompt the user to enter an item name one word only a quantity

  Program that uses an instance of the timeoff

Write a program that uses an instance of the TimeOff class you designed in Programming Challenge 5. The program should ask the user to enter the number of months an employee has worked for the company. It should then use the TimeOff object to calc..

  Create a two-dimensional array

Describe a problem where you might need to create a two-dimensional array to accurately model the data, and describe how you would use the data to help solve the problem.

  Define a structure to store roll no

Define a structure to store roll no, name and marks of a student. Using the structure of above write a ‘C’ program to create a file “student.dat”. There must be one record for every student in the file. Accept the data from the user.

  Define two derived classes of the abstract class

Define two derived classes of the abstract class ShapeBase below. Your two classes will be called RightArrow and LeftArrow. These classes will draw arrows that point right and left,

  Application which will read a file of daily payments

C++ application which will read a file of daily payments, calculate the total as well as the average payment, display the results to the screen and write the results to a file. The input and output file names should be provided as command line argume..

  Calculate the potential energy of a rock with a mass of 55

calculate the potential energy of a rock with a mass of 55 kg while sitting on a cliff that is 27 m

  Compute a program that calculates three resistance inputs

C language, compute a program that calculates three RESISTANCE inputs, and gives you the total resistance in OHMS. Like this, the total resistance is _____ ohms. These are three parallel circuits so the formula would be (1/R1 + 1/ R 2 +  1/ R 3 )  -1

Free Assignment Quote

Assured A++ Grade

Get guaranteed satisfaction & time on delivery in every assignment order you paid with us! We ensure premium quality solution document along with free turntin report!

All rights reserved! Copyrights ©2019-2020 ExpertsMind IT Educational Pvt Ltd