Слайд 2Машина фон Неймана
Реальные вычислители, построенные согласно архитектурным принципам фон Неймана, следуют дополнительному
![Машина фон Неймана Реальные вычислители, построенные согласно архитектурным принципам фон Неймана, следуют](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1011584/slide-1.jpg)
соглашению: команды и их аргументы записываются в строго определённом порядке:
Слайд 3Высокоуровневые языки
Высокоуровневый язык программирования — язык программирования, разработанный для быстроты и удобства
![Высокоуровневые языки Высокоуровневый язык программирования — язык программирования, разработанный для быстроты и](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1011584/slide-2.jpg)
использования.
Конструкции высокоуровневых языков, как правило, более приближены к конструкциям естественного языку современной математики.
Слайд 4Высокоуровневые языки
Одна из задач, которую приходится решать разработчикам языков высокого уровня –
![Высокоуровневые языки Одна из задач, которую приходится решать разработчикам языков высокого уровня](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1011584/slide-3.jpg)
трансляция (преобразование) математических формул (выражений) в последовательность низкоуровневых команд – инструкций процессора.
Слайд 6Математические выражения
Каждое математическое выражение можно представить в трех специфических видах записи:
Инфиксная нотация
![Математические выражения Каждое математическое выражение можно представить в трех специфических видах записи:](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1011584/slide-5.jpg)
— это форма математических записей, которую использует большинство людей: левый операнд, знак действия, правый операнд. Например: 3 + 4 или 3 + 4 * (2 - 1).
Префиксная нотация — сначала пишется действие, затем левый операнд, затем правый операнд. Для выражения «a+b» префиксная запись будет иметь вид: «+ab». Выражению «a+b*(c+d)» соответствует запись «+a*b+cd».
Постфиксная нотация — сначала идёт левый операнд, потом правый операнд, затем знак операции. Для выражения «a+b» постфиксная запись имеет вид «ab+». Выражению «a+b*(c+d)» соответствует запись «abcd+*+».
Слайд 7Математические выражения
Порядок выполнения операций в префиксной и постфиксной нотациях однозначно задаётся порядком
![Математические выражения Порядок выполнения операций в префиксной и постфиксной нотациях однозначно задаётся](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1011584/slide-6.jpg)
следования знаков операций в исходном выражении, поэтому отпадает необходимость использования скобок, введения приоритетов и ассоциативности операций.
Слайд 10Обратная польская нотация
Наибольшее распространение при решении практических задач получил метод тpансляции выражений
![Обратная польская нотация Наибольшее распространение при решении практических задач получил метод тpансляции](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1011584/slide-9.jpg)
с помощью обpатной польской записи, котоpую пpедложил польский математик Ян Лукашевич.
Обратная польская нотация (RPN, англ. Reverse Polish Notation) — форма бесскобочной записи математических выражений согласно постфиксной нотации.
Слайд 13Обратная польская нотация
Здесь X и Y – вспомогательные пеpеменные.
![Обратная польская нотация Здесь X и Y – вспомогательные пеpеменные.](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1011584/slide-12.jpg)
Слайд 14Алгоритм Дейкстры
В ноябре 1961 г. Эдсгер Вибе Дейкстра опубликовал алгоритм для преобразования
![Алгоритм Дейкстры В ноябре 1961 г. Эдсгер Вибе Дейкстра опубликовал алгоритм для](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1011584/slide-13.jpg)
выражений из инфиксной нотации в RPN.
Слайд 15Приоритеты операций
Зададим приоритеты используемых операций:
![Приоритеты операций Зададим приоритеты используемых операций:](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1011584/slide-14.jpg)
Слайд 16Алгоритм Дейкстры
Базовые правила:
Исходная стpока символов просматривается слева напpаво.
Опеpанды сразу пеpеписываются в выходную
![Алгоритм Дейкстры Базовые правила: Исходная стpока символов просматривается слева напpаво. Опеpанды сразу](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1011584/slide-15.jpg)
стpоку.
Знаки опеpаций заносятся в стек.
Слайд 17Алгоритм Дейкстры
Правила работы со стеком:
если стек пуст, операция из входной стpоки пеpеписывается
![Алгоритм Дейкстры Правила работы со стеком: если стек пуст, операция из входной](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1011584/slide-16.jpg)
в стек;
текущая опеpация выталкивает из стека все опеpации с большим или pавным пpиоpитетом в выходную стpоку;
откpывающая скобка всегда пpоталкивается в стек;
закpывающая кpуглая скобка выталкивает в выходную стpоку все опеpации из стека до ближайшей открывающей скобки. Сами скобки в выходную строку не попадают, уничтожая дpуг дpуга.
Слайд 19Контрольные вопросы
1. Какая запись представляет собой обратную польскую нотацию выражения «A+B*(C-D)»?
A+B*C-D
ABCD-*+
+A*B-CD
2. Кто
![Контрольные вопросы 1. Какая запись представляет собой обратную польскую нотацию выражения «A+B*(C-D)»?](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1011584/slide-18.jpg)
из учёных ввёл понятие обратной польской нотации?
Эдсгер Дейкстра
Джон фон Нейман
Ян Лукашевич
Слайд 20Постановка задачи
Написать программу, преобразующую инфиксную нотацию в RPN и обратно. При этом,
![Постановка задачи Написать программу, преобразующую инфиксную нотацию в RPN и обратно. При](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1011584/slide-19.jpg)
программа должна сама определять нотацию по виду входной строки. Нотацией «по умолчанию» считается инфиксная.
Примеры работы программы (знак ? указывает, что далее следует результат выполнения программы):
dijkstra.js a+b/(c-d) ? abcd-/+
dijkstra.js abcd-/+ ? a+b/(c-d)
Запуск программы без аргументов выводит сообщение с информацией о программе и вариантах запуска.
Слайд 21Постановка задачи
Кроме того, программа должна уметь обрабатывать типовые ошибки, указывая при выводе
![Постановка задачи Кроме того, программа должна уметь обрабатывать типовые ошибки, указывая при](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1011584/slide-20.jpg)
конкретный тип (или код) ошибки:
пропуск скобки: «(a+b» или «a+(b+c)», выражения «((a+b))», «a/(b)», «(((а)))» считаются корректными;
пропуск операнда (оператора): «a+», «a/()», «ab»;
повтор операнда (оператора): «aa+b», «a++b», «i++»;
некорректный ввод: «привет!», «$#@» и т.п.