Math Tutor program help.

Nov 5, 2011 at 6:41pm
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 Nov 5, 2011 at 7:07pm
Nov 5, 2011 at 6:51pm
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 Nov 5, 2011 at 6:52pm
Nov 5, 2011 at 6:56pm
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.
Nov 5, 2011 at 6:57pm
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 Nov 5, 2011 at 7:17pm
Nov 5, 2011 at 7:11pm
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.