back to scratko.xyz
aboutsummaryrefslogtreecommitdiff
path: root/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'README.md')
-rw-r--r--README.md40
1 files changed, 40 insertions, 0 deletions
diff --git a/README.md b/README.md
index 979b020..a7608ae 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,43 @@
# Arithmetic expression computator
<img src="arithmetic-expression-computator.png" />
+
+## Introduction
+
+Remarkably, this program is written in C without using library features at all.
+Assembler modules are used for program entry point and system call wrappers.
+
+This program is based on two algorithms: reverse polish notation (RPN) and
+Dijkstra's algorithm.
+
+Any arithmetic expression can be calculated. To do this, the expression needs to
+be represented in an RPN, in that operands are written first, then
+the operation sign; operands can be any complex expressions.
+For example, the expression `(x+y)*(1-z)` in RPN would be written as: x y + 1 z -
+\*. All this is calculated using the stack.
+
+To translate an arithmetic expression from traditional infix notation to RPN we
+need to use Dijkstra's algorithm.
+The stack is also used here, but a new one.
+According to this algorithm, the initial expression is viewed from left to
+right. The elements are written out either to the RPN stack or to the operation
+stack (for Dijkstra's algorithm). While viewing the expression, open brackets
+and operation symbols (in some cases) are inserted into the operation stack, and
+operands as well as operation symbols (again, in some cases) are inserted into
+the RPN stack. The algorithm is described in more detail in the book А.В.
+Столяров "Программирование: введение в профессию" (том 1, ДМК Пресс, стр. 644).
+
+## Building and usagea
+
+```
+git clone https://git.scratko.xyz/arithmetic-expression-computator
+cd arithmetic-expression-computator
+make
+```
+Launch the program `./arith_exp`
+After starting, enter an arithmetic expression.
+
+Notes:
+- the expression must not contain any space characters
+- negative values must be surrounded by brackets
+- you can see an example of the expression on the screenshot above.