Как зайти в Даркнет?!
25th January, 01:11
8
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
899
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
952
0
Очень долго работает Update запрос Oracle
27th January, 09:58
916
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
907
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
942
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1727
0
период по дням
25th October, 10:44
3957
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3722
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4614
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4382
0
Помогите пожалуйста решить задачи
24th November, 23:53
6087
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4352
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4400
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
вычисление пользовательских формул (с c++)
Мы хотели бы иметь пользовательские формулы в нашей программе c++.
например, значение v = x + (y - (z-2)) / 2 . Позже в программе пользователь определит x, y и z - > программа должна вернуть результат вычисления.
Через некоторое время формула может быть изменена, поэтому в следующий раз программа должна проанализировать формулу и добавить новые значения.
Любые идеи / подсказки, как сделать что-то подобное ?
До сих пор я просто пришел к решению написать парсер для вычисления этих формул - может быть, какие-то идеи об этом ?
Если он будет использоваться часто и если он будет расширен в будущем, я бы почти рекомендовал добавить в ваш код либо python, либо LUA. LUA - это очень легкий язык сценариев, который вы можете подключить и предоставить новые функции, операторы и т. д. Если вы хотите делать более надежные и сложные вещи, используйте вместо этого Python.
Создание собственного парсера для этого должно быть простой операцией:
) преобразование уравнения из инфикса в постфиксную нотацию (типичное назначение compsci) (я бы использовал стек) ) подождите, чтобы получить нужные вам значения ) поп стек элементов инфикса, сбрасывая значение для переменной в случае необходимости ) отображаемые результаты
Использование Spirit (например) для синтаксического анализа (и 'semantic actions', который он предоставляет для построения дерева выражений, которым вы можете затем манипулировать, например, оценивать) кажется довольно простым решением. Вы можете найти grammar для арифметических выражений там , например, если это необходимо... (это довольно просто придумать самостоятельно).
Примечание: дух очень прост в освоении и вполне приспособлен для таких задач.
Как правило, есть два способа сделать это, с тремя возможными реализациями:
- как вы уже коснулись себя, библиотека для оценки формул
- компиляция формулы в код
Второй вариант здесь обычно делается либо путем компиляции чего-то, что может быть загружено в виде плагина, либо оно может быть скомпилировано в отдельную программу, которая затем вызывается и производит необходимый вывод.
Для C++ я бы предположил, что библиотека для оценки, вероятно, где-то существует, поэтому я бы начал именно с этого.
Если вы хотите написать свой собственный, найдите "formal automata" и / или "finite state machine grammar"
В общем, то, что вы будете делать, это разбирать строку, нажимая символы на стеке, как вы идете. Затем начните выталкивать персонажей и выполнять задачи, основанные на том, что выскочило. Кодировать проще, если вы заставляете уравнения выполнять обратную полировку нотации.
Чтобы сделать вашу жизнь проще, я думаю, что получение такого рода ввода лучше всего делать через GUI, где пользователи ограничены в том, что они могут вводить.
Если вы планируете делать это из командной строки (именно такое впечатление я получаю от вашего поста), то вам, вероятно, следует определить строгий набор допустимых входных данных (например, только однобуквенные переменные, no whitespace и только определенные математические символы: ()+-*/ и т. д.).
Тогда вам нужно будет::
Чтение в массиве входных символов
Проанализируйте его, чтобы построить список переменных и действий
Выполните эти действия - в порядке BOMDAS
С помощью ANTLR вы можете создать синтаксический анализатор / компилятор, который будет интерпретировать пользовательский ввод, а затем выполнять вычисления с использованием шаблона посетителя. Хороший пример здесь, но именно в C#. вы должны быть в состоянии быстро адаптировать его к вашим потребностям и по-прежнему использовать C++ в качестве платформы разработки.