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

rite an object oriented menu driven educational program to help sa, a third grad

ID: 3701518 • Letter: R

Question


rite an object oriented menu driven educational program to help sa, a third grader, practice her math skills (addition, subtraction, multiplication, and division). Your program should pose questions such as: What is (5 + 7 and 7 5) or (87 and 7 8) or (4 7 and 4) or (0 divided by 7 and 7 divided by 0). 7 - The menu should provide the following choices: a---Addition, c----Multiplication e----Quit b----Subtraction, d----Division Your questions must generate whole numbers in the range of zero to 10 to be used in your questions. At the end (when Lisa quits), display the total number of each type of problems that Lisa had to answer and the count of the corresponding correct and incorrect answers. For example: 15 Additions--9 Correct--6 Incorrect 12 subtractions----12 correct-0 incorrect, and so on. You must use class templates in your program for solving this problem. Please also have the related header file(s), implementation file(s), and the main function. Turn in the documented source code and a sample output showing the functioning of various options and features/parts of your program

Explanation / Answer

Class Template :

Code:

#include <iostream>

#include<conio.h>

#include<stdlib.h>

using namespace std;

/* Class template and passing operator as Template value*/

template<typename Operatr>

class Calc  

{  

public:

int Calculation(int a, int b)

{

/* Get the operator according to choice and calculate the result */

Operatr op;

return op(a, b);

}

};

int main()

{

int a,b,c,d,num1,num2,sumTot=0,minusTot=0,mulTot=0,divTot=0,sumCrt=0,sumIncrt=0,minusCrt=0,minusIncrt=0,mulCrt=0,mulIncrt=0,divCrt=0,divIncrt=0;

int ans1,ans2,calcAns1,calcAns2;

char choice;

do {

cout<<"Select a choice a----->Addition b----->Subtraction c----->Multiplication d----->Division e----->Exit"<<endl;

/* Get the choice */

cin>>choice;

/* generate random numbers between 0 and 10 */

num1=rand()%10+1;

num2=rand()%10+1;

switch(choice) {

case 'a':

/* Create object with template Operator '+' from std */

Calc<std::plus<int> > c;

cout<<"What is ("<<num1<<" + "<<num2<<" and "<<num2<<" + "<<num1<<")"<<endl;

cin>>ans1;

cin>>ans2;

calcAns1 = c.Calculation(num1, num2);

calcAns2 = c.Calculation(num2, num1);

if(ans1==calcAns1 && ans2==calcAns2) {

sumCrt++;

} else {

sumIncrt++;

}

sumTot++;

break;

case 'b':

/* Create object with template Operator '-' from std */

Calc<std::minus<int> > c1;

cout<<"What is ("<<num1<<" - "<<num2<<" and "<<num2<<" - "<<num1<<")"<<endl;

cin>>ans1;

cin>>ans2;

calcAns1 = c1.Calculation(num1, num2);

calcAns2 = c1.Calculation(num2, num1);

if(ans1==calcAns1 && ans2==calcAns2) {

minusCrt++;

} else {

minusIncrt++;

}

minusTot++;

break;

case 'c':

/* Create object with template Operator '*' from std */

Calc<std::multiplies<int> > c2;

cout<<"What is ("<<num1<<" * "<<num2<<" and "<<num2<<" * "<<num1<<")"<<endl;

cin>>ans1;

cin>>ans2;

calcAns1 = c2.Calculation(num1, num2);

calcAns2 = c2.Calculation(num2, num1);

if(ans1==calcAns1 && ans2==calcAns2) {

mulCrt++;

} else {

mulIncrt++;

}

mulTot++;

break;

case 'd':

/* Create object with template Operator '/' from std */

Calc<std::divides<int> > c3;

cout<<"What is ("<<num1<<" / "<<num2<<" and "<<num2<<" / "<<num1<<")"<<endl;

cin>>ans1;

cin>>ans2;

calcAns1 = c3.Calculation(num1, num2);

calcAns2 = c3.Calculation(num2, num1);

if(ans1==calcAns1 && ans2==calcAns2) {

divCrt++;

} else {

divIncrt++;

}

divTot++;

break;

case 'e':

break;

default:

cout<<"Enter correct choice";

break;

}

} while(choice!='e');

/* Display the statistics */

cout<<" "<<sumTot<<" Additions----------------------- "<<sumCrt<<" Correct--------------- "<<sumIncrt<<" Incorrect";

cout<<" "<<minusTot<<" Subtractions-------------------- "<<minusCrt<<" Correct--------------- "<<minusIncrt<<" Incorrect";

cout<<" "<<mulTot<<" Multiplications----------------- "<<mulCrt<<" Correct--------------- "<<mulIncrt<<" Incorrect";

cout<<" "<<divTot<<" Divisions----------------------- "<<divCrt<<" Correct--------------- "<<divIncrt<<" Incorrect";

getch();

return 0;

}

Sample Input and Output:

Select a choice
a----->Addition
b----->Subtraction
c----->Multiplication
d----->Division
e----->Exit
a
What is (2 + 8 and 8 + 2)
10
10
Select a choice
a----->Addition
b----->Subtraction
c----->Multiplication
d----->Division
e----->Exit
a
What is (5 + 1 and 1 + 5)
6
6
Select a choice
a----->Addition
b----->Subtraction
c----->Multiplication
d----->Division
e----->Exit
a
What is (10 + 5 and 5 + 10)
15
15
Select a choice
a----->Addition
b----->Subtraction
c----->Multiplication
d----->Division
e----->Exit
b
What is (9 - 9 and 9 - 9)
0
0
Select a choice
a----->Addition
b----->Subtraction
c----->Multiplication
d----->Division
e----->Exit
b
What is (3 - 5 and 5 - 3)
0
0
Select a choice
a----->Addition
b----->Subtraction
c----->Multiplication
d----->Division
e----->Exit
c
What is (6 * 6 and 6 * 6)
36
36
Select a choice
a----->Addition
b----->Subtraction
c----->Multiplication
d----->Division
e----->Exit
c
What is (2 * 8 and 8 * 2)
1
1
Select a choice
a----->Addition
b----->Subtraction
c----->Multiplication
d----->Division
e----->Exit
d
What is (2 / 2 and 2 / 2)
1
1
Select a choice
a----->Addition
b----->Subtraction
c----->Multiplication
d----->Division
e----->Exit
d
What is (6 / 3 and 3 / 6)
2
0
Select a choice
a----->Addition
b----->Subtraction
c----->Multiplication
d----->Division
e----->Exit
e

3 Additions----------------------- 3 Correct--------------- 0 Incorrect
2 Subtractions-------------------- 1 Correct--------------- 1 Incorrect
2 Multiplications----------------- 1 Correct--------------- 1 Incorrect
2 Divisions----------------------- 2 Correct--------------- 0 Incorrect

Additional Reference Code With Normal Template:

#include <iostream>

#include<conio.h>

#include<stdlib.h>

using namespace std;

/* Function Template and we will pass Operator as template value*/

template<typename Operatr> int Calculation(int a, int b)

{

Operatr op;

return op(a, b);

}

int main()

{

int a,b,c,d,num1,num2,sumTot=0,minusTot=0,mulTot=0,divTot=0,sumCrt=0,sumIncrt=0,minusCrt=0,minusIncrt=0,mulCrt=0,mulIncrt=0,divCrt=0,divIncrt=0;

int ans1,ans2,calcAns1,calcAns2;

char choice;

do {

cout<<"Select a choice a----->Addition b----->Subtraction c----->Multiplication d----->Division e----->Exit"<<endl;

cin>>choice;

num1=rand()%10+1;

num2=rand()%10+1;

switch(choice) {

case 'a':

cout<<"What is ("<<num1<<" + "<<num2<<" and "<<num2<<" + "<<num1<<")"<<endl;

cin>>ans1;

cin>>ans2;

/* Passing the template '+' for the function Calculation()*/

calcAns1 = Calculation<std::plus<int> >(num1, num2);

calcAns2 = Calculation<std::plus<int> >(num2, num1);

if(ans1==calcAns1 && ans2==calcAns2) {

sumCrt++;

} else {

sumIncrt++;

}

sumTot++;

break;

case 'b':

cout<<"What is ("<<num1<<" - "<<num2<<" and "<<num2<<" - "<<num1<<")"<<endl;

cin>>ans1;

cin>>ans2;

/* Passing the template '-' for the function Calculation()*/

calcAns1 = Calculation<std::minus<int> >(num1, num2);

calcAns2 = Calculation<std::minus<int> >(num2, num1);

if(ans1==calcAns1 && ans2==calcAns2) {

minusCrt++;

} else {

minusIncrt++;

}

minusTot++;

break;

case 'c':

cout<<"What is ("<<num1<<" * "<<num2<<" and "<<num2<<" * "<<num1<<")"<<endl;

cin>>ans1;

cin>>ans2;

/* Passing the template '*' for the function Calculation()*/

calcAns1 = Calculation<std::multiplies<int> >(num1, num2);

calcAns2 = Calculation<std::multiplies<int> >(num2, num1);

if(ans1==calcAns1 && ans2==calcAns2) {

mulCrt++;

} else {

mulIncrt++;

}

mulTot++;

break;

case 'd':

cout<<"What is ("<<num1<<" / "<<num2<<" and "<<num2<<" / "<<num1<<")"<<endl;

cin>>ans1;

cin>>ans2;

/* Passing the template '/' for the function Calculation()*/

calcAns1 = Calculation<std::divides<int> >(num1, num2);

calcAns2 = Calculation<std::divides<int> >(num2, num1);

if(ans1==calcAns1 && ans2==calcAns2) {

divCrt++;

} else {

divIncrt++;

}

divTot++;

break;

case 'e':

break;

default:

cout<<"Enter correct choice";

break;

}

} while(choice!='e');

cout<<" "<<sumTot<<" Additions----------------------- "<<sumCrt<<" Correct--------------- "<<sumIncrt<<" Incorrect";

cout<<" "<<minusTot<<" Subtractions-------------------- "<<minusCrt<<" Correct--------------- "<<minusIncrt<<" Incorrect";

cout<<" "<<mulTot<<" Multiplications----------------- "<<mulCrt<<" Correct--------------- "<<mulIncrt<<" Incorrect";

cout<<" "<<divTot<<" Divisions----------------------- "<<divCrt<<" Correct--------------- "<<divIncrt<<" Incorrect";

getch();

return 0;

}

Sample Input and Output are same as before.