Advertisement
Derga

Untitled

May 21st, 2023
619
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.62 KB | None | 0 0
  1. int main(int argc, char **argv) {
  2.   if (argc != 3) {
  3.     return ERROR_PARAMETER_INVALID;
  4.   }
  5.  
  6.   try {
  7.     std::string element;
  8.     std::stack<LN> numbers;
  9.     std::ifstream in(argv[1]);
  10.     std::ofstream out(argv[2]);
  11.     if (in.bad() || in.fail() || out.bad() || out.fail()) {
  12.       return ERROR_CANNOT_OPEN_FILE;
  13.     }
  14.     while (in >> element) {
  15.       if (element == "+") {
  16.         ExecuteBinary(numbers,
  17.                       [](const auto &n1, const auto &n2) { return n1 + n2; });
  18.       } else if (element == "-") {
  19.         ExecuteBinary(numbers,
  20.                       [](const auto &n1, const auto &n2) { return n1 - n2; });
  21.       } else if (element == "/") {
  22.         ExecuteBinary(numbers,
  23.                       [](const auto &n1, const auto &n2) { return n1 / n2; });
  24.       } else if (element == "*") {
  25.         ExecuteBinary(numbers,
  26.                       [](const auto &n1, const auto &n2) { return n1 * n2; });
  27.       } else if (element == "%") {
  28.         ExecuteBinary(numbers,
  29.                       [](const auto &n1, const auto &n2) { return n1 % n2; });
  30.       } else if (element == "!=") {
  31.         ExecuteBinary(numbers,
  32.                       [](const auto &n1, const auto &n2) { return n1 != n2; });
  33.       } else if (element == "==") {
  34.         ExecuteBinary(numbers,
  35.                       [](const auto &n1, const auto &n2) { return n1 == n2; });
  36.       } else if (element == ">=") {
  37.         ExecuteBinary(numbers,
  38.                       [](const auto &n1, const auto &n2) { return n1 >= n2; });
  39.       } else if (element == "<=") {
  40.         ExecuteBinary(numbers,
  41.                       [](const auto &n1, const auto &n2) { return n1 <= n2; });
  42.       } else if (element == "<") {
  43.         ExecuteBinary(numbers,
  44.                       [](const auto &n1, const auto &n2) { return n1 < n2; });
  45.       } else if (element == ">") {
  46.         ExecuteBinary(numbers,
  47.                       [](const auto &n1, const auto &n2) { return n1 > n2; });
  48.       } else if (element == "_") {
  49.         ExecuteUnary(numbers, [](const auto &n) { return -n; });
  50.       } else if (element == "~") {
  51.         ExecuteUnary(numbers, [](const auto &n) { return ~n; });
  52.       } else {
  53.         numbers.emplace(element);
  54.         if (numbers.top().IsNaN()) {
  55.           return ERROR_DATA_INVALID;
  56.         }
  57.       }
  58.     }
  59.  
  60.     while (!numbers.empty()) {
  61.       out << numbers.top().ToString() << std::endl;
  62.       numbers.pop();
  63.     }
  64.   } catch (const std::bad_alloc &) {
  65.     return ERROR_OUT_OF_MEMORY;
  66.   } catch (const std::domain_error &) {
  67.     return ERROR_DATA_INVALID;
  68.   } catch (...) {
  69.     return ERROR_UNKNOWN;
  70.   }
  71.   return SUCCESS;
  72. }
  73.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement