From e8f6c2f239243f7b3bfebb48a52f67549ec8c300 Mon Sep 17 00:00:00 2001
From: leh0044 <huy.tai.le.st@vsb.cz>
Date: Wed, 28 Feb 2024 13:52:03 +0000
Subject: [PATCH] Add new file

---
 lab1 | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 50 insertions(+)
 create mode 100644 lab1

diff --git a/lab1 b/lab1
new file mode 100644
index 0000000..33f980a
--- /dev/null
+++ b/lab1
@@ -0,0 +1,50 @@
+def evaluate_expression(expr):
+    def apply_op(op, vals):
+        r, l = vals.pop(), vals.pop()
+        if op == '+': vals.append(l + r)
+        elif op == '-': vals.append(l - r)
+        elif op == '*': vals.append(l * r)
+        elif op == '/': vals.append(l / r)
+    def op_precedence(op1, op2):
+        precedences = {'+': 1, '-': 1, '*': 2, '/': 2, '(': 0, ')': 0}
+        return precedences[op1] >= precedences[op2]
+    operators, values, i = [], [], 0
+    while i < len(expr):
+        if expr[i] == ' ':
+            i += 1
+            continue
+        if expr[i] in '0123456789':
+            j = i
+            while j < len(expr) and expr[j] in '0123456789':
+                j += 1
+            values.append(int(expr[i:j]))
+            i = j
+        elif expr[i] == '(':
+            operators.append(expr[i])
+            i += 1
+        elif expr[i] == ')':
+            while operators[-1] != '(':
+                apply_op(operators.pop(), values)
+            operators.pop()
+            i += 1
+        else:
+            while operators and operators[-1] != '(' and op_precedence(operators[-1], expr[i]):
+                apply_op(operators.pop(), values)
+            operators.append(expr[i])
+            i += 1
+
+    while operators:
+        apply_op(operators.pop(), values)
+    return values[0]
+
+def main():
+    N = int(input().strip())
+    for _ in range(N):
+        expr = input().strip().replace(" ", "")
+        try:
+            print(evaluate_expression(expr))
+        except:
+            print("ERROR")
+
+if __name__ == "__main__":
+    main()
-- 
GitLab