### Math Tutor program help.

closed account (iEwvC542)
Hello I am having problems getting a function to generate random numbers multiple times for my math tutor program.

 ``123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120`` ``````#include #include #include using namespace std; void getProbsPerSet(int&); void doOneSet(char,int,int&); void getMaxNum (int&); void doOneProblem(char,int&,int&); void generateOperands (int&,int&); void printHeader (); int main() { int probperset; int set1Correct,set2Correct,set3Correct; srand(time(0)); getProbsPerSet(probperset); doOneSet('+',probperset,set1Correct); doOneSet('-',probperset,set2Correct); doOneSet('*',probperset,set3Correct); system("PAUSE"); return 0; } void printHeader () { cout << "Set 1" << endl; cout << "---------" << endl << endl; } void getMaxNum (int& max) { cout << " What is the maximum number for this set? "; cin >> max; cout << endl; } void doOneSet (char problemType, int numProbs, int& numCorrect) { printHeader (); int randomOne = 0; int randomTwo = 0; generateOperands (randomOne, randomTwo); for ( int counter = 1;counter <= numProbs; counter++) { switch(problemType) { case '+' : doOneProblem(problemType,randomOne,randomTwo); break; case '-' : doOneProblem(problemType,randomOne,randomTwo); break; case '*' : doOneProblem(problemType,randomOne,randomTwo); break; default: cout << "INVALID DATA" << endl;; break; } } } void doOneProblem (char problemType,int& randomOne, int& randomTwo) { switch(problemType) { case '+' : cout << randomOne << problemType << randomTwo << endl; break; case '-' : cout << randomOne << problemType << randomTwo << endl; break; case '*' : cout << randomOne << problemType << randomTwo << endl; break; default: cout << "INVALID DATA" << endl;; break; } } void getProbsPerSet (int& num_set) { cout << " Enter problems per set: "; cin >> num_set; cout << endl; } void generateOperands (int& randomOne,int& randomTwo) { int maxNum; getMaxNum (maxNum); randomOne = (rand() % maxNum + 1); randomTwo = (rand() % maxNum + 1); } ``````

 ``` Enter problems per set: 3 Set 1 --------- What is the maximum number for this set? 100 25+25 25+25 25+25 Set 1 --------- What is the maximum number for this set? 100 15-100 15-100 15-100 Set 1 --------- What is the maximum number for this set? 100 43*64 43*64 43*64 Press any key to continue . . .```

The numbers generate, but they are the same in the whole set. Any help pointing me in the right direction would be awesome .
Thanks!!
Last edited on
You need to seed the random number generator. Think of it as initializing the `rand()` function

 ``12345`` ``````void generateOperands (int& randomOne,int& randomTwo) { srand( time(0) ); // seeding with Unix time is a popular method to make it mroe "random" // the rest of your code }``````

if you use Unix time, you will have to `#include <ctime> `
Last edited on
Your problem is that you're calling generateOperands() only once, before your loop.

One call: one set of random numbers.

Try putting it in your loop.
closed account (iEwvC542)
I figured it out. I was not returning the right values and my function was not set up right.

 ``123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124`` ``````#include #include #include using namespace std; void getProbsPerSet(int&); void doOneSet(char,int,int&); void getMaxNum (int&); void doOneProblem(char,int&,int&); void generateOperands (int&,int&,int&); void printHeader (); int main() { int probperset; int set1Correct,set2Correct,set3Correct; srand(time(0)); getProbsPerSet(probperset); doOneSet('+',probperset,set1Correct); doOneSet('-',probperset,set2Correct); doOneSet('*',probperset,set3Correct); system("PAUSE"); return 0; } void printHeader () { cout << endl; cout << "Set 1" << endl; cout << "---------" << endl << endl; } void getMaxNum (int& max) { cout << " What is the maximum number for this set? "; cin >> max; cout << endl; } void doOneSet (char problemType, int numProbs, int& numCorrect) { printHeader (); int maxNum; int randomOne = 0; int randomTwo = 0; getMaxNum (maxNum); generateOperands (randomOne, randomTwo,maxNum); for ( int counter = 1;counter <= numProbs; counter++) { generateOperands (randomOne, randomTwo,maxNum); switch(problemType) { case '+' : doOneProblem(problemType,randomOne,randomTwo); break; case '-' : doOneProblem(problemType,randomOne,randomTwo); break; case '*' : doOneProblem(problemType,randomOne,randomTwo); break; default: cout << "INVALID DATA" << endl;; break; } } } void doOneProblem (char problemType,int& randomOne, int& randomTwo) { switch(problemType) { case '+' : cout << randomOne << problemType << randomTwo << endl; break; case '-' : cout << randomOne << problemType << randomTwo << endl; break; case '*' : cout << randomOne << problemType << randomTwo << endl; break; default: cout << "INVALID DATA" << endl;; break; } } void getProbsPerSet (int& num_set) { cout << " Enter problems per set: "; cin >> num_set; cout << endl; } void generateOperands (int& randomOne,int& randomTwo,int& maxNum) { randomOne = (rand() % maxNum + 1); randomTwo = (rand() % maxNum + 1); } ``````

Thanks for helping. This program is a pain.
Last edited on
What do you want your program to do, exactly? Can you copy your output above and change it to what you want it to look like?
Topic archived. No new replies allowed.