From 8a704989e2d4733e6e847cb272a40dd85de4c9cd Mon Sep 17 00:00:00 2001 From: scratko Date: Mon, 1 Apr 2024 19:53:45 +0300 Subject: update README --- README.md | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) (limited to 'README.md') 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 + +## 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. -- cgit v1.2.3