Question: Given the following code by a Chegg Expert below, Can you further fix, in addition to further implement the following features: - When user is

Given the following code by a Chegg Expert below, Can you further fix, in addition to further implement the following features:

- When user is prompted for an expression, they should end their expression with a semicolon, otherwise output a "Syntax Error"

- if the user decides to add a string ID of "myVar" or "myVar2" instead of "X" or "Y" that it would be counted as an expression (examples down below)

- instead of terminating the program abruptly and "throwing an instance of 'std::out_of_range' ", output to the user that there's a "Syntax Error"

#include

#include

#include

#include

#include

using namespace std;

class token

{

public:

double num1,num2;

char op;

token(double a, char b, double c) : num1(a),op(b),num2(c){};

token() : num1(0),op(0),num2(0){};

void initialize(double a, char b, double c) {

num1 = a;

op = b;

num2 = c;

return;

}

double solve()

{

switch(op)

{

case '+' : return (num1+num2);

case '-' : return (num1-num2);

case '*' : return (num1*num2);

case '/' : return (num1/num2);

case '^' : return (pow(num1,num2));

case 'r' : return (pow(num2,1/num1));

}

}

};

string expression;

deque numbers;

deque operators;

void express()

{

cout << "'+' to add '-' to subtract '*' to multiply '/' to divide '^' for powers 'r' for roots ";

cout << "Enter your expression: ";

cin >> expression;

return;

}

void extract() //Turns an expression into a list of numbers and operators.

{

vector digits;

unsigned int i,k; int temp=0;

for (i=0; i<=expression.size(); i++)

{

if (expression[i]>='0' && expression[i] <='9')

digits.push_back(expression[i]-'0');

else {

if(((expression[i]>='a' && expression[i]<='z')||(expression[i]>='A' && expression[i]<='Z'))&&expression[i]!='r'){

cout<<"What is "<

double val;

cin>>val;

digits.push_back(val);

}

else{

operators.push_back(expression[i]);

for (k=0; k

temp+=digits.at(k)*pow(10,(digits.size()-1-k));

numbers.push_back(temp);

digits.clear();

temp=0;

}

}

}

operators.erase(operators.end());

return;

}

void addsub() //Does adding and subtracting.

{

token tempp;

double temp = numbers.at(0);

while (true)

{

if (operators.at(0) == '+' || operators.at(0) == '-')

{

numbers.erase(numbers.begin());

tempp.initialize(temp ,operators.at(0), numbers.at(0));

temp = tempp.solve();

if (operators.size() == 1)

{

operators.clear();

numbers.at(0) = temp;

return;

}

else

operators.erase(operators.begin());

}

}

}

void multidiv() //Does multiplication and division.

{

token tempp;

double temp;

unsigned int i;

for (i=0; i

{

if (operators.at(i) == '*' || operators.at(i) == '/')

{

tempp.initialize(numbers.at(i) ,operators.at(i), numbers.at(i+1));

temp = tempp.solve();

if (operators.size() == 1)

{

operators.clear();

numbers.at(0) = temp;

return;

}

else

{

operators.erase(operators.begin()+i);

numbers.erase(numbers.begin()+i+1);

numbers.at(i) = temp;

}

--i;

}

}

addsub();

}

void calculate() //Does powers and roots.

{

token tempp;

double temp;

unsigned int i;

for (i=0; i

{

if (operators.at(i) == '^' || operators.at(i) == 'r')

{

tempp.initialize(numbers.at(i) ,operators.at(i), numbers.at(i+1));

temp = tempp.solve();

if (operators.size() == 1)

{

operators.clear();

numbers.at(0) = temp;

return;

}

else

{

operators.erase(operators.begin()+i);

numbers.erase(numbers.begin()+i+1);

numbers.at(i) = temp;

}

--i;

}

}

multidiv();

}

int main ()

{

express();

extract();

calculate();

cout << "Final answer: " << numbers.at(0) << endl << endl;

return 0;

}

EXAMPLE 1:

Enter your expression:

myVar + myVar2 * 11;

What is myVar= ?

1234

What is myVar2=?

2

Final answer: 1256

EXAMPLE 2:

Enter your expression:

Y^2 + Z^3 + 7 * 8 * X + 8 * 8 + 8 * X + 7 * Y;

What is Y= ?

12

What is Z= ?

5

What is X= ?

8

Final Answer: 929

EXAMPLE 3:

Enter your expression:

X^2 + + 7;

Syntax Error

EXAMPLE 4:

Enter your expression:

X^4 * 8 + 9 + 7

Syntax Error

For some reason, examples 1 and 2 aren't working as they're intended by the code given above and states that they're out of range which I'm very confused, can you fulfill the requirements as stated above and fulfill in completing the following examples? Thank you very much for your time.

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!