Содержание
- 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)







Медиа-карта региона: культура
Тесты с Zip Grade
Файловый архивы
Все основные версии GTA. C чего начиналась GTA
Remote method invocation in Java
Презентация на тему WINDOWS VISTA
Базовые алгоритмические конструкции
Export flow для Сбера
Операторы условия, цикла, функции
Загрузочные вирусы
Разработка ПО для управления движения денежных средств клиентов инвестиционного фонда
Prezentatsia_Microsoft_PowerPoint_1
Задание и оформление
Правила работы и безопасного поведения в компьютерном классе
Как мы познаем окружающий мир
Элементы теории статистической обработки данных. Основные определения и понятия
Конструкторский этап творческого проекта
Программирование на языке С
Обработка текстовой информации. Стили
Компьютерные сети
Онлайн-передача фискальных данных с кассовой техники в ФНС в соответствии c изменениями в 54-ФЗ
Для канала
Слова из букв змейкой
Дети войны
Организация циклов. Оператор цикла
Система адресации в сети иньернет
nxweb.nexign-systems.com. Часть 1
Решение задач на определение количества информации