Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- int getLength(char first[]);
- int fromCharToInt(char arr[]);
- int Pow(int num, int pow);
- int Factorial(int n);
- int main()
- {
- char* expression = new char[100];
- int result = 0;
- int number = 0;
- cout << "Enter an expression to calculate or write 'exit' to close the program:" << endl;
- cin.getline(expression, 100);
- char operation = ' ';
- if (expression[0] == 'e' && expression[1] == 'x' && expression[2] == 'i' && expression[3] == 't' && expression[4] == '\0')
- return 0;
- int sizeOfArray = getLength(expression);
- for (int i = 0; i < sizeOfArray; i++)
- {
- if (expression[i] != '+' && expression[i] != '-' && expression[i] != '*' && expression[i] != '!' && expression[i] != '/'
- && expression[i] != ' ' && expression[i] != '=' && (expression[i] < '0' || expression[i]>'9'))
- {
- cout << "This expression is invalid!" << endl;
- return 0;
- }
- if (expression[i] == '!' && expression[i + 1] == '!')
- {
- cout << "This expression is invalid!" << endl;
- return 0;
- }
- if (expression[i] == ' ' && expression[i + 1] == '!')
- {
- cout << "This expression is invalid!" << endl;
- return 0;
- }
- }
- if (expression[0] == ' ')
- {
- cout << "This expression is invalid!" << endl;
- return 0;
- }
- if (expression[sizeOfArray - 1] != '=')
- {
- cout << "This expression is invalid!" << endl;
- return 0;
- }
- char* firstNum = new char[35];
- int elementsFirstNum = 0;
- int i = 0;
- while (expression[i] != ' ')
- {
- if (expression[0] == '-')
- {
- i++;
- }
- firstNum[elementsFirstNum] = expression[i];
- elementsFirstNum++;
- i++;
- }
- firstNum[elementsFirstNum] = '\0';
- result = fromCharToInt(firstNum);
- for (int i = getLength(firstNum); i < sizeOfArray - 1; i++)
- {
- if (expression[i] != ' ')
- {
- cout << "This expression is invalid!" << endl;
- return 0;
- }
- else
- {
- i++;
- }
- if (expression[i] == '+' || expression[i] == '-' || expression[i] == '*' || expression[i] == '/' || expression[i] == '!')
- {
- operation = expression[i];
- i += 2;
- }
- char* secondNum = new char[35];
- int elementsSecondNum = 0;
- while (expression[i] != ' ')
- {
- if (expression[i] == '!')
- {
- i++;
- break;
- }
- secondNum[elementsSecondNum] = expression[i];
- elementsSecondNum++;
- i++;
- }
- secondNum[elementsSecondNum] = '\0';
- number = fromCharToInt(secondNum);
- if (expression[i - 1] == '!')
- {
- number = Factorial(number);
- }
- i--;
- switch (operation)
- {
- case '+':
- result = result + number;
- break;
- case '-':
- result = result - number;
- break;
- case '*':
- result = result * number;
- break;
- case '/':
- if (number == 0)
- {
- cout << "This expression is invalid!" << endl;
- return 0;
- }
- result = result / number;
- break;
- default:
- break;
- }
- delete[]secondNum;
- if (expression[i + 2] == '=')
- break;
- }
- cout << result;
- delete[]expression;
- delete[]firstNum;
- return 0;
- }
- int getLength(char first[])
- {
- int counter = 0;
- while (first[counter] != '\0')
- {
- counter++;
- }
- return counter;
- }
- int fromCharToInt(char arr[])
- {
- int size = getLength(arr);
- int number = 0;
- int pow = size - 1;
- for (int i = 0; i < size; i++)
- {
- number += (arr[i] - '0') * Pow(10, pow--);
- }
- return number;
- }
- int Pow(int num, int pow)
- {
- int result = 1;
- for (int i = 0; i < pow; i++) {
- result *= num;
- }
- return result;
- }
- int Factorial(int n)
- {
- if (n == 0)
- {
- return 1;
- }
- else
- {
- return n * Factorial(n - 1);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement