![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() ![]() |
![]() |
blackhard |
![]()
Сообщение
#1
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 151 Пол: Мужской Реальное имя: иван Репутация: ![]() ![]() ![]() |
Может кнонибудь подсказать алгоритм вычисления выражения(из строки) записанного в постфиксной форме.
Для выражений в инфиксной форме я знаю алгоритм а вот для постфиксной чето никак не соображу ![]() Напишите просто на словах что запихиваем в стек что и когда вынимаем и тд... |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Цитата На практике вычисление постфиксных выражений реализуется с применением стека. В этом случае вычисления выполняются по следующим правилам. 1. Прочитать очередной токен входной цепочки. 2. Если входной токен - операнд, то выполнить его запись в стек. 3. Если входной токен - оператор, то прочитать два операнда из стека, выполнить операцию и результат занести в стек как операнд. 4. Повторять п.1, пока во входной цепочке не будут прочитаны все токены. |
blackhard |
![]()
Сообщение
#3
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 151 Пол: Мужской Реальное имя: иван Репутация: ![]() ![]() ![]() |
Блин я вдруг понял что мнеб и для инфиксной формы алгоритм не помешал где можно почитать?
|
blackhard |
![]()
Сообщение
#4
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 151 Пол: Мужской Реальное имя: иван Репутация: ![]() ![]() ![]() |
Ну ктонибудь помогите пожалуйста!!!!!!!!
|
blackhard |
![]()
Сообщение
#5
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 151 Пол: Мужской Реальное имя: иван Репутация: ![]() ![]() ![]() |
Вобщем я сделал так сначало превожу выражения из инфиксной формы в постфиксную а потом вычисляю получившееся выражение в постфиксной форме.Это единственный способ вычисления инфиксных выражений?Или есть более простой?
|
blackhard |
![]()
Сообщение
#6
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 151 Пол: Мужской Реальное имя: иван Репутация: ![]() ![]() ![]() |
Помогите исправить код. Написал алгоритм для перевода из инфиксной формы в постфиксную но чето не верно работает
Вроде все делал согласно алгоритму. |
volvo |
![]()
Сообщение
#7
|
Гость ![]() |
Цитата Вроде все делал согласно алгоритму. Значит, не все...Вот тут лежит рабочая программа на Паскале: Обpатная польская нотация Посмотри, как она реализована. Если не получится сделать это на С - скажи, я помогу. |
blackhard |
![]()
Сообщение
#8
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 151 Пол: Мужской Реальное имя: иван Репутация: ![]() ![]() ![]() |
Значит, не все... Вот тут лежит рабочая программа на Паскале: Обpатная польская нотация Посмотри, как она реализована. Если не получится сделать это на С - скажи, я помогу. Спасибо за ссылку попробую разобрать программу.Ну я думаю что проблема в моей реализации это учет приоритетов команд.Нужно учитывать приоритет считанного символа и приоритет символа в вершине стека?Те если в стеке лежит ** и мы считываем из строки + то из стека достаем ** и стек будет выглядить так + ?Так как узнать что в стеке лежат 2 *.В своей проге я учитываю только приоритет считанного символа и лежащего в вершине стека.Думаю это 1 из причин неправильной работы. |
volvo |
![]()
Сообщение
#9
|
Гость ![]() |
Цитата Те если в стеке лежит ** и мы считываем из строки + то из стека достаем ** и стек будет выглядить так + ? Именно так, если текущий знак - "+", то пока в вершине стека лежит знак операции с бОльшим чем у "+" приоритетом надо вытаскивать значение из вершины, и заносить в строку (и тебе не надо знать, два умножения у тебя или десять занесено в стек, операция производится пока вершина стека содержит то, что тебя устраивает). |
blackhard |
![]()
Сообщение
#10
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 151 Пол: Мужской Реальное имя: иван Репутация: ![]() ![]() ![]() |
Именно так, если текущий знак - "+", то пока в вершине стека лежит знак операции с бОльшим чем у "+" приоритетом надо вытаскивать значение из вершины, и заносить в строку (и тебе не надо знать, два умножения у тебя или десять занесено в стек, операция производится пока вершина стека содержит то, что тебя устраивает). Все спасибо теперь я знаю в чем точно ошибка (надеюсь единственная) я запоминал ранг операции которую заносил в стек, а ведь насамом деле надо просто посмотреть че лежит сверху без выталкивания. |
blackhard |
![]()
Сообщение
#11
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 151 Пол: Мужской Реальное имя: иван Репутация: ![]() ![]() ![]() |
Рабочий алгоритм перевода из инфиксной формы в постфиксную(Может комуто понадобится).
|
volvo |
![]()
Сообщение
#12
|
Гость ![]() |
Цитата Рабочий алгоритм перевода из инфиксной формы в постфиксную С каких пор программа, не проходящая компиляцию (GCC), является "рабочей", можно уточнить? |
blackhard |
![]()
Сообщение
#13
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 151 Пол: Мужской Реальное имя: иван Репутация: ![]() ![]() ![]() |
Теперь точно рабочий
Добавлено через 9 мин. А вот если у меня выражение будет содержать не просто буквы a...Z или цифры 1..9 а имена переменных т.е (Ax1+num)*c-Chis.Как в таком случае реализовать перевод?Нужно будет сделать 2 стека 1для строк 2й для знаков +.-...? Как формировать элементы для помещения в стек строк(т.е как выдирать Ax1 эти переменные и когда их в стек пихать )? Сообщение отредактировано: blackhard - 1.05.2008 0:41 |
volvo |
![]()
Сообщение
#14
|
Гость ![]() |
Цитата А вот если у меня выражение будет содержать не просто буквы a...Z или цифры 1..9 а имена переменных По ссылке, которую я тебе давал, есть алгоритм перевода, в котором написано:Цитата Выpажение сканиpyется слева напpаво, пpи этом pазбиваясь на токены - числа и знаки аpифметических опеpаций. Так что записывать имена переменных в стек вообще не надо... А вот как выдирать из входной строки эти имена - это подумай... В конце концов, имя переменной не может содержать в себе знаки операций и скобки (это можно считать подсказкой).Если очеpедной токен - число, не глядя пишем его в выходнyю стpокy. |
blackhard |
![]()
Сообщение
#15
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 151 Пол: Мужской Реальное имя: иван Репутация: ![]() ![]() ![]() |
Блин чето запутался.Если у меня массив строк и указатель на него
Как мне в 1строку этого массива спомощью указателя записать символы? Сообщение отредактировано: blackhard - 1.05.2008 10:43 |
volvo |
![]()
Сообщение
#16
|
Гость ![]() |
Ну, пока у тебя не массив строк, а массив указателей на строки. Под сами строки еще надо выделить память...
|
Сережа |
![]()
Сообщение
#17
|
Гость ![]() |
Ребят а напишите этот алгоритм на паскале пжлст
|
![]() ![]() |
![]() |
Текстовая версия | 11.09.2024 19:18 |