ОСТОРОЖНО МОШЕННИКИ! В последнее время в социальных сетях участились случаи предложения помощи в написании программ от лиц, прикрывающихся сайтом vscode.ru. Мы никогда не пишем первыми и не размещаем никакие материалы в посторонних группах ВК. Для связи с нами используйте исключительно эти контакты: vscoderu@yandex.ru, https://vk.com/vscode


Обратная польская запись. Калькулятор на 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%) 3 votes




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

2 комментария(ев) к статье “Обратная польская запись. Калькулятор на C#

  1. Иван

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

  2. Programmer

    Спасибо. Получилось. Много где искал информации на эту тему, но у вас самое то.

Добавить комментарий

Ваш 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="">