# Math function code - couple probs, tips?

• 06-17-2002
Captain Penguin
Math function code - couple probs, tips?
This code allows the user to pick a math function (trig funtions, log, ln), set an x range, and it displays the x,y values of the funtion in that range.

I have three problems:

typing "4" doesn't make it exit < - fixed
typing anything other than a number makes the program go wacky
even with the if statement in the switch-case function, making the minimum range less than 0 STILL does not warn the user, if they have a log function selected. <-fixed

I'd also like some tips, pointers, anything, to make it smaller and more efficient.

Code:

```// The purpose is to take an x range and then display all the values of certain mathematical functions within that range. // Demonstrates use of switch-case statemsnts, while statemsnts, and basic classes. #include <iostream.h> #include <stdlib.h> #include <math.h> void DrawTable(int,int,int); int main() {       bool exit = false;       bool exit2 = false;       int opt;       int opt2;       int function = 1;       int max = 10;       int min = -10;       cout << "************************************************************\n";       cout << "**********************MATH FUNCTIONS************************\n";       cout << "************************************************************\n";       while(exit == false)       {             cout << "Please make a selection\n";             cout << "1. Select the function\n";             cout << "2. Set the x range\n";             cout << "3. Display the value table\n";             cout << "4. Exit\n";             cin >> opt;             switch(opt)             {                         case(1): while(exit2 == false)                                 {                                 cout << "\nSelect one of these functions: " << endl;                                 cout << "1. sine\n";                                 cout << "2. cosine\n";                                 cout << "3. tangent\n";                                 cout << "4. log (base 10)\n";                                 cout << "5. natural log (base e)\n";                                 cin >> opt2;                                 switch(opt2)                                 {                                             case(1): function = 1;                                                       exit2 = true;                                                       break;                                             case(2): function = 2;                                                       exit2 = true;                                                       break;                                             case(3): function = 3;                                                       exit2 = true;                                                       break;                                             case(4): function = 4;                                                       exit2 = true;                                                       break;                                             case(5): function = 5;                                                       exit2 = true;                                                       break;                                             default: cout << "Please select again\n\n";                                                       break;                                 }                                 }                                 break;                         case(2): for(;;)                                 {                                 cout << "What should the minimum x value be?\n";                                 cin >> min;                                 cout << "\nWhat should the maximum x value be?\n";                                 cin >> max;                                 if ( ( min > max ) || ( ( min <= 0 ) && ( function = ( 4 || 5 ) ) ) )                                             {                                             cout << "The minimum cannot be greater than the max, or you have chosen values less than 0 for a logarithmic function!\n";                                             continue;                                             }                                 else break;                                 }                                 break;                         case(3): DrawTable(min, max, function);                                 break;                         case(4): exit = true;                                 break;                         default: cout << "Please make another selection\n";                                 break;                 }       }       system("PAUSE");       return 0; } void DrawTable(int mi, int ma, int func) {     switch(func)     {                 case(1): cout << "\nX\t|\tY\n";                           cout << "\t|\n";                           for(mi;mi<=ma; mi++)                           {                                         cout << mi << "\t|\t" << sin(mi) << endl;                           }                           break;                 case(2): cout << "\nX\t|\tY\n";                           cout << "\t|\n";                           for(mi;mi<=ma; mi++)                           {                                         cout << mi << "\t|\t" << cos(mi) << endl;                           }                           break;                 case(3): cout << "\nX\t|\tY\n";                           cout << "\t|\n";                           for(mi;mi<=ma; mi++)                           {                                         cout << mi << "\t|\t" << tan(mi) << endl;                           }                           break;                 case(4): cout << "\nX\t|\tY\n";                           cout << "\t|\n";                           for(mi;mi<=ma; mi++)                           {                                         cout << mi << "\t|\t" << log10(mi) << endl;                           }                           break;                 case(5): cout << "\nX\t|\tY\n";                           cout << "\t|\n";                           for(mi;mi<=ma; mi++)                           {                                         cout << mi << "\t|\t" << log(mi) << endl;                           }                           break;                 default: cout << "ERROR!\n";       }       return; }```
This is like.. the 2nd program I've written since starting reading a book (and I'm 300 pages in the book). I thought it'd be time to apply some stuff :I know ;) (although I would have liked to use classes, pointers, and references in there somewheres)

Thanks for any help.
• 06-17-2002
achacha
Code:

```case(4): exit == true;   break;```

Code:

```case(4): exit = true;   break;```
• 06-17-2002
frenchfry164
you don't need the parentesis in the cases either

case (1):

to

case 1:

I've never actually seen anyone even use parentesis in a case statement either. I didn't know you could even do that, but I guess you can, for statements like 1+(x*3)/4+(3*2) or something.
• 06-18-2002
Captain Penguin
Thanks for the tips so far, but there's gotta be something else! I know I didn't make a perfect program on nearly my first shot! :D
• 06-18-2002
Monster
Captain Penguin, the program looks fine (except the small thing that achacha found).

```void DrawTable(int mi, int ma, int func) {         double (*f[5])(double) = { sin, cos, tan, log10, log };         if(func > 0 && func < 6)         {                 cout << "\nX\t|\tY\n\t|\n";                 for(mi;mi<=ma; mi++)                         cout << mi << "\t|\t" << f[func-1](mi) << endl;         }         else                 cout << "ERROR" << endl; }```