Forum: Feedback på dynamisk kalkylator

Forum huvudsida -> Programmering -> Feedback på dynamisk kalkylator

Sidor: 1

Till botten

NetNinja 19:57 - 3:e Maj 2007 | Post #1
Medlem
Inlägg: 116


Skicka PM
Har gjort en miniräknare som man kan skriva hur långa uträkningar som helst utan att behöva definera hur lång den ska vara. Lite knasig dock då den skiter i matematiska regler.

  1. #include <iostream>
  2. #include <string>
  3. #include <cctype>
  4. using namespace std;
  5.  
  6. int main(){
  7. string calcu;
  8. int summa=0, way=0, temp=0;
  9. cout<<"Mata in uträkning";
  10. cin>>calcu;
  11. for(int i=0; i<calcu.size();i++){
  12. if(isdigit(calcu.at(i))){
  13. temp*=10;
  14. temp+=calcu.at(i)-48;
  15. }
  16. else{
  17. if(way==0)
  18. summa+=temp;
  19. else if(way==1)
  20. summa-=temp;
  21. else if(way==2)
  22. summa*=temp;
  23. else if(way==3)
  24. summa/=temp;
  25.  
  26.  
  27. if(calcu.at(i)=='+')
  28. way=0;
  29. else if(calcu.at(i)=='-')
  30. way=1;
  31. else if(calcu.at(i)=='*')
  32. way=2;
  33. else if(calcu.at(i)=='/')
  34. way=3;
  35. temp=0;
  36. }
  37. }
  38. if(way==0)
  39. summa+=temp;
  40. else if(way==1)
  41. summa-=temp;
  42. else if(way==2)
  43. summa*=temp;
  44. else if(way==3)
  45. summa/=temp;
  46. cout<<summa;
  47. return 0;
  48. }


-------------------------



Senast redigerad 20:01 - 3:e Maj 2007


ozamosi 20:23 - 3:e Maj 2007 | Post #2
Administratör
Inlägg: 1129


Skicka PM
Bah, så trodde jag att jag hade hittat en bugg, men jag hade fel.Smiley

För att fixa prioritering kan man använda järnvägsalgoritmen - det var i alla fall vad vi fick lära oss i vår lispkurs. Googlar man hittar man gott om info om den. Den går ut på att man använder två stackar (listor av valfri, helst variabel längd) - ett för tal, och ett för räknesätt - och sedan lägger allt där ända tills man upptäcker att det ligger saker där med högre prioritet än räknesättet man stoppar dit. Typ.

-------------------------
Ljusblå



Belsebubben 21:02 - 3:e Maj 2007 | Post #3
Medlem
Inlägg: 76


Skicka PM
Sedan kan man ju alltid använda yacc, för det, ganska mycket lättare tror jag.

Annars funkar ju http://en.wikipedia.org/wiki/Shunting_yard_algorithm som ozamosi sa.

PS. ,,r jag wikipedia-länkaren nr1 här?

-------------------------
Das Blinkencomp, jag väljer dig!



Sidor: 1

Forum huvudsida -> Programmering -> Feedback på dynamisk kalkylator
Atom feed

Du får inte posta i den här tråden | Till toppen