Here is my code It works but it needed to be decomposed into
Here is my code. It works, but it needed to be decomposed into 9 different functions.
#include <iostream>
#include <ctime>
#include <cstlib>
using namespace std;
void getProbsPerSet(/*inout*/int &);
void printReport(int, int, int, int);
void doOneSet(/*in*/char, /*in*/int, /*inout*/int&);
int main()
{
int probsPerSet;
int set1Correct, set2Correct, set3Correct;
srand(time(0));
int nset; // Problems per set
getProbsPerSet(probsPerSet);
doOneSet(\'+\', probsPerSet, set1Correct); //Function call
doOneSet(\'-\', probsPerSet, set2Correct); // Function call
doOneSet(\'*\', probsPerSet, set3Correct); // Function call
printReport(probsPerSet, set1Correct, set2Correct, set3Correct);
return 0;
}
void getProbsPerSet(int &nset) //Function definition
{
cout << \"Enter problems per set: \";
cin >> nset;
}
void printReport(int nset, int set1Correct, int set2Correct, int set3Correct) //Function definition
{
// Report calculates in percentage
int total = set1Correct + set2Correct + set3Correct;
cout << \"Set#1: You got \" << set1Correct << \" correct out of \" << nset << \" for \" << (set1Correct * 100 / (nset)) << \"%\" << endl;
cout << \"Set#2: You got \" << set2Correct << \" correct out of \" << nset << \" for \" << (set2Correct * 100 / (nset)) << \"%\" << endl;
cout << \"Set#3: You got \" << set3Correct << \" correct out of \" << nset << \" for \" << (set3Correct * 100 / (nset)) << \"%\" << endl;
cout << \"Overall you got \" << total << \" correct out of \" << nset * 3 << \" for \" << ((total * 100 / (3 * nset))) << \"%\" << endl;
}
void doOneSet(char problemType, int nset, int &correct) //Function definition
{
correct = 0;
int num1 = 0, num2 = 0, maxNum = 100;
int correctAnswer = 0, userInput = 0;
bool isCorrect = false;
switch (problemType)
{
case \'+\':
cout << endl << \" Set #1\" << endl;
cout << \"-------\" << endl << endl;
cout << \"What is the maximum number for this set? \";
cin >> maxNum;
cout << endl;
for (int count = 1; count <= nset; count++)
{
num1 = rand() % (maxNum + 1);
num2 = rand() % (maxNum + 1);
cout << num1 << \" + \" << num2 << \" = \";
cin >> userInput;
correctAnswer = num1 + num2;
if (userInput == correctAnswer)
isCorrect = true;
else
isCorrect = false;
if (isCorrect){
cout << \"correct\" << endl;
correct++;
}
else
cout << \"incorrect\" << endl;
} break;
case \'-\':
cout << endl << \" Set #2\" << endl;
cout << \"-------\" << endl << endl;
cout << \"What is the maximum number for this set? \";
cin >> maxNum;
cout << endl;
for (int count = 1; count <= nset; count++)
{
num1 = rand() % (maxNum + 1);
num2 = rand() % (maxNum + 1);
cout << num1 << \" - \" << num2 << \" = \";
cin >> userInput;
correctAnswer = num1 - num2;
if (userInput == correctAnswer)
isCorrect = true;
else
isCorrect = false;
if (isCorrect){
cout << \"correct\" << endl;
correct++;
}
else
cout << \"incorrect\" << endl;
}
break;
case \'*\':
cout << endl << \" Set #3\" << endl;
cout << \"-------\" << endl << endl;
cout << \"What is the maximum number for this set? \";
cin >> maxNum;
cout << endl;
for (int count = 1; count <= nset; count++)
{
num1 = rand() % (maxNum + 1);
num2 = rand() % (maxNum + 1);
cout << num1 << \" * \" << num2 << \" = \";
cin >> userInput;
correctAnswer = num1*num2;
if (userInput == correctAnswer)
isCorrect = true;
else
isCorrect = false;
if (isCorrect){
cout << \"correct\" << endl;
correct++;
}
else
cout << \"incorrect\" << endl;
}
break;
}
}
These are the following functions that I need to add to my functions above.
void getMaxNum (/* out */int& maxNum);
void printHeader (/* in */ char problemType);
void doOneProblem (/* in */char problemType,/* in */ int maxNum,/*out */ bool& isCorrect);
void generateOperands (/* out */int& num1, /*out */int& num2,/* in */ int maxNum);
void calcCorrectAnswer (/* in */ char problemType,/* in */ int num1, /* in */int num2, /* inout*/ int& answer);
void checkAnswer (/* in */int num1,/* in */ int num2, /*out */bool& isCorrect);
Solution
#include <iostream>
#include <ctime>
#include <cstlib>
int main()
{
int probsPerSet;
int set1Correct, set2Correct, set3Correct;
srand(time(0));
int nset; // Problems per set
getProbsPerSet(probsPerSet);
doOneSet(\'+\', probsPerSet, set1Correct);
doOneSet(\'-\', probsPerSet, set2Correct);
doOneSet(\'*\', probsPerSet, set3Correct);
printReport( probsPerSet,set1Correct, set2Correct, set3Correct);
return 0;
}
void getProbsPerSet(int &nset) //Function definition
{
cout << \"Enter problems per set: \";
cin >> nset;
}
void printReport(int nset, int set1Correct, int set2Correct, int set3Correct) //Function definition
{
// Report calculates in percentage
int total = set1Correct + set2Correct + set3Correct;
cout << \"Set#1: You got \" << set1Correct << \" correct out of \" << nset << \" for \" << (set1Correct * 100 / (nset)) << \"%\" << endl;
cout << \"Set#2: You got \" << set2Correct << \" correct out of \" << nset << \" for \" << (set2Correct * 100 / (nset)) << \"%\" << endl;
cout << \"Set#3: You got \" << set3Correct << \" correct out of \" << nset << \" for \" << (set3Correct * 100 / (nset)) << \"%\" << endl;
cout << \"Overall you got \" << total << \" correct out of \" << nset * 3 << \" for \" << ((total * 100 / (3 * nset))) << \"%\" << endl;
}
void doOneSet(char problemType, int nset, int &correct)
{
print Header(problemType)
int maxNum;
getMaxNum(maxNum);
for (int countPerSet = 0; countPerSet < nset; countPerSet++)
{
doOneProblem(problemType, maxNum, correct);
}
}
void printHeader(char problemType)
{
if(problemType == \'+\')
{
cout << endl << \"Set #1\" << endl;
cout << \"----------\" << endl;
}
else if (problemType == \'-\')
{
cout << endl << \"Set #2\" << endl;
cout << \"----------\" << endl;
}
else if (problemType == \'*\')
{
cout << endl << \"Set #3\" << endl;
cout << \"----------\" << endl;
}
}
void getMaxNum (int& maxNum)
{
cout << \"What is the maximum number for this set? \";
cin >> maxNum;
}
void doOneProblem (char problemType,int maxNum,int& correct)
{
int num1, num2, userAns, answer;
generateOperands(num1, num2, maxNum);
cout<<num1<<\"\"<<problemType<<\"\"<<num2<<\"=\";
cin>>userAns;
calcCorrectAnswer(problemType,num1,num2,answer);
checkAnswer(userAns, answer,correct);
}
void generateOperands (int& num1, int& num2, int maxNum)
{
num1= rand() % (maxNum+1);
num2= rand() % (maxNum+1);
}
void calcCorrectAnswer(char problemType,int num1,int num2,int& answer)
{
if (problemType == \'+\'){
answer = num1+num2;
}
else if (problemType == \'-\'){
answer = num1-num2;
}
else if (problemType == \'*\')
{
answer = num1*num2;
}
}
void checkAnswer(int userAns, int answer,int& correct)
{
if(userAns == answer)
{
cout<<\"correct\"<<endl;
correct++;
}
else if(userAns != answer)
{
cout<<\"incorrect\"<<endl;
}
}




