Advertisement
Guest User

Untitled

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