Advertisement
Guest User

Untitled

a guest
Jan 28th, 2020
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.55 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int getLength(char first[]);
  6. int fromCharToInt(char arr[]);
  7. int Pow(int num, int pow);
  8. int Factorial(int n);
  9.  
  10. int main()
  11. {
  12. char* expression = new char[100];
  13. int result = 0;
  14. int number = 0;
  15.  
  16. cout << "Enter an expression to calculate or write 'exit' to close the program:" << endl;
  17.  
  18. cin.getline(expression, 100);
  19. char operation = ' ';
  20.  
  21. if (expression[0] == 'e' && expression[1] == 'x' && expression[2] == 'i' && expression[3] == 't' && expression[4] == '\0')
  22. return 0;
  23.  
  24. int sizeOfArray = getLength(expression);
  25.  
  26. for (int i = 0; i < sizeOfArray; i++)
  27. {
  28. if (expression[i] != '+' && expression[i] != '-' && expression[i] != '*' && expression[i] != '!' && expression[i] != '/'
  29. && expression[i] != ' ' && expression[i] != '=' && (expression[i] < '0' || expression[i]>'9'))
  30. {
  31. cout << "This expression is invalid!" << endl;
  32. return 0;
  33. }
  34. if (expression[i] == '!' && expression[i + 1] == '!')
  35. {
  36. cout << "This expression is invalid!" << endl;
  37. return 0;
  38. }
  39. if (expression[i] == ' ' && expression[i + 1] == '!')
  40. {
  41. cout << "This expression is invalid!" << endl;
  42. return 0;
  43. }
  44. }
  45. if (expression[0] == ' ')
  46. {
  47. cout << "This expression is invalid!" << endl;
  48. return 0;
  49. }
  50. if (expression[sizeOfArray - 1] != '=')
  51. {
  52. cout << "This expression is invalid!" << endl;
  53. return 0;
  54. }
  55.  
  56. char* firstNum = new char[35];
  57. int elementsFirstNum = 0;
  58. int i = 0;
  59. while (expression[i] != ' ')
  60. {
  61. if (expression[0] == '-')
  62. {
  63. i++;
  64. }
  65. firstNum[elementsFirstNum] = expression[i];
  66. elementsFirstNum++;
  67. i++;
  68. }
  69. firstNum[elementsFirstNum] = '\0';
  70. result = fromCharToInt(firstNum);
  71.  
  72.  
  73. for (int i = getLength(firstNum); i < sizeOfArray - 1; i++)
  74. {
  75. if (expression[i] != ' ')
  76. {
  77. cout << "This expression is invalid!" << endl;
  78. return 0;
  79. }
  80. else
  81. {
  82. i++;
  83. }
  84.  
  85. if (expression[i] == '+' || expression[i] == '-' || expression[i] == '*' || expression[i] == '/' || expression[i] == '!')
  86. {
  87. operation = expression[i];
  88. i += 2;
  89. }
  90.  
  91. char* secondNum = new char[35];
  92. int elementsSecondNum = 0;
  93. while (expression[i] != ' ')
  94. {
  95. if (expression[i] == '!')
  96. {
  97. i++;
  98. break;
  99. }
  100. secondNum[elementsSecondNum] = expression[i];
  101. elementsSecondNum++;
  102. i++;
  103. }
  104. secondNum[elementsSecondNum] = '\0';
  105. number = fromCharToInt(secondNum);
  106.  
  107. if (expression[i - 1] == '!')
  108. {
  109. number = Factorial(number);
  110. }
  111. i--;
  112.  
  113. switch (operation)
  114. {
  115. case '+':
  116. result = result + number;
  117. break;
  118. case '-':
  119. result = result - number;
  120. break;
  121. case '*':
  122. result = result * number;
  123. break;
  124. case '/':
  125. if (number == 0)
  126. {
  127. cout << "This expression is invalid!" << endl;
  128. return 0;
  129. }
  130. result = result / number;
  131. break;
  132. default:
  133. break;
  134. }
  135.  
  136. delete[]secondNum;
  137.  
  138. if (expression[i + 2] == '=')
  139. break;
  140. }
  141.  
  142. cout << result;
  143.  
  144. delete[]expression;
  145. delete[]firstNum;
  146. return 0;
  147. }
  148.  
  149. int getLength(char first[])
  150. {
  151. int counter = 0;
  152. while (first[counter] != '\0')
  153. {
  154. counter++;
  155. }
  156. return counter;
  157. }
  158.  
  159. int fromCharToInt(char arr[])
  160. {
  161. int size = getLength(arr);
  162. int number = 0;
  163. int pow = size - 1;
  164.  
  165. for (int i = 0; i < size; i++)
  166. {
  167. number += (arr[i] - '0') * Pow(10, pow--);
  168. }
  169. return number;
  170. }
  171.  
  172. int Pow(int num, int pow)
  173. {
  174. int result = 1;
  175.  
  176. for (int i = 0; i < pow; i++) {
  177. result *= num;
  178. }
  179. return result;
  180. }
  181.  
  182. int Factorial(int n)
  183. {
  184. if (n == 0)
  185. {
  186. return 1;
  187. }
  188. else
  189. {
  190. return n * Factorial(n - 1);
  191. }
  192. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement