Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Dynamic MathStack The MathStack class shown in this chapter only has two member

ID: 3819265 • Letter: D

Question

Dynamic MathStack

The MathStack class shown in this chapter only has two member functions: add and

sub . Write the following additional member functions:

Function Description

mult - Pops the top two values off the stack, multiplies them, and pushes

their product onto the stack.

div - Pops the top two values off the stack, divides the second value by

the first, and pushes the quotient onto the stack.

addAll - Pops all values off the stack, adds them, and pushes their sum

onto the stack.

multAll -Pops all values off the stack, multiplies them, and pushes their

product onto the stack.

Demonstrate the class with a driver program.

Using these header files

IntStack.h

// Specification file for the IntStack class
#ifndef INTSTACK_H
#define INTSTACK_H

class IntStack
{
protected:
int *stackArray;
int stackSize;
int top;

public:
IntStack(int);
~IntStack();
void push(int);
void pop(int &);
bool isFull();
bool isEmpty();
};
  
#endif

and

MathStack.h

// Specification file for the MathStack class
#ifndef MATHSTACK_H
#define MATHSTACK_H

#include "IntStack.h"

class MathStack : public IntStack
{
public:
MathStack(int s) : IntStack(s) {}
void add();
void sub();
void mult();
void div();
void addAll();
void multAll();
};

#endif

In C++

Explanation / Answer

Following is the definition of member functions.

void MathStack:: add() {

        int val1= 0;

        int val2=0;

        pop(val1);

        pop(val2);

        int result = 0;

        result = val1 + val2;

        push(result);

   }

   void MathStack:: sub(){

        int val1= 0;

        int val2=0;

        pop(val1);

        pop(val2);

        int result = 0;

        result = val1 - val2;

        push(result);

   }

   void MathStack:: mult() {

        int val1= 0;

        int val2= 0;

        pop(val1);

        pop(val2);

        int result = 0;

        result = val1 * val2;

        push(result);

   }

   void MathStack:: divison() {

        int val1= 0;

        int val2=0;

        pop(val1);

        pop(val2);

        int result = 0;

        if (val2 != 0) {

            result = val1 / val2;

            push(result);

        }

   }

   void MathStack:: addAll() {

       int result = 0;

       int val;

       while (!isEmpty()) {

           pop(val);

           result = result + val;

       }

       push(result);

   }

   void MathStack:: multAll() {

       int result = 1;

       int val;

       while (!isEmpty()) {

           pop(val);

           result = result * val;

       }

       push(result);

   }

Following is the main program to test MathStack class.

#include <iostream>

#include <MathStack.h>

using namespace std;

int main()

{

   MathStack s(20);

  

   for(int i=0;i<2;i++)

    s.push(10);

   int val;

   s.add();

   s.pop(val);

   cout<<" result of addition:"<<val;

  

   for(int i=0;i<2;i++)

    s.push(10);

   s.sub();

   s.pop(val);

   cout<<" result of subtraction:"<<val;

  

   for(int i=0;i<2;i++)

    s.push(10);

   s.mult();

   s.pop(val);

   cout<<" result of multiplication:"<<val;

  

   for(int i=0;i<2;i++)

    s.push(10);

   s.divison();

   s.pop(val);

   cout<<" result of divison:"<<val;

  

   for(int i=0;i<5;i++)

    s.push(10);

   s.addAll();

   s.pop(val);

   cout<<" result of addAll:"<<val;

  

   for(int i=0;i<5;i++)

    s.push(10);

   s.multAll();

   s.pop(val);

   cout<<" result of multAll:"<<val;

  

   return 0;

}

Please let me know in case of any doubts.

Thanks