powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / калькулятор без использования ОПН
19 сообщений из 19, страница 1 из 1
калькулятор без использования ОПН
    #38787147
tramadol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
калькулятор на основе конечного автомата
на вход подается строка с выражением
как посчтитать ее без использования обратной польской нотации?
...
Рейтинг: 0 / 0
калькулятор без использования ОПН
    #38787154
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как делается перевод из скобочной в стековую нотацию знаешь?
Вот точно так же, только вместо выдачи строки в бесскобочной нотации сразу считаешь.
...
Рейтинг: 0 / 0
калькулятор без использования ОПН
    #38787178
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
только автомат не конечный, а магазинный потребуется
...
Рейтинг: 0 / 0
калькулятор без использования ОПН
    #38787213
tramadol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl, не совсем понял.
на данный момент у меня есть конечный автомат который парсит строку выражения.
есть стек который хранит операнды.
вот к примеру есть выражение 2+1-(3-1)
в стек сначала ложим 2
потом когда попадаем на оператор + по идее нужно сразу сложить 2+1 и оставить в стеке 3 ?
или операторы складывать в отдельный стек, а потом после парсинга строки в конце складывать/вычитать?
можно подробнее на этом примере пояснить плиз
...
Рейтинг: 0 / 0
калькулятор без использования ОПН
    #38787237
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОПН там именно потому, что используется стек.
Т.е. если вы хотите без опн, то, значит, хотите парсить без стека...

Но в принципе, если вы под "без ОПН" подразумеваете "не создавать выходную строку в опн-виде", то да, вычисления можно проводить без её создания. Но тогда в дополнение к стеку операций - используем еще и стек для чисел, а операции (по закрывающей скобке или по приоритетам) применяем к этому стеку чисел.
...
Рейтинг: 0 / 0
калькулятор без использования ОПН
    #38787247
tramadol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreTM,

ну правильно, я же и написал что имеется стек операндов(чисел), просто я не сразу понял что нужно еще добавить отдельный стек для операторов.
тоесть получается на примере того же выражения 2+1-(3-1)
1. берем 2, ложим в стек чисел
2. берем +, ложим в стек операторов
3. берем 1, ложим в стек чисел
4. берем - ложим в стек операторов
5. берем ( , и что делать в этом состоянии?
...
Рейтинг: 0 / 0
калькулятор без использования ОПН
    #38787254
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tramadol,

алгоритм Дейкстры смотреть(который для разбора выражений)
...
Рейтинг: 0 / 0
калькулятор без использования ОПН
    #38787257
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://www.studfiles.ru/preview/1531803/

Алгоритм преобразования выражения из инфиксной записи в обратную польскую.

Для перевода выражения из инфиксной формы в постфиксную с учетом приоритетов операций и скобок существует простой алгоритм (Дейкстры). Алгоритм работает со стеком, в котором хранятся знаки операций. Сначала стек пуст. На вход алгоритму подается последовательность лексем (числа, скобки или знаки операций), представляющая некоторое арифметическое выражение, записанное в инфиксной форме. Результатом работы алгоритма является эквивалентное выражение в постфиксной форме. Вводятся приоритеты операций: открывающая скобка имеет приоритет 0, знаки + и – — приоритет 1 и знаки * и / — приоритет 2.

1. Пока не достигнут конец входной последовательности, читать очередную лексему и выполнять с ней следующие операции:

если прочитан операнд (число), записать его в выходную последовательность;

если прочитана открывающая скобка, положить её в стек;

если прочитана закрывающая скобка, вытолкнуть из стека в выходную последовательность всё до открывающей скобки, при этом сами скобки уничтожаются (удаляются из стека и в ответ не идут);

если прочитан знак операции, вытолкнуть из стека в выходную последовательность все операции с большим либо равным приоритетом, а прочитанную операцию положить в стек.

2. Если достигнут конец входной последовательности, вытолкнуть всё из стека в выходную последовательность и завершить работу.

Порядок операндов в выходной последовательности не отличается от порядка операндов в исходной последовательности. В выходной последовательности отсутствуют скобки.


Алгоритм вычисления значения выражения, представленного в обратной польской записи.

Для вычисления значения выражения, записанного в постфиксной форме, можно использовать описанный далее алгоритм. На вход подается последовательность лексем (числа или знаки операций), представляющая некоторое арифметическое выражение, записанное в постфиксной форме. Результатом работы алгоритма является значение этого выражения.


1. Пока не достигнут конец входной последовательности, читать очередную лексему и выполнять с ней следующие операции:

если прочитан операнд (число), положить его в стек;

если прочитан знак операции, вытолкнуть из стека два операнда и положить в стек результат применения прочитанной операции к этим операндам, взятым в обратном порядке.

2. Если достигнут конец входной последовательности, завершить работу. В стеке останется единственное число — значение исходного выражения.
...
Рейтинг: 0 / 0
калькулятор без использования ОПН
    #38787629
WebSharper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tramadolкалькулятор на основе конечного автомата
на вход подается строка с выражением
как посчтитать ее без использования обратной польской нотации?

Рекурсивный спуск + какой-нибудь алгоритм для приоритета операций
...
Рейтинг: 0 / 0
калькулятор без использования ОПН
    #38788337
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилтолько автомат не конечный, а магазинный потребуется
магазинный это как?
Как "автомат Калашникова - устройство для превращения стека в очередь" ?
...
Рейтинг: 0 / 0
калькулятор без использования ОПН
    #38788627
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsevмагазинный это как?

А. Ахо, Дж. Ульман "Теория синтаксического анализа, перевода и компиляции", Т.1

там найдёте определение
...
Рейтинг: 0 / 0
калькулятор без использования ОПН
    #38788757
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да я в вике уже нашел. Наизобретали, блин, умных слов.
...
Рейтинг: 0 / 0
калькулятор без использования ОПН
    #38788760
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevНаизобретали, блин, умных слов.
это вообще-то классика
...
Рейтинг: 0 / 0
калькулятор без использования ОПН
    #38788778
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилLeonid KudryavtsevНаизобретали, блин, умных слов.
это вообще-то классикаЭто не классика, а ужас т ный перевод. Уж лучше бы кальку использовали или просто "автомат со стеком".
...
Рейтинг: 0 / 0
калькулятор без использования ОПН
    #38791265
tramadol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
всем спасибо за советы, решил немножко изменить алгоритм
сначала беру строку выражения в инфиксной записи, конвертирую ее в постфиксную, и потом уже считаю результат.
только теперь проблема в том как конвертить функции типа min(a,b,c) в постфиксную запись, и как ее после этого считать
...
Рейтинг: 0 / 0
калькулятор без использования ОПН
    #38791275
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tramadol , а разговор был только об операциях, а не о функциях

С другой стороны, сложности никакой нет - заводим ещё стек для "функций"... нет, не так
На самом деле, придется сделать полнофункциональный парсер: не "символ ':' соотвествует операции '/'", а предопределенный справочник операций/функций, с описанием их унарности/бинарности/параметризации + приоритетов; а далее - как при обычной работе со стеками.
Кстати, ваш пример с MIN(x1,x2[,x3]...) для конечного автомата, да ещё стекового - не подходит.
MIN2(a,b) - подходит, MIN3(a,b,c) - подходит, подходит даже MINX(n,a1,a2,..,an), а вот опциональное количество параметров - не подходит никогда...
Вам же дали уже ссылки на теорию, изучайте.
Готовые решения никто приводить не будет...
...
Рейтинг: 0 / 0
калькулятор без использования ОПН
    #38791792
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tramadolтолько теперь проблема в том как конвертить функции типа min(a,b,c) в постфиксную запись, и как ее после этого считать
Да точно так же. min(a,b,c) ничем кроме количества операндов не отличается от add(a,b), оно же a+b.
...
Рейтинг: 0 / 0
калькулятор без использования ОПН
    #38791846
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovДа точно так же. min(a,b,c) ничем кроме количества операндов не отличается от add(a,b), оно же a+b.
Для функций с переменным числом аргументов постфиксную нотацию надо дополнить синтаксисом для указания кол-ва аргументов каждой операции.
Тогда уж лучше в синтаксическое дерево переводить.
...
Рейтинг: 0 / 0
калькулятор без использования ОПН
    #38791897
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyТогда уж лучше в синтаксическое дерево переводить.
заодно исполнится требование

tramadolкак посчтитать ее без использования обратной польской нотации?
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / калькулятор без использования ОПН
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]