Advertisement
Guest User

Untitled

a guest
Nov 18th, 2019
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.17 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <stack>
  4. #include <fstream>
  5.  
  6. unsigned int factorial(unsigned int num)
  7. {
  8. if (num == 0 || num == 1)
  9. {
  10. return 1;
  11. }
  12. int result = 1;
  13. for (int i = 0; i < num; i++)
  14. {
  15. result *= num - i;
  16. }
  17. return result;
  18. }
  19.  
  20. unsigned int powOf(unsigned int num, int p)
  21. {
  22. if (p == 0)
  23. {
  24. return 1;
  25. }
  26. for (int i = 0; i < p; i++)
  27. {
  28. num *= num;
  29. }
  30. return num;
  31. }
  32.  
  33. using namespace std;
  34.  
  35. unsigned int f(unsigned int x)
  36. {
  37. return x % 100;
  38. }
  39.  
  40. unsigned int g(unsigned int x)
  41. {
  42. x %= 5;
  43. return factorial(x);
  44. }
  45.  
  46. unsigned int m(int x, int y)
  47. {
  48. return x < y ? x : y;
  49. }
  50. int main()
  51. {
  52. int n;
  53. ifstream iFile("Expression.txt");
  54. if (!iFile)
  55. {
  56. cerr << "File could not be opened!\n";
  57. }
  58. iFile >> n;
  59. string expression;
  60. while (n > 0)
  61. {
  62. int result = 0;
  63. stack<int> numbers;
  64. stack<char> funcs;
  65. iFile >> expression;
  66. int length = expression.length();
  67. for (int i = 0; i < length; i++)
  68. {
  69. int exponent = 0;
  70. if (expression[i] == 'f' || expression[i] == 'g' || expression[i] == 'm')
  71. {
  72. funcs.push(expression[i]);
  73. }
  74. else if (expression[i] >= '0' && expression[i] <= '9')
  75. {
  76. int p = expression[i];
  77. int cnt = 1;
  78. while (expression[i+1] >= '0' && expression[i+1] <= 9)
  79. {
  80. p += powOf(10, cnt) * (expression[++i] - '0');
  81. }
  82. numbers.push(p);
  83. }
  84. else if (expression[i] == '(' || expression[i] == ')' || expression[i] == ',')
  85. {
  86. continue;
  87. }
  88. else
  89. {
  90. cout << "Expression contains an unrecognized symbol\n";
  91. }
  92. }
  93. while (!funcs.empty())
  94. {
  95. if (funcs.top() == 'f')
  96. {
  97. result = numbers.top();
  98. result = f(result);
  99. numbers.pop();
  100. numbers.push(result);
  101. }
  102. else if (funcs.top() == 'g')
  103. {
  104. result = numbers.top();
  105. result = g(result);
  106. numbers.pop();
  107. numbers.push(result);
  108. }
  109. else if (funcs.top() == 'm')
  110. {
  111. result = numbers.top();
  112. numbers.pop();
  113. int arg2 = numbers.top();
  114. numbers.pop();
  115. result = m(result, arg2);
  116. numbers.push(result);
  117. }
  118. funcs.pop();
  119. }
  120. cout << numbers.top() << endl;
  121. n--;
  122. }
  123. iFile.close();
  124. return 0;
  125. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement