Advertisement
Guest User

Untitled

a guest
Oct 23rd, 2014
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.69 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. int main()
  4. {
  5. using namespace std;
  6.  
  7. char carattere;
  8. float tot = 0.f;
  9. int cur_number = 0;
  10. float tmp = 1.f;
  11. int operation_pending = 0;
  12. int block_begin = 0;
  13.  
  14. cout << "Inserire un carattere per volta dell'espressione partendo da un intero positivo:" << endl;
  15.  
  16. cin >> carattere;
  17. while (true)
  18. {
  19. if (carattere >= '0' && carattere <= '9')
  20. {
  21. cur_number = cur_number * 10 + (carattere - '0');
  22. }
  23. else
  24. {
  25. switch(carattere) {
  26. // 17 + 2 +
  27. // 5(tot) - 4 * 3 * 2 + 3 - 2 =
  28. case '+':
  29. if (operation_pending) {
  30. if (operation_pending == 1)
  31. tmp *= cur_number;
  32. else
  33. tmp /= cur_number;
  34.  
  35. if (block_begin == 1)
  36. tot += tmp;
  37. else if (block_begin == 2)
  38. tot -= tmp;
  39. else
  40. tot = tmp;
  41.  
  42. operation_pending = 0;
  43. block_begin = 1;
  44. tmp = 1.f;
  45. }
  46. else {
  47. if (block_begin == 1)
  48. tot += cur_number;
  49. else if (block_begin == 2)
  50. tot -= cur_number;
  51. else
  52. tot = cur_number;
  53. block_begin = 1;
  54. }
  55. cur_number = 0;
  56. break;
  57. case '-':
  58. if (operation_pending) {
  59. if (operation_pending == 1)
  60. tmp *= cur_number;
  61. else
  62. tmp /= cur_number;
  63.  
  64. if (block_begin == 1)
  65. tot += tmp;
  66. else if (block_begin == 2)
  67. tot -= tmp;
  68. else
  69. tot = tmp;
  70.  
  71. operation_pending = 0;
  72. block_begin = 2;
  73. tmp = 1.f;
  74. }
  75. else {
  76. if (block_begin == 1)
  77. tot += cur_number;
  78. else if (block_begin == 2)
  79. tot -= cur_number;
  80. else
  81. tot = cur_number;
  82. block_begin = 2;
  83. }
  84. cur_number = 0;
  85. break;
  86. case '*':
  87. if (operation_pending == 2)
  88. tmp /= cur_number;
  89. else if (operation_pending == 1)
  90. tmp *= cur_number;
  91. else
  92. tmp = cur_number;
  93. operation_pending = 1;
  94. cur_number = 0;
  95. break;
  96. case '/':
  97. if (operation_pending == 1)
  98. tmp *= cur_number;
  99. else if (operation_pending == 2)
  100. tmp /= cur_number;
  101. else
  102. tmp = cur_number;
  103.  
  104. operation_pending = 2;
  105. cur_number = 0;
  106. break;
  107. case '=':
  108. if (operation_pending) {
  109. if (operation_pending == 1)
  110. tmp *= cur_number;
  111. else
  112. tmp /= cur_number;
  113.  
  114. if (block_begin == 1)
  115. tot += tmp;
  116. else if (block_begin == 2)
  117. tot -= tmp;
  118. else
  119. tot = tmp;
  120.  
  121. operation_pending = 0;
  122. block_begin = 2;
  123. tmp = 1.f;
  124. }
  125. else {
  126. if (block_begin == 1)
  127. tot += cur_number;
  128. else if (block_begin == 2)
  129. tot -= cur_number;
  130. else
  131. tot = cur_number;
  132. }
  133.  
  134. cout << tot << endl;
  135. cin >> carattere;
  136. return 0;
  137. }
  138. }
  139. cin >> carattere;
  140. }
  141.  
  142. return 0;
  143. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement