Advertisement
Guest User

Untitled

a guest
Nov 21st, 2019
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.05 KB | None | 0 0
  1. #include<iostream>
  2. #include<stack>
  3. #include <fstream>
  4. #include <string>
  5. #include <cstring>
  6. using namespace std;
  7. stack<int>numbers;
  8. stack<char>functions;
  9. /*Задача 1.
  10. Нека е дадена следната дефиниция на израз:
  11. израз = неотрицателно цяло число | f(израз) | g(израз) | m(израз,израз), където:
  12. ● f(x) = (x * x) mod 100, където mod 100 връща остатъка при деление на 100
  13. ● g(x) = (x mod 5) ! , т.е. факториелът на остатъка на деленето на х на 5
  14. ● m(x,y) = min(x,y)
  15. Например, f(m(25, g(14))) е валиден израз от горния тип и се оценява до 76, защото:
  16. f(m(25,g(14))) =
  17. f( min( 25, (14 mod 5)!) =
  18. f (min (25, 24)) =
  19. (24 * 24) mod 100 = 76
  20. Даден е текстови файл с последователен достъп, в който са записани на отделен ред цяло
  21. положително число N и след него пак на отделни редове N на брой изрази от горния вид.
  22. Съдържанието на един примерен файл би бил:
  23. 3
  24. f(15)
  25. m(f(15),24)
  26. f(m(25, g(14)))
  27. Да се напише програма, която прочита информацията от един такъв файл и извежда на
  28. стандартния изход на отделен ред всеки израз от файла и съответната му крайна оценка (без
  29. междинни стъпки).
  30. Забележка:
  31. - Програмата трябва да работи за произволен израз от горния вид.
  32. - При реализацията можете да използвате избрана от вас работеща реализация на
  33. структурата или структурите, които ще използвате, включително и тези предоставяни от STL.
  34. Реализациите няма да се оценяват, а само тяхното използване при решаването на задачата*/
  35. int strNumber(string str, int& pos) {
  36. int n = 0;
  37. while (str[pos] >= '0' && str[pos] <= '9') {
  38. n = n * 10 + str[pos] - '0';
  39. pos++;
  40. }
  41. pos--;
  42. return n;
  43. }
  44. int fact(int x) {
  45. if (x == 1)
  46. return 1;
  47. return x * fact(x - 1);
  48. }
  49.  
  50. //f(x) = (x * x) mod 100
  51. int f(int x) {
  52.  
  53. return ((x * x) % 100);
  54.  
  55. }
  56. //g(x) = (x mod 5)!
  57. int g(int x) {
  58.  
  59. return fact((x % 5));
  60.  
  61. }
  62. //m(x,y) = min(x,y)
  63. int m(int x, int y) {
  64.  
  65. if (x > y)
  66. return y;
  67. else return x;
  68.  
  69. }
  70. void calculateFunction() {
  71. int x, y;
  72. char c;
  73.  
  74. c = functions.top();
  75. functions.pop();
  76.  
  77. x = numbers.top();
  78. numbers.pop();
  79. if (c == 'f') numbers.push(f(x));
  80. else if (c == 'g')numbers.push(g(x));
  81. else {
  82. y = numbers.top();
  83. numbers.pop();
  84. numbers.push(m(x, y));
  85. }
  86. }
  87. int calculateExpresion(string str) {
  88.  
  89. for (int i = 0; i < str.size(); i++) {
  90. if (str[i] >= '0' && str[i] <= '9') {
  91. numbers.push(strNumber(str, i));
  92. }
  93. else if (str[i] == ')')calculateFunction();
  94. else if (str[i] == 'f' || str[i] == 'g' || str[i] == 'm')functions.push(str[i]);
  95. }
  96.  
  97. return numbers.top();
  98.  
  99. }
  100. int main()
  101. {
  102. fstream expFile;
  103. expFile.open("exp.txt");
  104. string temp;
  105. getline(expFile, temp);
  106.  
  107. string temp2;
  108. getline(expFile, temp2);
  109.  
  110. expFile << 25<<endl;
  111.  
  112. expFile.close();
  113. /*
  114. for (int i = 0; i < (strNumber(temp,5)); i++)
  115. {
  116. string temp2;
  117. getline(expFile, temp2);
  118. expFile << cin.getline(calculateExpresion(temp2), 4);
  119. temp2 = NULL;
  120. }
  121.  
  122.  
  123. /*string str;
  124. getline(cin, str);
  125. for ( int i = 0; i < str.size(); i++) {
  126. if (str[i] >= '0' && str[i] <= '9') {
  127. numbers.push(strNumber(str, i));
  128. }
  129. else if (str[i] == ')')calculateFunction();
  130. else if (str[i] == 'f' || str[i] == 'g' || str[i] == 'm')functions.push(str[i]);
  131. }
  132.  
  133. cout << numbers.top();
  134. */
  135. // cout<<calculateExpresion("f(m(25, g(14)))");
  136. return 0;
  137. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement