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.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#include <iostream>
#include<ctime>
#include<cstdlib>
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

1
2
3
4
5
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.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
#include <iostream>
#include<ctime>
#include<cstdlib>
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.