Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка 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 как раз разбирается создания синтаксического анализатора методом рекурсивного спуска.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)