|
Модераторы: gambit, Partizan |
|
UndeadBlow |
|
|||
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 15.12.2011 Репутация: нет Всего: нет |
Ну все просто, пользователь пишет, например "x+x/8", а программа считает результат.
Каким образом реализовать такое в Visual Studio Windows Forms? |
|||
|
||||
erm0l0v |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 157 Регистрация: 11.1.2011 Репутация: нет Всего: 1 |
Все зависит от сложности выражения. Самый универсальный способ это использование дерева-формулы:
Узлами дерева являются операции(обычные операции, унарные операции и функции). Листьями дерева являются константы и переменные. В корне дерева находится операции которая должна будет выполнится последней. Посчитать результат такого дерево не сложно обычная рекурсия, самое сложное в этой задаче это создать парсер, который будет преобразовывать строку в дерево. Общий алгоритм примерно такой: 1) Находим в строке операцию которая будет выполнена последней. Добавляем эту операцию в корень дерева. 2) Разбиваем строку на две части(одну часть в случае унароной операции или функции) и выполняем для этих частей наш алгоритм. 3) Если в строке остается константа то добавляем лист и завершаем парсинг. в вашем примере получится примерно такое дерево: + x / x 8 Есть и другие методы вычисление строкового выражения например преобразование строки в постфиксную или префиксную форму, но я считаю использование дерева-формулы более универсальным. |
|||
|
||||
Экскалупатор |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 2 Всего: 24 |
Шилдт - Полный справочник C# - 26 глава как раз разбирается создания синтаксического анализатора методом рекурсивного спуска.
|
|||
|
||||
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Разработка Windows Forms | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |