943,724 Members | Top Members by Rank

Ad:
  • C++ Discussion Thread
  • Unsolved
  • Views: 590
  • C++ RSS
Nov 5th, 2008
0

CIN>>EQUATION (how to then mult by it later)

Expand Post »
I'm currently writing a program that takes in a function such as ( 7x+19 ) and I need to evaluate the function that user inputs at range of numbers. I've got the loop figured out to loop through my desired numbers, but I don't know what to call the function when the user cin>>function. Should it be a char, string, int, double? Because later I'll need to call function and mult. it by lets say 3, or 5, or 12, etc? So what should I do to accomplish what I need to get done, I'm kind of stuck on this one. I'm kind of a beginner.
Reputation Points: 10
Solved Threads: 0
Newbie Poster
swbuko is offline Offline
12 posts
since Sep 2008
Nov 5th, 2008
0

Re: CIN>>EQUATION (how to then mult by it later)

Depends, is the function hard coded or can the user enter any function at the command line?
Last edited by iamthwee; Nov 5th, 2008 at 5:06 am.
Featured Poster
Reputation Points: 1536
Solved Threads: 431
Posting Expert
iamthwee is offline Offline
5,865 posts
since Aug 2005
Nov 5th, 2008
0

Re: CIN>>EQUATION (how to then mult by it later)

Do you want to multiply numbers or do you want to replace the x in your inputfunction with a value?
Reputation Points: 2035
Solved Threads: 644
Senior Poster
ddanbe is offline Offline
3,736 posts
since Oct 2008
Nov 5th, 2008
0

Re: CIN>>EQUATION (how to then mult by it later)

exactly, what is your problem?
Reputation Points: 10
Solved Threads: 1
Newbie Poster
ALAZHARY is offline Offline
14 posts
since Jul 2006
Nov 5th, 2008
0

Re: CIN>>EQUATION (how to then mult by it later)

yea, I need to exchange x for the the number. such as 3, 4, 5 etc. Ill run a while loop to get my x,y coord.
Reputation Points: 10
Solved Threads: 0
Newbie Poster
swbuko is offline Offline
12 posts
since Sep 2008
Nov 5th, 2008
0

Re: CIN>>EQUATION (how to then mult by it later)

Click to Expand / Collapse  Quote originally posted by swbuko ...
yea, I need to exchange x for the the number. such as 3, 4, 5 etc. Ill run a while loop to get my x,y coord.
You probably need to post some code and provide an example of a run of the program, even though you haven't written the program yet. You need to decide what kind of functions are legal (polynomials, exponents, logarithms, etc.). Have the user enter the function, read it in as a string, then parse the string in such a way that you can tell what kind of function it is (e.g. polynomial, whether it's a legal function that you can handle, then parse the string further to extract the relevant numbers (i.e. coefficients and exponents in a polynomial). But I think you'll have to read the function in as a string from the user.

The big thing is to decide what input your program needs to be able to handle, what assumptions it can make as far as good input, then go from there, in my opinion.
Last edited by VernonDozier; Nov 5th, 2008 at 3:00 pm.
Featured Poster
Reputation Points: 2614
Solved Threads: 687
Posting Expert
VernonDozier is offline Offline
5,372 posts
since Jan 2008
Nov 5th, 2008
0

Re: CIN>>EQUATION (how to then mult by it later)

Sounds like your trying to parse a function. You'll have to enter the function as a string (either char * or string class), then use a loop to figuire out its contents. Depending on how robust/useful you want it to be, this could be a bit challenging for a beginner. Here's a start:

C++ Syntax (Toggle Plain Text)
  1. #include <string>
  2. #include <iostream>
  3. using namespace std;
  4. int main()
  5. {
  6. string sFormula = "";
  7. strin sBuffer = "";
  8. bool numStream(false);
  9. int iVal[255] = {0};
  10. int iCount(0);
  11. cout << "Enter formula: ";
  12. cin >> sFormula
  13. for (int i(0); i < strlen(sFormula); ++i)
  14. {
  15. if (isdigit(sFormula[i]))
  16. {
  17. numStream = true;
  18. sBuffer += sFormula[i];
  19. }
  20. if (numStream && !isdigit(sFormula[i])
  21. {
  22. numStream = false;
  23. iVal[iCount++] = atoi(sBuffer);
  24. }
  25. }
  26. return 0;
  27. }

This will parse the formula and extract all the numbers into an array. This isn't really useful for solving anything, but it's a start. I would sugguest creating a class for holding/handling formulas and their operations. As you can see, it's a bit more complex an issue than it seems
Last edited by skatamatic; Nov 5th, 2008 at 3:15 pm.
Reputation Points: 352
Solved Threads: 109
Master Poster
skatamatic is offline Offline
775 posts
since Nov 2007
Nov 5th, 2008
0

Re: CIN>>EQUATION (how to then mult by it later)

As VernonDozier said you have to read your input as a string. But then you have to parse your inputstring and that's a whole world on it's own! But if you're adventurous enough to try it, don't hesitate! Start with http://en.wikipedia.org/wiki/Parsing
Reputation Points: 2035
Solved Threads: 644
Senior Poster
ddanbe is offline Offline
3,736 posts
since Oct 2008
Nov 5th, 2008
0

Re: CIN>>EQUATION (how to then mult by it later)

Here's an actual working math parser. It only works with addition and subtraction though. You've got me interested now, so I'm gonna write a (much more useful) class for this problem.

C++ Syntax (Toggle Plain Text)
  1. #include <string.h>
  2. #include <iostream>
  3. using namespace std;
  4. int main()
  5. {
  6. string sFormula = "";
  7. string sBuffer;
  8. char szFormula[255];
  9. bool numStream(false);
  10. int iVal[2] = {0};
  11. int iReturnVal(0);
  12. int iCount(0);
  13. char cLastOperator(0);
  14. cout << "Enter formula: ";
  15. cin.getline(szFormula, 54);
  16. for (unsigned int i(0); i < strlen(szFormula); ++i)
  17. {
  18. if (isdigit(szFormula[i]))
  19. {
  20. numStream = true;
  21. sBuffer += szFormula[i];
  22. }
  23. if (numStream && (!isdigit(szFormula[i]) || i == strlen(szFormula) - 1))
  24. {
  25. numStream = false;
  26. iVal[iCount++] = atoi(sBuffer.c_str());
  27. if (cLastOperator == '+')
  28. {
  29. iReturnVal += iVal[0] + iVal[1];
  30. iVal[0] = 0;
  31. iVal[1] = 0;
  32. iCount = 0;
  33. cLastOperator = 0;
  34. }
  35. else if (cLastOperator == '-')
  36. {
  37. iReturnVal -= iVal[0] + iVal[1];
  38. iVal[0] = 0;
  39. iVal[1] = 0;
  40. iCount = 0;
  41. cLastOperator = 0;
  42. }
  43. sBuffer = "";
  44. }
  45. if (!numStream && (szFormula[i] == '+' || szFormula[i] == '-' || szFormula[i] == '*'))
  46. {
  47. cLastOperator = szFormula[i];
  48. }
  49. }
  50. cout << szFormula << " = " << iReturnVal << endl;
  51. cin.get();
  52. return 0;
  53. }

It works like this:
Input a stream of numbers and operands (- or +), all seperated by a space. Ie 2 + 6 + 8 - 11
And it will output the result. It won't throw any exceptions, so if you see eratic results you probably entered the equation wrong.
Last edited by skatamatic; Nov 5th, 2008 at 4:05 pm.
Reputation Points: 352
Solved Threads: 109
Master Poster
skatamatic is offline Offline
775 posts
since Nov 2007

This thread is more than three months old

No one has posted to this discussion for at least three months. Please let old threads die and do not reply to them unless you feel you have something new and valuable to contribute that absolutely must be added to make the discussion complete. Otherwise, please start a new thread in this forum instead.
Message:
Previous Thread in C++ Forum Timeline: A little problem
Next Thread in C++ Forum Timeline: Repaint window help?





About Us | Contact Us | Advertise | Acceptable Use Policy
Forum Index | Build Custom RSS Feed


Follow us on Twitter


© 2011 DaniWeb® LLC