| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > VB6 > Формула из текста |
| Автор: eganeev 3.2.2007, 21:26 |
| Кто знает как сделать чтобы, можно было формулу вводить в текстовом поле, а программа ее вычисляла??? Заранее спасибо. |
| Автор: Данкинг 3.2.2007, 21:32 |
| А подробнее?! |
| Автор: W4FhLF 3.2.2007, 22:44 |
| http://www.vb.kiev.ua/code/math/ExEvaluator.zip |
| Автор: eganeev 4.2.2007, 10:10 | ||
есть формула, к примеру 3х+6х-5(ее нужно ввести в текстовом поле), мне надо чтобы я мог значению y присвоить эту формулу. |
| Автор: Кирилл 4.2.2007, 17:07 |
| W4FhLF, что такое CExpressionEvaluator? Насколько я понимаю, весь секрет в нём. |
| Автор: Akina 5.2.2007, 10:04 |
Ну и присваивай как строку... а можешь сделать разбор в польскую нотацию и присваивать полученный массив - тогда можно будет даже определить операторы работы с формулами. Но лучше создать для этого свой класс. |
| Автор: eganeev 6.2.2007, 08:49 | ||
А можно подробнее. Если можно то кодом. Я тока начинающий программист на VB6. |
| Автор: mihanik 6.2.2007, 15:00 |
Если начинающий, то сразу тебе такое не решить. Начинай с простейшего калькулятора, выполняющего 4 действия: +, -, *, /. Потом разберись с польской записью (нотацией) выражения (тут немного погуглить придётся). Примеров в сети много... Потом уже начинай свою задачу решать... |
| Автор: Rodman 6.2.2007, 16:44 |
| eganeev, см. польская инверсная запись (польская инверсная нотация)... метод расчета при помощи стека... простой и мощный вариант... |
| Автор: JusTalionis 6.2.2007, 17:41 | ||
а это как раз тот самый "класс" о котором говорил Akina. Там уже дан код разбора текстовой строки, типа, если стоит "+", то сложить, если "*", то перемножить, и т. д. А простых способов перевода 1:1, как, вероятно, ожидал eganeev, в Бейсике нет, потому что текстовая строка - это значение переменной, а вычисляемое выражение (формула) - это имена переменных (и функций), и одно в другое не переводится. W4FhLF, большое спасибо за ссылку! Огромная работа там проделана... |
| Автор: W4FhLF 6.2.2007, 18:13 |
| Кстати откопал ещё один исполнитель выражений, реализовано всё одной функцией, более простой вариант. Смотрите в аттаче. |
| Автор: eganeev 6.2.2007, 20:42 | ||
Я думал в бейсике можно напрямую. Будем изучать код. Всем спасибо за ответ. |
| Автор: Pugach 6.3.2007, 20:47 |
| А ведь можно формулу записанную тексом можно присвоить ячейке Excel и снять с нее результат. |
| Автор: Naghual 7.3.2007, 11:30 |
| Pugach - это операция на гландах через задний проход! |
| Автор: mihanik 7.3.2007, 14:27 | ||
| Вот так можно посчитать (1+2)*3 при помощи калькулятора
Потом можно скопировать результат в буфер обмена... А уж из буфера обмена... |
| Автор: Pugach 7.3.2007, 15:15 |
| Ну я просмотрел предложенные коды, по мне так они слишком большие. |
| Автор: W4FhLF 7.3.2007, 15:46 |
| mihanik, это 5. |
| Автор: Naghual 7.3.2007, 16:12 |
| Тогда не соблоговолит ли уважаемый Pugach продемонстрировать что-либо из своего кода? |
| Автор: Pugach 7.3.2007, 19:57 |
| Через пару недель надеюсь напишу, много работы. Просто мне нужно реализовать метод Хука-Дживса (поиск минимума функции, зависящей от нескольких параметров) Пользователь должен ввести функцию, и аргументы ,от которых она зависит. Как это реализовать с помощью вашего калькулятора я не представляю. |
| Автор: ama_kid 8.3.2007, 16:58 |
| Pugach мне кажется, тебе все-таки необходимо понимать твою задачу до конца: тебе нужно реализовать именно МЕТОД или парсинг строки на математические функции? Не имею представления о сложности первой задачи, но вторая является достаточно сложной вещью - я несколько лет назад реализовывал такую для набора символов ['(',')','*','/','+','-','c','o','s','i','n','0'..'9','.','x'] - как видно тут достаточно ограниченный набор - синус, косинус, простейшие математические действия и при этом - подразумевалась функция ОДНОЙ ПЕРЕМЕННОЙ! Т.е. было условие, что пользователь будет вводить функцию в таких символьных рамках. Весь код у меня занял целых пять печатных страниц мелким шрифтом (писал я достаточно оптимально). А ты говоришь, что тебе надо реализовать такой парсинг функции НЕСКОЛЬКИХ ПЕРЕМЕННЫХ, да еще и без ограничивающих функцию условий (по крайней мере ты не уточнил их - значит, пользователь может вводить и экспоненту, и косекансы, и производные с интегралами, да?) да еще и вкупе с методом некоего Хука-Дживса и еще жалуешься, что предлагаемый тебе код слишком большой? |
| Автор: Pugach 8.3.2007, 17:48 |
| Поэтому я и хочу задействовать Excel, чтоб в одной ячейке была записана функция, а в других те переменные, от которых она зависит. Попытаюсь это сделать. |
| Автор: Kirill89 8.3.2007, 21:31 | ||
А зачем тогда насиловать VB? Просто создай лист с формулами и их аргументами. |
| Автор: Pugach 9.3.2007, 19:02 | ||
| Вот. Предлагаю Вашему вниманию код, на мой взгляд довольно простой. В text1 вводим формулу (синтаксис длжен точно совпадать с синтаксисом в Excel) В text2 вводим через запятую переменные В text3 вводим через запятую значения переменных.
Помоему проще некуда |