Description
GStack Class
You are to code a template stack class, GStack
Your stack class should provide operations indicated in the specification below (you will need to provide a class StackException) :
// creates an empty stack
GStack();
// Determines whether this stack is empty.
// return True if this stack is empty; otherwise returns false
bool isEmpty() const;
// Adds an item to the top of this stack.
// Postcondition: If the insertion is successful, newItem is on the top of this stack.
// Throws a StackException If the item cannot be placed on this stack.
void push(const T& newItem) throw(StackException);
// Removes the top of this stack.
// Postcondition: If this stack is not empty, the item that was added most
// recently is removed. If this stack is empty a StackException is thrown.
void pop() throw(StackException);
// Retrieves and removes the top of this stack.
// Postcondition: If this stack is not empty, the item that was added most
// recently is removed, and stackTop contains the item
// If this stack is empty, a StackException is thrown
void pop(T& stackTop) throw(StackException);
// Retrieves the top of this stack.
// Postcondition: If this stack is not empty, stackTop contains the item
// that was added most recently. If this stack is empty, a StackException is thrown.
void getTop(T& stackTop) const throw(StackException);
The Application
You are to write an application which will be used to add together very large numbers.
The largest magnitute of integers is limited, so we are not able to add 18,274,364,583,929,273,748,459,595,684,373 and 8,129,498,165,026,350,236
since integer variables cannot hold such large values, let alone their sum. The problems can be solved if we treat these numbers as a group of digits, store the digits on two stacks, and then perform addition by popping digits from the stacks, and placing the digits of the sum on a third stack.
The algorithm follows (variables in bold):
read the first number and //numbers must be read as strings, as they may be to large to fit in a numerical type variable
push the digits (left to right ) on to stack1
read the second number
push the digits on to stack2
initialize column_result to 0
while at least one stack is not empty
if stack1 is not empty
pop a value from stack1
if stack2 is not empty
pop a value from stack2
column_result += sum of popped values
push the ‘unit’ digit of column_result on sum_stack
if column_result > 9
column_result = ten’s digit (the carry)
else
column_result = 0
end while
if column_result is not zero
push column result on sum_stack
while sum_stack is not empty
pop sum_stack
display popped value
Your application should be interactive, that is, accept two numbers to be added from the user, and output the result.
Additionally, your application responsible for ‘catching’ any exception that might be thrown by the Stack class. That is, each push, pop or top call should be enclosed
in a try/catch structure which outputs a helpful debugging.
I suggest you test your stack class (with method updates) PRIOR to using it in the application. That way, you can debug your stack without the complexity of the application code. Then when debugging the application, you know that the stack is functioning correctly.
Submit your stack class source code and your application source. Again, if you are in the daytime section, please provide a listing of both files and a disk. If you are in the online section, send the source code as an email attachment.