Содержание
- 2. В результате наибольшее распространение полу-чил метод трансляции с помощью обратной польской записи, которую предложил польский математик
- 3. Пусть для операндов А и В выполняется операция сложения. Привычная форма записи А+В называется инфиксной. Форма
- 4. Алгоритм, использующий стек Получение ОПЗ с использованием стека может осуществляться весьма просто на основе алгоритма, предложенного
- 5. Суть алгоритма в следующем Исходное выражение, записанное в виде строки символов S, просматривается слева направо. Операнды
- 6. 3. Если в S встретилась закрывающая скобка, то извлекаем из стека и записываем в строку В
- 7. Пример реализации Исходное выражение задано в виде строки S "a + b*c + ( d*e +
- 8. Всего в строке 15 символов (15 п.п.). 1. Букву «a» помещается в строку В 2. Операцию
- 9. 4. Операцию «*» помещаем в стек, т.к. элемент «+» в вершине стека имеет более низкий приоритет.
- 10. 6. Следующая операция «+»: анализируем стек и видим, что в вершине стека «*» и следующая за
- 11. 7. Далее следует символ «(», его помещаем в стек. 8. Букву «d» помещаем в строку В.
- 12. 9. Операцию «*» помещаем в стек, т.к. приоритет у скобки самый низкий. 10. Букву «e» помещаем
- 13. 11. Следующая операция «+»: приоритет операции «*» в вершине стека выше, поэтому извлекаем из стека «*»
- 14. 13. Далее идет закрывающая скобка, все элементы до символа «(» извлекаем из стека и помещаем в
- 15. 14. Операцию «*» помещаем в стек, т.к. ее приоритет выше операции «+» в вершине стека. 15.
- 16. Все символы строки S просмотрены, следова-тельно, анализируем состояние стека, если он не пуст, то переписываем все
- 17. Вычисление выражения, записанного в ОПЗ, может проводиться путем однократного просмотра, что является весьма удобным при генерации
- 18. Выражение (A + B) * (C + D) – E в виде ОПЗ: AB+CD+*E– Его вычисление
- 19. Текст программы, реализующий рассмотренные алгоритмы, может иметь следующий вид: . . . struct Stack { char
- 20. void main () { Stack *t, *Op = NULL; // Стек операций Op – пуст char
- 21. // Анализируем символы строки In for ( k = 0; In[k] != '\0' ; ++k )
- 22. /* 3. Если «)», извлекаем из стека в строку Out все операции до открывающей скобки */
- 23. // Удаляем из стека открывающую скобку t = Op; Op = Op -> next; delete t;
- 24. /* 4. Если операция, извлекаем из стека в Out опе-рации с большим или равным приоритетом */
- 25. /* 5. Если стек не пуст, извлекаем из него операции и записываем в выходную строку */
- 26. Обратите внимание на то, что группа операторов if() в пунктах 1 – 4 организована НЕ ЭФФЕКТИВНО,
- 27. // Функция реализации приоритета операций int Prior ( char a ) { switch ( a )
- 28. // Добавление элемента в стек Stack* InS ( Stack *p, char s ) { Stack *t
- 29. // Извлечение элемента из стека (со ссылкой) Stack* OutS ( Stack *p, char &s ) {
- 30. // ----------- Расчет выражения ОПЗ ----------- double Result (char *str ) { int i; Stack *begin
- 31. for ( i=0; str [ i ] != '\0'; ++i ) { ss = str [
- 32. switch ( ss ) { case '+' : res = op1 + op2; break; case '-'
- 33. Пример, реализованный в методичке для оконного приложения:
- 34. struct Stack { char info; Stack *next; } *begin; int Prior (char); Stack* InStack ( Stack*,
- 35. //---- Текст функции-обработчика FormCreate ---- Edit1->Text = "a+b*(c-d)/e"; Edit2->Text = ""; char a = 'a'; StringGrid1->Cells[0][0]
- 36. // ---- Текст обработчика кнопки Перевести ---- Stack *t; begin = NULL; char ss, a; String
- 37. for (k = 1; k ss = InStr[k]; // ----------- Пункт 1 алгоритма ------------ if (ss
- 38. // ----------- Пункт 3 алгоритма ------------ if ( ss == ')' ) { while ( (begin
- 39. // ----------- Пункт 4 алгоритма ------------ if ( znak.Contains ( ss ) ) { while (
- 40. // ----------- Пункт 5 алгоритма ------------ while ( begin != NULL) { begin = OutStack (
- 41. //---- Текст обработчика кнопки Посчитать ---- char ch; String OutStr = Edit2 -> Text; for (
- 42. //-- Функция реализации приоритета операций -- int Prior ( char a ){ switch ( a )
- 43. //------ Расчет арифметического выражения ------ double Rezult(String Str) { char ch, ch1, ch2, chr; double op1,
- 44. if (! znak.Contains (ch) ) begin = InStack ( begin, ch ); else { begin =
- 46. Скачать презентацию



















![// Анализируем символы строки In for ( k = 0; In[k] !=](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1023492/slide-20.jpg)









![for ( i=0; str [ i ] != '\0'; ++i ) {](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1023492/slide-30.jpg)





![for (k = 1; k ss = InStr[k]; // ----------- Пункт 1](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1023492/slide-36.jpg)







Кибертерроризм - угроза национальной безопасности
От первых счётных приборов до персональных компьютеров.
Влияние подачи информации на ее восприятие. В чем привлекательность Интернета?
Реляционная модель баз данных
Вычислительные машины, комплексы и компьютерные сети
Компьютер и его устройство
Разработка программного приложения на основе модели нечеткого регулятора спроса на товар производственного предприятия
Элементарные логические операции
Компьютерные сети
Базы данных
Информационная безопасность
Zimmer Biomet Dental Russia
Знаменитые библиотеки мира
Активизация познавательной деятельности учащихся на уроках технологии с использованием ИКТ
Experience Financial Companies
Основные понятия программной инженерии. Принципы проектирования сложных программных систем. Лекции 1
Циклы и массивы. Тема 9. Программирование на языке Си#
Понятие алгоритма. Примеры алгоритмов из окружающей жизни
Электронная почта
Как написать пост в соцсети, который прочитают?
ANY_SOURCE и ANY_TAG
Премия Trainings
Logic
Тизерная кухня. (День 7)
Типы информационных моделей. 8 класс
Тема 3.2 - Компьютерный вирус и его типы
Язык программирования Pascal Повторение А. Жидков
Правила верстки электронных курсов