| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Разработка Windows Forms > Как задавать функции через Textbox? |
| Автор: UndeadBlow 18.7.2012, 22:28 |
| Ну все просто, пользователь пишет, например "x+x/8", а программа считает результат. Каким образом реализовать такое в Visual Studio Windows Forms? |
| Автор: erm0l0v 24.7.2012, 13:24 |
| Все зависит от сложности выражения. Самый универсальный способ это использование дерева-формулы: Узлами дерева являются операции(обычные операции, унарные операции и функции). Листьями дерева являются константы и переменные. В корне дерева находится операции которая должна будет выполнится последней. Посчитать результат такого дерево не сложно обычная рекурсия, самое сложное в этой задаче это создать парсер, который будет преобразовывать строку в дерево. Общий алгоритм примерно такой: 1) Находим в строке операцию которая будет выполнена последней. Добавляем эту операцию в корень дерева. 2) Разбиваем строку на две части(одну часть в случае унароной операции или функции) и выполняем для этих частей наш алгоритм. 3) Если в строке остается константа то добавляем лист и завершаем парсинг. в вашем примере получится примерно такое дерево: + x / x 8 Есть и другие методы вычисление строкового выражения например преобразование строки в постфиксную или префиксную форму, но я считаю использование дерева-формулы более универсальным. |
| Автор: Экскалупатор 25.7.2012, 00:20 |
| http://www.scribd.com/doc/75476663/474/%D0%90%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7-%D0%B2%D1%8B%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B9-%D0%BF%D0%BE%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0-%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B8 как раз разбирается создания синтаксического анализатора методом рекурсивного спуска. |