Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как задавать функции через Textbox? Речь о математических функциях 
:(
    Опции темы
UndeadBlow
Дата 18.7.2012, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 15.12.2011

Репутация: нет
Всего: нет



Ну все просто, пользователь пишет, например "x+x/8", а программа считает результат.
Каким образом реализовать такое в Visual Studio Windows Forms?
PM MAIL   Вверх
erm0l0v
Дата 24.7.2012, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 157
Регистрация: 11.1.2011

Репутация: нет
Всего: 1



Все зависит от сложности выражения. Самый универсальный способ это использование дерева-формулы:
Узлами дерева являются операции(обычные операции, унарные операции и функции). Листьями дерева являются константы и переменные. В корне дерева находится операции которая должна будет выполнится последней. Посчитать результат такого дерево не сложно обычная рекурсия, самое сложное в этой задаче это создать парсер, который будет преобразовывать строку в дерево.
Общий алгоритм примерно такой:
1) Находим в строке операцию которая будет выполнена последней. Добавляем эту операцию в корень дерева.
2) Разбиваем строку на две части(одну часть в случае унароной операции или функции) и выполняем для этих частей наш алгоритм.
3) Если в строке остается константа то добавляем лист и завершаем парсинг.

в вашем примере получится примерно такое дерево:
       +
   x        /
          x     8
 
Есть и другие методы вычисление строкового выражения например преобразование строки в постфиксную или префиксную форму, но я считаю использование дерева-формулы более универсальным.
PM MAIL   Вверх
Экскалупатор
Дата 25.7.2012, 00:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 2
Всего: 24



Шилдт - Полный справочник C# - 26 глава как раз разбирается создания синтаксического анализатора методом рекурсивного спуска.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.1098 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.