Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <stack>
- #include <fstream>
- #include <string>
- #include <Windows.h>
- using namespace std;
- stack<double> numbers;
- stack<char> operations;
- bool IsNumber(string& element) {
- for (int i = 0; i < element.length(); i++)
- if (element[i] < '0' || element[i] > '9')
- return false;
- return true;
- }
- void Calculate() {
- if (operations.empty())
- return;
- double number = numbers.top();
- numbers.pop();
- char operation = operations.top();
- operations.pop();
- if (operation == '*' || operation == '/') {
- double next = numbers.top();
- numbers.pop();
- double result = operation == '*' ? next * number : next / number;
- numbers.push(result);
- Calculate();
- }
- else {
- Calculate();
- double next = numbers.top();
- numbers.pop();
- double result = operation == '+' ? next + number : next - number;
- numbers.push(result);
- }
- }
- int main()
- {
- SetConsoleCP(1251);
- SetConsoleOutputCP(1251);
- // --- input
- ifstream inputFile("expression.txt");
- if (!inputFile.is_open())
- return 1;
- while (!inputFile.eof()) {
- string element;
- inputFile >> element;
- if (element.empty())
- continue;
- if (IsNumber(element)) {
- double number = stod(element);
- numbers.push(number);
- }
- else if (element.length() == 1) {
- switch (element[0]) {
- case '+':
- case '-':
- case '*':
- case '/':
- operations.push(element[0]);
- break;
- default:
- cout << "Неизвестная операция '" << element << "'." << endl;
- return 2;
- }
- }
- else {
- cout << "Недопустимый элемент '" << element << "'." << endl;
- return 3;
- }
- }
- inputFile.close();
- // --- validation
- if (numbers.empty()) {
- cout << "Выражение не содержит чисел." << endl;
- return 4;
- }
- if (operations.empty()) {
- cout << "Выражение не содержит арифметических операций." << endl;
- return 5;
- }
- if (operations.size() != numbers.size() - 1) {
- cout << "Кол-во операций должно быть на единицу меньше кол-ва чисел." << endl;
- return 6;
- }
- // --- calculation
- Calculate();
- cout << "Результат вычислений: " << numbers.top() << endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement