Problem Solving with C++ (10th Edition)
Problem Solving with C++ (10th Edition)
10th Edition
ISBN: 9780134448282
Author: Walter Savitch, Kenrick Mock
Publisher: PEARSON
bartleby

Concept explainers

bartleby

Videos

Textbook Question
Book Icon
Chapter 11, Problem 1P

Modify the definition of the class Money shown in Display 11.8 so that all of the following are added:

a. The operators <, <=, >, and >= have each been overloaded to apply to the type Money. (Hint: See Self-Test Exercise 13.)

b. The following member function has been added to the class definition. (We show the function declaration as it should appear in the class definition. The definition of the function itself will include the qualifier Money::.)

Money percent(int percentFigure) const;

//Returns a percentage of the money amount in the

//calling object. For example, if percentFigure is 10,

//then the value returned is 10% of the amount of

//money represented by the calling object.

For example, if purse is an object of type Money whose value represents the amount $100.10, then the call

purse.percent(10);

returns 10% of $100.10; that is, it returns a value of type Money that represents the amount $10.01.

Expert Solution & Answer
Check Mark
Program Plan Intro

“Money” Class

Program plan:

  • Include required header file.
  • Define a class for “Money”.
    • Declare the function for overload operator “<”, “<=”, “>’, “>=”, “+”, “-” and “==”.
    • Declare the constructor for “Money” class.
    • Declare the function for compute total amount, total dollars and total cents.
    • Declare the function for “percent” function.
    • Declare the function for operator “>>” and “<<”.
    • Declare required variables.
  • Define function for overload operator “<”, “<=”, “>” and “>=”.
  • Define function for “percent”.
    • This function is used to compute the percentage amount for given money.
  • Define function for arithmetic operator “+” and “-” with two arguments.
  • Define function for overload operator “==”.
  • Define function for overload operator “-” with one parameter.
  • Define default constructor for “Money” class, constructor with one argument and two arguments.
  • Define the function “computeTotalAmount”.
    • This function is used to compute the total amount.
  • Define the function “computeTotalDollars”.
    • This function is used to compute the dollars in given amount.
  • Define the function “computeTotalCents”.
    • This function is used to compute the cents in given amount.
  • Define the function “forDollarConversion” which is used to convert amount to dollar
  • Define the function “forCentsConversion” which is used to convert the amount to cents.
  • Define the function “forRoundedValue” which is used for convert the result in rounded value.
  • Define function for input and output operator.
  • Define main function
    • Create an object for “Money” class.
    • Create an object for “Money” class with argument.
    • Declare variable for file input and file output.
    • Open the given input file.
    • Check the given file is found or not using “if” loop.
    • Read the amount from file.
    • Display the purse amount.
    • Compare the given amount and purse amount.
    • Compute sum of amount and purse and display it.
    • Compute the difference of two amount and display it.
    • Check the amount using the comparison operator “>=”.
    • Check the amount using the comparison operator “>”.
    • Check the amount using the comparison operator “<=”.
    • Check the amount using the comparison operator “<”.
    • Finally close input and output file.
Program Description Answer

The below C++ program is used to implement the “Money” class with the overload operators such as “<”, “<=”, “>” and “>=” and compute the percent of given amount.

Explanation of Solution

Program:

#include<iostream>

#include<fstream>

#include<cstdlib>

#include<cmath>

using namespace std;

//Create a class name, Money

class Money

{

  public:

        //Function declaration for operators <, <=, >, and >=

  friend bool operator < (const Money& amount1, const Money& amount2);

  friend bool operator <= (const Money& amount1, const Money& amount2);

  friend bool operator > (const Money& amount1, const Money& amount2);

  friend bool operator >= (const Money& amount1, const Money& amount2);

        //Function declaration for operators +, -, and ==

  friend Money operator + (const Money& amount1, const Money& amount2);

  friend Money operator - (const Money& amount1, const Money& amount2);

        friend Money operator - (const Money& amount);

  friend bool operator == (const Money& amount1, const Money& amount2);Money();

        //Constructor for "Money" class

        Money(double amount);

        Money(int dollars, int cents);

        Money(int nDollars);

  /* Function declaration for compute total amount, total dollars and total cents */

        double computeTotalAmount() const;

        int computeTotalDollars() const;

        int computeTotalCents() const;

  /* Function declaration for compute the percent for given amount */

        Money percent(int percentFigure) const;

  friend istream& operator >>(istream& ins, Money& amount);

  //Overloads the >> operator so it can be used to input values of type Money.

  //Notation for inputting negative amounts is as in -$100.00.

  //Precondition: If ins is a file input stream, then ins has already been

        //connected to a file.

  friend ostream& operator <<(ostream& outs, const Money& amount);

  //Overloads the << operator so it can be used to output values of type Money.

  //Precedes each output value of type Money with a dollar sign.

        //Precondition: If outs is a file output stream,

        //then outs has already been connected to a file.

  private:

        //Declare member variables

        int dollars, cents;

        int forDollarConversion(double amount) const;

        int forCentsConversion(double amount) const;

        int forRoundedValue(double number) const;

};

//Function definition of operator '<'

bool operator < (const Money& amount1, const Money& amount2)

{

      //Return given result

      return (amount1.dollars < amount2.dollars) ||

      ((amount1.dollars == amount2.dollars) &&

      (amount1.cents < amount2.cents));

}

//Function definition of operator '<='

bool operator <= (const Money& amount1, const Money& amount2)

{

      //Return given result

  return ((amount1.dollars < amount2.dollars) || ((amount1.dollars == amount2.dollars) &&

      (amount1.cents < amount2.cents)))

      || ((amount1.dollars == amount2.dollars)

      && (amount1.cents == amount2.cents));

}

//Function definition of operator '>'

bool operator > (const Money& amount1, const Money& amount2)

{

      //Return given result

      return (amount1.dollars > amount2.dollars)

  || ((amount1.dollars == amount2.dollars) && (amount1.cents > amount2.cents));

}

//Function definition of operator '>='

bool operator >=(const Money& amount1, const Money& amount2)

{

      //Return given result

      return ((amount1.dollars > amount2.dollars) ||

      ((amount1.dollars == amount2.dollars) &&

      (amount1.cents > amount2.cents))) ||

      ((amount1.dollars == amount2.dollars) &&

      (amount1.cents == amount2.cents));

}

//Function definition of percent

Money Money::percent(int percentFigure) const

{

      int d = dollars * percentFigure / 100;

  int c = dollars * percentFigure % 100 + cents * percentFigure / 100;

      return Money(d, c);

}

//Function definition of operator '+'

Money operator + (const Money& amount1, const Money& amount2)

{

      int cent1 = amount1.cents + amount1.dollars * 100;

      int cent2 = amount2.cents + amount2.dollars * 100;

      int totalCents = (cent1 + cent2);

      int aCents = abs(totalCents);

      int tDollars = aCents / 100;

      int tCents = aCents % 100;

      if (totalCents < 0)

      {

            tDollars = -tDollars;

            tCents = -tCents;

      }

      //Return given result

      return Money(tDollars, tCents);

}

//Function definition of operator '-' for two arguments

Money operator -(const Money& amount1, const Money& amount2)

{

      int c1 = amount1.cents + amount1.dollars * 100;

      int c2 = amount2.cents + amount2.dollars * 100;

      int differCents = c1 - c2;

      int aCents = abs(differCents);

      int tDollars = aCents / 100;

      int tCents = aCents % 100;

      if (differCents < 0)

      {

            tDollars = -tDollars;

            tCents = -tCents;

      }

        //Return given result

        return Money(tDollars, tCents);

}

//Function definition of operator '=='

bool operator == (const Money& amount1, const Money& amount2)

{

      //Return given result

  return((amount1.dollars == amount2.dollars) && (amount1.cents == amount2.cents));

}

//Function definition of operator '-' for one argument

Money operator - (const Money& amount)

{

      //Return given result

      return Money(-amount.dollars, -amount.cents);

}

//Constructor initialization

Money::Money(): dollars(0), cents(0)

{

}

//Constructor for "Money" class

Money::Money(double amount): dollars(forDollarConversion(amount)), cents(forCentsConversion(amount))

{

}

//Constructor for "Money" class

Money::Money(int d): dollars(d), cents(0)

{

}

//Constructor for "Money" class

Money::Money(int d, int c)

{

      if ((d < 0 && c > 0) || (d > 0 && c < 0))

      {

           cout << "The given data is invalid" << endl;

            exit(1);

      }

      dollars = d;

      cents = c;

}

//Function definition of computeTotalAmount

double Money::computeTotalAmount() const

{

      //Return given result

      return (dollars + cents*0.01);

}

//Function definition of computeTotalDollars

int Money::computeTotalDollars() const

{

      //Return given result

      return dollars;

}

//Function definition of computeTotalCents

int Money::computeTotalCents() const

{

      //Return given result

      return cents;

}

//Function definition of forDollarConversion

int Money::forDollarConversion(double amount) const

{

      //Return given result

      return static_cast<int>(amount);

}

//Function definition of forCentsConversion

int Money::forCentsConversion(double amount) const

{

      /* Compute cents from given amount */

      double doubleCents = amount * 100;

  int ncents = (forRoundedValue(fabs(doubleCents))) % 100;

      if (amount < 0)

            ncents = -ncents;

      return ncents;

}

//Function definition of forRoundedValue

int Money::forRoundedValue(double value) const

{

      //Return given result

      return floor(value + 0.5);

}

//Function definition for "<<" operator

ostream& operator <<(ostream& outs, const Money& amount)

{

      /* Compute dollars and cents using "abs" */

      int aDollars = abs(amount.dollars);

      int aCents = abs(amount.cents);

      //Check condition for cents

      if (amount.dollars < 0 || amount.cents < 0)

            outs << "$-";

      else

            outs << '$';

            outs << aDollars;

      if (aCents >= 10)

            outs << '.' << aCents;

      else

            outs << '.' << '0' << aCents;

      return outs;

}

//Function definition for operator '>>'

istream& operator >> (istream& ins, Money& amount)

{

      //Declare variables

      char dollarSign;

      double increaseAmount;

      //Read sign of dollars from file

      ins >> dollarSign;

      /* Check the dollar sign */

      if (dollarSign != '$')

      {

            /* Display message */

            cout << "No dollar symbol" << endl;

            exit(1);

      }

      //Read increase amount from file

      ins >> increaseAmount;

      //Compute dollars for given amount

  amount.dollars = amount.forDollarConversion(increaseAmount);

      //Compute cents for given amount

  amount.cents = amount.forCentsConversion(increaseAmount);

      return ins;

}

//Main function

int main()

{

      //Create a object for "Money" class

      Money amount;

      //Create a object for "Money" class with argument

      Money purse(100, 10);

      //Declare variable for file input

      ifstream inStream;

      //Declare variable for file output

      ofstream outStream;

      //Open input file

      inStream.open("infile.dat");

      /* If the given file is not found, then */

      if (inStream.fail())

      {

            //Display an error message

            cout << "Input file opening failed.\n";

            //For exit function

            exit(1);

      }

      //Open the output file

      outStream.open("outfile.dat");

      /* If the output file is not found, then */

      if (outStream.fail())

      {

            //Display an error message

            cout << "Output file opening failed.\n";

            //For exit function

            exit(1);

      }

      //Read the amount from file

      inStream >> amount;

      //Display given statement to output file

  outStream << amount << " copied from the file infile.dat.\n";

      //Display the output

  cout << amount << " copied from the file infile.dat.\n";

      cout <<"The purse amount is " << purse << endl;

      //Call percent function for purse amount

  cout << "10% of purse amount: " << purse.percent(10) << endl;

      //Compare the given amout and

      if (amount == purse)

     cout << "The given amount and purse amounts are equal." << endl;

      else

     cout << "The given amount and purse amounts are not equal." << endl;

      //Compute sum of amount and purse

     Money totalAmount = amount + purse;

      //Display sum of amount

  cout << amount << " + " << purse << " = " << totalAmount << endl;

      //Compute the difference of two amount

      Money diff = amount - purse;

      /* Display difference of two amount */

  cout << amount << " - " << purse << " = " << diff << endl;

  /* Check the amount using the comparison operator ">=" */

      if (amount >= purse)

            /* Display message */

     cout << "The amount is greater than or equal to the purse amount. " << endl;

  /* Check the amount using the comparison operator ">" */

      if (totalAmount > diff)

            /* Display message */

     cout << "The sum of amounts is greater than the difference amount. " << endl;

  /* Check the amount using the comparison operator "<=" */

      if (amount <= purse)

            /* Display message */

     cout << "The given amount is less than or equal to purse amount. " << endl;

      else

            /* Display message */

     cout << "The given amount is greater than the purse amount. " << endl;

  /* Check the amount using the comparison operator "<" */

      if (totalAmount < diff)

            /* Display message */

     cout << "The sum of amounts is less than the difference." << endl;

      else

            /* Display message */

     cout << "The sum of amounts is greater than the difference." << endl;

      /* Close input file*/

      inStream.close();

      /* Close output file */

      outStream.close();

}

infile.dat:

$1.11

$2.22

$3.33

Sample Output

$1.11 copied from the file infile.dat.

The purse amount is $100.10

10% of purse amount: $10.01

The given amount and purse amounts are not equal.

$1.11 + $100.10 = $101.21

$1.11 - $100.10 = $-98.99

The sum of amounts is greater than the difference amount.

The given amount is less than or equal to purse amount.

The sum of amounts is greater than the difference.

outfile.dat:

$1.11 copied from the file infile.dat.

Want to see more full solutions like this?

Subscribe now to access step-by-step solutions to millions of textbook problems written by subject matter experts!
Students have asked these similar questions
Refer to page 80 for problems on white-box testing. Instructions: • Perform control flow testing for the given program, drawing the control flow graph (CFG). • Design test cases to achieve statement, branch, and path coverage. • Justify the adequacy of your test cases using the CFG. Link: [https://drive.google.com/file/d/1wKSrun-GlxirS3IZ9qo Hazb9tC440 AZF/view?usp=sharing]
Refer to page 10 for problems on parsing. Instructions: • Design a top-down parser for the given grammar (e.g., recursive descent or LL(1)). • Compute the FIRST and FOLLOW sets and construct the parsing table if applicable. • Parse a sample input string and explain the derivation step-by-step. Link: [https://drive.google.com/file/d/1wKSrun-GlxirS31Z9qoHazb9tC440 AZF/view?usp=sharing]
Refer to page 20 for problems related to finite automata. Instructions: • Design a deterministic finite automaton (DFA) or nondeterministic finite automaton (NFA) for the given language. • Minimize the DFA and show all steps, including state merging. • Verify that the automaton accepts the correct language by testing with sample strings. Link: [https://drive.google.com/file/d/1wKSrun-GlxirS31Z9qo Hazb9tC440AZF/view?usp=sharing]

Chapter 11 Solutions

Problem Solving with C++ (10th Edition)

Ch. 11.1 - Given the following definitions: const int x = 17;...Ch. 11.2 - What is the difference between a (binary) operator...Ch. 11.2 - Prob. 13STECh. 11.2 - Suppose you wish to overload the operator = so...Ch. 11.2 - Prob. 15STECh. 11.2 - Give the definition for the constructor discussed...Ch. 11.2 - Here is a definition of a class called Pairs....Ch. 11.2 - Following is the definition for a class called...Ch. 11.3 - Give a type definition for a structure called...Ch. 11.3 - Write a program that reads in five amounts of...Ch. 11.3 - Change the class TemperatureList given in Display...Ch. 11.3 - Prob. 22STECh. 11.3 - If a class is named MyClass and it has a...Ch. 11.4 - Prob. 24STECh. 11.4 - The following is the first line of the copy...Ch. 11.4 - Answer these questions about destructors. a. What...Ch. 11.4 - a. Explain carefully why no overloaded assignment...Ch. 11 - Modify the definition of the class Money shown in...Ch. 11 - Self-Test Exercise 17 asked you to overload the...Ch. 11 - Self-Test Exercise 18 asked you to overload the...Ch. 11 - Prob. 1PPCh. 11 - Define a class for rational numbers. A rational...Ch. 11 - Define a class for complex numbers. A complex...Ch. 11 - Enhance the definition of the class StringVar...Ch. 11 - Define a class called List that can hold a list of...Ch. 11 - Define a class called StringSet that will be used...Ch. 11 - This programming project requires you to complete...Ch. 11 - Redo Programming Project 6 from Chapter 9 (or do...Ch. 11 - Solution to Programming Project 11.12 To combat...Ch. 11 - Repeat Programming Project 11 from Chapter 10 but...Ch. 11 - Do Programming Project 19 from Chapter 8 except...

Additional Engineering Textbook Solutions

Find more solutions based on key concepts
2D Array Operations Write a program that creates a two-dimensional array initialized with test data. Use any pr...

Starting Out with Java: From Control Structures through Objects (7th Edition) (What's New in Computer Science)

It is not necessary to initialize accumulator variables.

Starting Out with Python (4th Edition)

Given that y=ax3+7, which of the following are correct Java statements for this equations? int y = a x x x +...

Java How to Program, Early Objects (11th Edition) (Deitel: How to Program)

What is pseudocode?

Starting Out With Visual Basic (8th Edition)

Knowledge Booster
Background pattern image
Computer Science
Learn more about
Need a deep-dive on the concept behind this application? Look no further. Learn more about this topic, computer-science and related others by exploring similar questions and additional content below.
Similar questions
SEE MORE QUESTIONS
Recommended textbooks for you
Text book image
C++ Programming: From Problem Analysis to Program...
Computer Science
ISBN:9781337102087
Author:D. S. Malik
Publisher:Cengage Learning
Introduction to Classes and Objects - Part 1 (Data Structures & Algorithms #3); Author: CS Dojo;https://www.youtube.com/watch?v=8yjkWGRlUmY;License: Standard YouTube License, CC-BY