Обратная польская запись. Калькулятор на C#

Поговорим об обратной польской записи математических выражений и напишем соответствующую программу-калькулятор с набором операций +, -, *, /. Для хранения данных будем использовать стек. Разработку будем вести на языке программирования C#.

Теоретические сведения

Обратная польская запись (еще ее называют бесскобочной) – это форма записи математических выражений, в которой знак операции стоит после своих операндов.

Приведем пример. Пусть имеется математическое выражение:

(3 – 6) * (2 + 1)

Тогда в обратной польской записи это выражение будет выглядеть следующим образом:

3 6 – 2 1 + *

Сначала нужно из 3 отнять 6, будет -3, затем к 2 прибавить 1, будет 3, и, наконец, -3 умножить на 3, будет -9. То есть:

3 6 – 2 1 + * = -9

Описание алгоритма

Каждый операнд (число) помещается в стек. Когда на вход поступает знак операции, из стека извлекается нужное количество операндов (для операций +, -, *, / требуется два операнда) и к ним применяется данная операция, затем результат заносится в стек. Конечный результат вычислений будет находиться в вершине стека.

Стек – это структура данных организованная по принципу LIFO (last in — first out, “последним пришел — первым вышел”). То есть данные, помещаемые в стек, оказываются в его вершине, таким образом стек как бы противоположен очереди.

Операция помещения данных в стек обозначается Push. Операция извлечения данных из стека – Pop.

Стек. Обратная польская запись

Реализация алгоритма

Приведем реализацию описанного выше алгоритма на примере программы-калькулятора. Для разработки был использован язык программирования C#.

Прокомментируем код программы.

arg – строка в которой будут хранится введенные данные, st – экземпляр класса Stack<double> (в стеке будут хранится вещественные числа типа double). Цикл while (строки 16-52) будет выполняться до тех пора, пока не будет введено слово exit, в его же условии производится считывание данных с консоли. Далее выполняется проверка введенных данных с помощью оператора double.TryParse(…): оператор вернет true, если было введено число и это число скопируется в переменную num (а затем число поместится в стек (строка 21)); если было введено не число, оператор вернет значение false, и затем введенные данные будут обработаны с помощью оператора switch. Вывод результата вычисления будет осуществлен при вводе команды calc.

Обратите внимание на порядок извлечения данных из стека при различный операциях: если при сложении и умножении порядок не важен, то при вычитании и делении он имеет значение.

Демонстрация работы программы приведена на скриншоте ниже.

Обратная польская запись. Демонстрация работы программы

Чтобы скачать исходник программы из этого урока, нажмите на кнопку:

Скачать исходник

 

 

Обратная польская запись. Калькулятор на C#
5 (100%) 2 votes

Поделиться в соц. сетях:

Один комментарий к статье “Обратная польская запись. Калькулятор на C#

  1. Иван

    Спасибо за статью. Понятное объяснение. Для полного понимания лучше сделать собственный класс Stack. Но это уже немного другая тема.

Добавить комментарий для Иван Отменить ответ

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">