Trace the C++ program below showing all output in the order that it is displayed. If anything happens that makes it impossible to accomplish an operation or the results of so doingare unpredictable, describe what happens and abort the program at that point. Assume the Stack class is fully defined in an appropriate header and implementation file. The effect of the functions (methods) is as follows: constructor - creates an empty stack empty - returns true if the stack is empty, false otherwise push - adds the specified element to the top of the stack display - displays every stack element on the specified stream, top to bottom order pop - removes the top element of a stack; attempting to pop an element from an empty stack causes an error condition and immediately terminates the program. top - returns the top element of the stack but does not remove it boolalpha - a flag that causes the words true or false to be displayed for a bool variable
#include <iostream>
using namespace std;
#include "Stack.h"
int main(void)
{int jimmy_carter, bill_clinton;
jimmy_carter=0;
Stack george_w_bush;
for (bill_clinton=17; bill_clinton>13; bill_clinton--)
{george_w_bush.push(bill_clinton%3*2-2);
jimmy_carter=jimmy_carter+george_w_bush.top();
george_w_bush.push(george_w_bush.top()+2);
jimmy_carter=jimmy_carter+george_w_bush.top();
cout<<"Contents of george_w_bush "<<endl;
george_w_bush.display(cout);
cout<<"jimmy carter is "<<jimmy_carter<<endl;
}
while (!(george_w_bush.empty()))
{cout<<"popping "<<george_w_bush.top()<<endl;
jimmy_carter=jimmy_carter-george_w_bush.top();
george_w_bush.pop();
cout<<"popping "<<george_w_bush.top()<<endl;
george_w_bush.pop();
cout<<"Contents of george_w_bush: "<<endl;
george_w_bush.display(cout);
cout<<"jimmy_carter is now "<<jimmy_carter<<endl;
}
cout<<"at end jimmy_carter is "<<jimmy_carter<<endl;
cout<<boolalpha<<"george_w_bush is empty
"<<george_w_bush.empty()<<endl;
return 0;
}