GithubHelp home page GithubHelp logo

ex10's Introduction

Ex10 Перевод арифметического выражения из инфиксной в постфиксную запись

Краткие сведения из теории

Понятие арифметического выражения

Арифметическое выражение - выражение, в котором операндами являются объекты, над которыми выполняются арифметические операции. Например,

(1 + 2) / (3 + 4 * 6.7) - 5.3 * 4.4

При такой форме записи (называемой инфиксной, где знаки операций стоят между операндами) порядок действий определяется расстановкой скобок и приоритетом операций. Постфиксная (или обратная польская) форма записи не содержит скобок, а знаки операций следуют после соответствующих операндов. Тогда для приведённого примера постфиксная форма будет иметь вид:

1 2 + 3 4 6.7 * + / 5.3 4.4 * -

Обратная польская нотация была разработана австралийским ученым Чарльзом Хэмблином в середине 50-х годов прошлого столетия на основе польской нотации, которая была предложена в 1920 году польским математиком Яном Лукасевичем. Эта нотация лежит в основе организации вычислений для арифметических выражений. Известный ученый Эдсгер Дейкстра предложил алгоритм для перевода выражений из инфиксной в постфиксную форму. Данный алгоритм основан на использовании стека.

Перевод в постфиксную форму

Данный алгоритм основан на использовании стека. На вход алгоритма поступает строка символов, на выходе должна быть получена строка с постфиксной формой. Каждой операции и скобкам приписывается приоритет:

(  - 0
)  - 1
+- - 2
*/ - 3

Предполагается, что входная строка содержит синтаксически правильное выражение.

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

  • Приоритет операции равен 0 (это '(' ),
  • Приоритет операции строго больше приоритета операции, лежащей на вершине стека,
  • Стек пуст.

В противном случае из стека извлекаются все знаки операций с приоритетом больше или равным приоритету текущей операции. Они переписываются в выходную строку, после чего знак текущей операции помещается в стек. Имеется особенность в обработке закрывающей скобки. Появление закрывающей скобки во входной строке приводит к выталкиванию и записи в выходную строку всех знаков операций до появления открывающей скобки. Открывающая скобка из стека выталкивается, но в выходную строку не записывается. Таким образом, ни открывающая, ни закрывающая скобки в выходную строку не попадают. После просмотра всей входной строки происходит последовательное извлечение всех элементов стека с одновременной записью знаков операций, извлекаемых из стека, в выходную строку.

Задача №1

Разработать функцию infix2prefix, преобразующую запись арифметического выражения в инфиксной форме в запись того же выражения, но в постфиксной форме

Примечание

Функцию можно использовать следующим образом:

#include "postfix.h"

int main()
{
    std::string s1("2 + 6 * 3 / (4 - 2)");
    std::string s2=infix2prefix(s1);
    std::cout << s2;  // 2 6 3 * 4 2 - / +
}

Примечание

Предполагается, что в записи арифметического выражения используются только цифры, знаки операций, скобки и десятичная точка. Числа записаны только положительные, они могут быть как целые, так и вещественные. Скобки расставлены корректно. Глубина вложения скобок - не более 100. Количество операций в выражении - не более 200.

Задача №2

Написать демонстрационную программу с использованием преобразования

Структура проекта

  • include/MyStack.h - заголовочный файл для шаблона класса MyStack.
  • include/postfix.h - заголовочный файл для создаваемой функции.
  • src/postfix.cpp - файл с реализацией функции.
  • main.cpp - домонстрационная программы для работы с функцией.

Список участников/веток

  1. Бакурский Андрей Сергеевич 19 ПИ-1 b1
  2. Балаян Роман Каренович 19 ПИ-1 b2
  3. Бекина Светлана Сергеевна 19 ПИ-2 b3
  4. Боряев Сергей Сергеевич 19 ПИ-1 b4
  5. Бурцев Роман Андреевич 19 ПИ-1 b5
  6. Варгин Дмитрий Александрович 19 ПИ-1 b6
  7. Вотинова Ксения Константиновна 19 ПИ-1 b7
  8. Герасимов Алексей Александрович 19 ПИ-1 b8
  9. Грачев Александр Евгеньевич 19 ПИ-1 b9
  10. Долгополов Алексей Геннадьевич 19 ПИ-1 b10
  11. Думаревская Татьяна Николаевна 19 ПИ-2 b11
  12. Емшанов Павел Андреевич 19 ПИ-1 b12
  13. Игумнова Наталья Дмитриевна 19 ПИ-2 b13
  14. Климов Алексей Сергеевич 19 ПИ-1 b14
  15. Лукичева Полина Александровна 19 ПИ-1 b15
  16. Лупехина Людмила Евгеньевна 19 ПИ-1 b16
  17. Макаров Вадим Дмитриевич 19 ПИ-1 b17
  18. Мурзинов Михаил Денисович 19 ПИ-1 b18
  19. Николаева Олеся Игоревна 19 ПИ-1 b19
  20. Османов Ислам Рамилевич 19 ПИ-1 b20
  21. Павлова Дарья Андреевна 19 ПИ-1 b21
  22. Сапожников Андрей Михайлович 19 ПИ-1 b22
  23. Сафронов Иван Дмитриевич 19 ПИ-1 b23
  24. Смирнов Григорий Андреевич 19 ПИ-1 b24
  25. Стоянов Станислав Степанович 19 ПИ-1 b25
  26. Трухин Егор Сергеевич 19 ПИ-1 b26
  27. Ускова Елена Максимовна 19 ПИ-1 b27
  28. Успенский Владимир Иванович 19 ПИ-1 b28
  29. Хорошилова Марина Александровна 19 ПИ-1 b29
  30. Баранов Илья Андреевич 19 ПИ-2 b30
  31. Бекусов Михаил Александрович 19 ПИ-2 b31
  32. Бодров Егор Алексеевич 19 ПИ-2 b32
  33. Бредихин Максим Владимирович 19 ПИ-2 b33
  34. Даняев Артем Андреевич 19 ПИ-2 b34
  35. Дыряев Даниил Александрович 19 ПИ-2 b35
  36. Зиганшин Никита Русланович 19 ПИ-2 b36
  37. Конина Татьяна Дмитриевна 19 ПИ-2 b37
  38. Костин Андрей Олегович 19 ПИ-2 b38
  39. Мингбоев Худайберди Абдухаким угли 19 ПИ-2 b39
  40. Моисеев Роман Михайлович 19 ПИ-2 b40
  41. Моничева Арина Александровна 19 ПИ-1 b41
  42. Мушка Никита Андреевич 19 ПИ-2 b42
  43. Николаев Иван Александрович 19 ПИ-2 b43
  44. Ожиганова Полина Максимовна 19 ПИ-2 b44
  45. Рыжова Ирина Игоревна 19 ПИ-2 b45
  46. Салахов Рамазан Маратович 19 ПИ-2 b46
  47. Семаев Никита Юрьевич 19 ПИ-2 b47
  48. Скугаревский Александр Сергеевич 19 ПИ-2 b48
  49. Столбов Ярослав Владиславович 19 ПИ-2 b49
  50. Таценко Алексей Михайлович 19 ПИ-1 b50
  51. Таценко Илья Михайлович 19 ПИ-1 b51
  52. Тюлин Игорь Викторович 19 ПИ-2 b52
  53. Фатин Максим Романович 19 ПИ-2 b53
  54. Хорошавина Екатерина Андреевна 19 ПИ-2 b54
  55. Цветков Дмитрий Алексеевич 19 ПИ-2 b55
  56. Шарунов Евгений Александрович 19 ПИ-2 b56
  57. Шатилов Виктор Алексеевич 19 ПИ-2 b57
  58. Широков Александр Анатольевич 19 ПИ-2 b58
  59. Стифеев Никита Андреевич 19 ПИ-2 b59
  60. Малинин Дмитрий Дмитриевич 19 ПМИ-2 b60
  61. Бакланов Алексей Александрович 19 ПМИ-2 b61
  62. Баринов Даниил Сергеевич 19 ПМИ-1 b62
  63. Богомазов Михаил Васильевич 19 ПМИ-1 b63
  64. Бугров Лев Валерьевич 19 ПМИ-1 b64
  65. Бузанов Егор Андреевич 19 ПМИ-1 b65
  66. Варлачёв Валерий Максимович 19 ПМИ-1 b66
  67. Голованов Денис Максимович 19 ПМИ-1 b67
  68. Дробот Елизавета Денисовна 19 ПМИ-1 b68
  69. Жаравина Полина Дмитриевна 19 ПМИ-1 b69
  70. Зайцев Тимур Олегович 19 ПМИ-1 b70
  71. Кабанов Денис Сергеевич 19 ПМИ-1 b71
  72. Канев Владислав Олегович 19 ПМИ-1 b72
  73. Карцева Мария Дмитриевна 19 ПМИ-1 b73
  74. Касьянов Никита Юрьевич 19 ПМИ-1 b74
  75. Козлова Дарья Андреевна 19 ПМИ-1 b75
  76. Кузнецов Михаил Дмитриевич 19 ПМИ-1 b76
  77. Лавров Артём Романович 19 ПМИ-1 b77
  78. Матвеев Андрей Сергеевич 19 ПМИ-1 b78
  79. Машанова Карина Алексеевна 19 ПМИ-1 b79
  80. Наумов Никита Александрович 19 ПМИ-1 b80
  81. Нещеткин Глеб Максимович 19 ПМИ-1 b81
  82. Пасманик Ирина Дмитриевна 19 ПМИ-1 b82
  83. Рогозян Анастасия Тимофеевна 19 ПМИ-1 b83
  84. Соболев Данил Александрович 19 ПМИ-1 b84
  85. Софронов Валерий Александрович 19 ПМИ-1 b85
  86. Трутнев Алексей Игоревич 19 ПМИ-1 b86
  87. Тумаков Вадим Сергеевич 19 ПМИ-1 b87
  88. Фролова Ольга Михайловна 19 ПМИ-1 b88
  89. Шарибжанова Диана Рашидовна 19 ПМИ-1 b89
  90. Щеникова Анна Юрьевна 19 ПМИ-1 b90
  91. Андросов Вадим Дмитриевич 19 ПМИ-2 b91
  92. Бирина Елизавета Сергеевна 19 ПМИ-2 b92
  93. Булатов Дмитрий Александрович 19 ПМИ-2 b93
  94. Демашов Никита Александрович 19 ПМИ-2 b94
  95. Добряев Иван Александрович 19 ПМИ-2 b95
  96. Дрожжачих Евгений Валерьевич 19 ПМИ-2 b96
  97. Егорова Кристина Олеговна 19 ПМИ-2 b97
  98. Загоскин Владислав Андреевич 19 ПМИ-2 b98
  99. Зарубина Ирина Михайловна 19 ПМИ-2 b99
  100. Иванов Даниил Андреевич 19 ПМИ-2 b100
  101. Клыков Антон Романович 19 ПМИ-2 b101
  102. Королев Денис Витальевич 19 ПМИ-2 b102
  103. Краюшкина Екатерина Алексеевна 19 ПМИ-2 b103
  104. Назаров Вячеслав Андреевич 19 ПМИ-2 b104
  105. Оленев Дмитрий Сергеевич 19 ПМИ-2 b105
  106. Панина Полина Сергеевна 19 ПМИ-2 b106
  107. Прыгаев Денис Алексеевич 19 ПМИ-2 b107
  108. Рогов Андрей Дмитриевич 19 ПМИ-2 b108
  109. Симонова Арина Валерьевна 19 ПМИ-2 b109
  110. Созинов Кирилл Игоревич 19 ПМИ-2 b110
  111. Титова Нина Ивановна 19 ПМИ-2 b111
  112. Уртюков Илья Алексеевич 19 ПМИ-2 b112
  113. Хорев Егор Алексеевич 19 ПМИ-2 b113
  114. Шабаршин Леонид Георгиевич 19 ПМИ-2 b114

Алгоритм выполнения работы

Для выполнения работы необходимо:

  1. Выполнить fork репозитария в свой аккаунт.
  2. Выполнить клонирование репозитария из своего аккаунта к себе на локальную машину (git clone).
  3. Создать ветку git с индивидуальным номером (git branch имя_ветки).
  4. Сделать ветку активной (git checkout имя).
  5. Необходимо разместить как исходные файлы с решениями задач, поместив cpp файлы в src, а заголовочные - в include.
  6. Добавить файлы в хранилище (git add).
  7. Выполнить фиксацию изменений (git commit -m "комментарий").
  8. Отправить содержимое ветки в свой удаленный репозитарий (git push origin имя_ветки).
  9. Создать пул-запрос в репозитарий группы и ждать результата от GitHub Actions.

ex10's People

Contributors

ashtanyuk avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.