|
|
|
калькулятор без использования ОПН
|
|||
|---|---|---|---|
|
#18+
калькулятор на основе конечного автомата на вход подается строка с выражением как посчтитать ее без использования обратной польской нотации? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2014, 04:12 |
|
||
|
калькулятор без использования ОПН
|
|||
|---|---|---|---|
|
#18+
Как делается перевод из скобочной в стековую нотацию знаешь? Вот точно так же, только вместо выдачи строки в бесскобочной нотации сразу считаешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2014, 07:22 |
|
||
|
калькулятор без использования ОПН
|
|||
|---|---|---|---|
|
#18+
только автомат не конечный, а магазинный потребуется ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2014, 11:19 |
|
||
|
калькулятор без использования ОПН
|
|||
|---|---|---|---|
|
#18+
White Owl, не совсем понял. на данный момент у меня есть конечный автомат который парсит строку выражения. есть стек который хранит операнды. вот к примеру есть выражение 2+1-(3-1) в стек сначала ложим 2 потом когда попадаем на оператор + по идее нужно сразу сложить 2+1 и оставить в стеке 3 ? или операторы складывать в отдельный стек, а потом после парсинга строки в конце складывать/вычитать? можно подробнее на этом примере пояснить плиз ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2014, 14:38 |
|
||
|
калькулятор без использования ОПН
|
|||
|---|---|---|---|
|
#18+
ОПН там именно потому, что используется стек. Т.е. если вы хотите без опн, то, значит, хотите парсить без стека... Но в принципе, если вы под "без ОПН" подразумеваете "не создавать выходную строку в опн-виде", то да, вычисления можно проводить без её создания. Но тогда в дополнение к стеку операций - используем еще и стек для чисел, а операции (по закрывающей скобке или по приоритетам) применяем к этому стеку чисел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2014, 15:49 |
|
||
|
калькулятор без использования ОПН
|
|||
|---|---|---|---|
|
#18+
AndreTM, ну правильно, я же и написал что имеется стек операндов(чисел), просто я не сразу понял что нужно еще добавить отдельный стек для операторов. тоесть получается на примере того же выражения 2+1-(3-1) 1. берем 2, ложим в стек чисел 2. берем +, ложим в стек операторов 3. берем 1, ложим в стек чисел 4. берем - ложим в стек операторов 5. берем ( , и что делать в этом состоянии? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2014, 16:12 |
|
||
|
калькулятор без использования ОПН
|
|||
|---|---|---|---|
|
#18+
tramadol, алгоритм Дейкстры смотреть(который для разбора выражений) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2014, 16:24 |
|
||
|
калькулятор без использования ОПН
|
|||
|---|---|---|---|
|
#18+
http://www.studfiles.ru/preview/1531803/ Алгоритм преобразования выражения из инфиксной записи в обратную польскую. Для перевода выражения из инфиксной формы в постфиксную с учетом приоритетов операций и скобок существует простой алгоритм (Дейкстры). Алгоритм работает со стеком, в котором хранятся знаки операций. Сначала стек пуст. На вход алгоритму подается последовательность лексем (числа, скобки или знаки операций), представляющая некоторое арифметическое выражение, записанное в инфиксной форме. Результатом работы алгоритма является эквивалентное выражение в постфиксной форме. Вводятся приоритеты операций: открывающая скобка имеет приоритет 0, знаки + и – — приоритет 1 и знаки * и / — приоритет 2. 1. Пока не достигнут конец входной последовательности, читать очередную лексему и выполнять с ней следующие операции: если прочитан операнд (число), записать его в выходную последовательность; если прочитана открывающая скобка, положить её в стек; если прочитана закрывающая скобка, вытолкнуть из стека в выходную последовательность всё до открывающей скобки, при этом сами скобки уничтожаются (удаляются из стека и в ответ не идут); если прочитан знак операции, вытолкнуть из стека в выходную последовательность все операции с большим либо равным приоритетом, а прочитанную операцию положить в стек. 2. Если достигнут конец входной последовательности, вытолкнуть всё из стека в выходную последовательность и завершить работу. Порядок операндов в выходной последовательности не отличается от порядка операндов в исходной последовательности. В выходной последовательности отсутствуют скобки. Алгоритм вычисления значения выражения, представленного в обратной польской записи. Для вычисления значения выражения, записанного в постфиксной форме, можно использовать описанный далее алгоритм. На вход подается последовательность лексем (числа или знаки операций), представляющая некоторое арифметическое выражение, записанное в постфиксной форме. Результатом работы алгоритма является значение этого выражения. 1. Пока не достигнут конец входной последовательности, читать очередную лексему и выполнять с ней следующие операции: если прочитан операнд (число), положить его в стек; если прочитан знак операции, вытолкнуть из стека два операнда и положить в стек результат применения прочитанной операции к этим операндам, взятым в обратном порядке. 2. Если достигнут конец входной последовательности, завершить работу. В стеке останется единственное число — значение исходного выражения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2014, 16:30 |
|
||
|
калькулятор без использования ОПН
|
|||
|---|---|---|---|
|
#18+
tramadolкалькулятор на основе конечного автомата на вход подается строка с выражением как посчтитать ее без использования обратной польской нотации? Рекурсивный спуск + какой-нибудь алгоритм для приоритета операций ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2014, 16:12 |
|
||
|
калькулятор без использования ОПН
|
|||
|---|---|---|---|
|
#18+
Изопропилтолько автомат не конечный, а магазинный потребуется магазинный это как? Как "автомат Калашникова - устройство для превращения стека в очередь" ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2014, 15:35 |
|
||
|
калькулятор без использования ОПН
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsevмагазинный это как? А. Ахо, Дж. Ульман "Теория синтаксического анализа, перевода и компиляции", Т.1 там найдёте определение ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2014, 20:33 |
|
||
|
калькулятор без использования ОПН
|
|||
|---|---|---|---|
|
#18+
Да я в вике уже нашел. Наизобретали, блин, умных слов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2014, 01:01 |
|
||
|
калькулятор без использования ОПН
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevНаизобретали, блин, умных слов. это вообще-то классика ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2014, 01:08 |
|
||
|
калькулятор без использования ОПН
|
|||
|---|---|---|---|
|
#18+
ИзопропилLeonid KudryavtsevНаизобретали, блин, умных слов. это вообще-то классикаЭто не классика, а ужас т ный перевод. Уж лучше бы кальку использовали или просто "автомат со стеком". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2014, 03:07 |
|
||
|
калькулятор без использования ОПН
|
|||
|---|---|---|---|
|
#18+
всем спасибо за советы, решил немножко изменить алгоритм сначала беру строку выражения в инфиксной записи, конвертирую ее в постфиксную, и потом уже считаю результат. только теперь проблема в том как конвертить функции типа min(a,b,c) в постфиксную запись, и как ее после этого считать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2014, 00:41 |
|
||
|
калькулятор без использования ОПН
|
|||
|---|---|---|---|
|
#18+
tramadol , а разговор был только об операциях, а не о функциях С другой стороны, сложности никакой нет - заводим ещё стек для "функций"... нет, не так На самом деле, придется сделать полнофункциональный парсер: не "символ ':' соотвествует операции '/'", а предопределенный справочник операций/функций, с описанием их унарности/бинарности/параметризации + приоритетов; а далее - как при обычной работе со стеками. Кстати, ваш пример с MIN(x1,x2[,x3]...) для конечного автомата, да ещё стекового - не подходит. MIN2(a,b) - подходит, MIN3(a,b,c) - подходит, подходит даже MINX(n,a1,a2,..,an), а вот опциональное количество параметров - не подходит никогда... Вам же дали уже ссылки на теорию, изучайте. Готовые решения никто приводить не будет... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2014, 01:27 |
|
||
|
калькулятор без использования ОПН
|
|||
|---|---|---|---|
|
#18+
tramadolтолько теперь проблема в том как конвертить функции типа min(a,b,c) в постфиксную запись, и как ее после этого считать Да точно так же. min(a,b,c) ничем кроме количества операндов не отличается от add(a,b), оно же a+b. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2014, 15:04 |
|
||
|
калькулятор без использования ОПН
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovДа точно так же. min(a,b,c) ничем кроме количества операндов не отличается от add(a,b), оно же a+b. Для функций с переменным числом аргументов постфиксную нотацию надо дополнить синтаксисом для указания кол-ва аргументов каждой операции. Тогда уж лучше в синтаксическое дерево переводить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2014, 15:41 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=38787629&tid=1341175]: |
0ms |
get settings: |
4ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
159ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
| others: | 236ms |
| total: | 456ms |

| 0 / 0 |
