Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > EVAL как в РНР есть?


Автор: MCDeveloper 31.5.2006, 20:28
Дано:
 Edit1 - Вводят значение Х
 Edit2 - Вводят математическу строку, пример: 2*x-1
 Жмут кнопку, и в Edit3 написать результат..

советуют парсить, но могут вводить x^2, arcsin, cos, x^e... может есть какие-то компоненты калькулятора?

 

Автор: DeadSoul 31.5.2006, 20:44
Скинь мыло в приват. Отправлю готовый проект под Borland C++ 3.0. Умеет рисовать граффик. Писал правда лет 5 назад..... 

Автор: BreakPointMAN 31.5.2006, 21:18
Теория:
(http://algolist.manual.ru) http://algolist.manual.ru/syntax/index.php
(http://alglib.sources.ru) http://alglib.sources.ru/expressions

Реализация: 
(вариант 1, http://www.rsdn.ru)  http://www.rsdn.ru/article/files/Classes/tparser.xml
(вариант 2, http://rxlib.ru)  http://rxlib.ru/Downl/Downl.htm

Что касается последнего, то...

Код

...
#include <parsing.hpp>
...
TRxMathParser *MathParser=new TRxMathParser();
AnsiString E="(5+7)*Cos(0)";
float f=MathParser->Exec(E);
ShowMessage("Result: "+FloatToStr(f));
delete MathParser;


Вообщем, сначала подключается соответствующий заголовочный файл директивой препроцессора #include, затем объявляется указатель на объект класса TRxMathParser, который впоследствии инициализируется адресом, возвращенным операцией new при динамическом создании объекта данного класса. Класс имеет метод Exec, принимающий параметр типа AnsiString (строка с выражением) и возвращающий результат вычисления(не помню точно) типа float. После использования удаляется операцией delete...

Допустимые операторы:  + , - , * , / , ^, кроме того в выражении могут быть использованы следующие функции: Cos, Sin, Tan, ArcTan, ArcSin, ArcCos, Abs, Exp, Ln, Log, Sqrt, Sqr, Int, Fraq, Trunc, Round, Sign, Not.

Если надо просчитывать значение какой-то функции, то, вероятно, придется формировать строку с фактическим значением параметров, которую в дальнейшем передавать парсеру. 

Автор: DeadSoul 31.5.2006, 22:16
BreakPointMAN, ты просто ссылкомет.


MCDeveloper, я умываю руки. Данных ссылок более чем достаточно. 

Автор: BreakPointMAN 31.5.2006, 22:52
Цитата(DeadSoul @  31.5.2006,  22:16 Найти цитируемый пост)
BreakPointMAN, ты просто ссылкомет.

Просто сам как-то сталкивался с подобной задачей...  smile  

Автор: ano360 9.10.2006, 22:50

#include <parsing.hpp> 

У меня в ворланд с++ вуилдер 6 такого файла нет. Такое может быть?

Автор: Guest 9.10.2006, 23:07
Извините чтото ступил.

Автор: Guest 9.10.2006, 23:39
Чтото я всёравно не въесжаю. Скачал Библиотека RXLib, только не 275, а поновее, ну это мне кажется несутьважно, а даже лучше.
Читаю Ридменя:
1 Разархивируйте

2 Скопируйте все .bpl файлы из папки bpl - в папку bpl к Билдеру.
   (обычно это папка C:\Program Files\Borland\CBuilder6\Projects\Bpl)
           а все .lib и .bpi файлы из папки lib -  в папку lib к Билдеру.
   (обычно это папка C:\Program Files\Borland\CBuilder6\Projects\Lib)

3 Пропишите в C++Builder6 путь к разархивированной папке ..\RX\units
 (те если вы разархивировали в C:\Program Files\Borland\CBuilder6\RX,
   этот путь будет C:\Program Files\Borland\CBuilder6\RX\units)

4 Инсталируйте эти библиотеки компонент как обычно:
   Вкладка Component->InstallPackages->Add выбираете эти .bpl файлы в папке bpl
    и все ! Работайте...

КАК ПРОПИСАТЬ из пункта 3?Не подскажите?

Автор: Vyacheslav 10.10.2006, 09:41
Есть еще вариант.  Использовать Microsoft Script Control. С помощью него подключить скриптовые языки( VBScript, Javascript и т.д на свой выбор) и заставлять их выполнять эти вычисления.

Автор: ano360 10.10.2006, 18:19
так как всётаки 
Цитата
Пропишите в C++Builder6 путь к разархивированной папке ..\RX\units
?
Никто чтоть не знает?

Автор: ano360 10.10.2006, 18:56
Ну тогда хоть напишите, что такого нет в borland c++ builder,чтоб я успокоился

Автор: BreakPointMAN 10.10.2006, 22:10
Кстати говоря, возможно, ты кривой релиз скачал...  если лил с http://rxlib.ru, ибо есть там такие... У тебя C++ Builder какой версии? Если 6, то скачай http://rxlib.ru/arh/Comp/rxlib275.zip и http://rxlib.ru/arh/Comp/rx275pch2.zip... гммм...   smile  вроде правильно линки дал... короче, на http://rxlib.ru/Downl/Downl.htm смотри, если что не получится так напрямик скачать... 

Вот откопал у себя на компе текстовый файлик следующего содержания:
Код
* здесь и далее:
  <BCB6Dir> означает полный путь к папке с установленным Borland C++ Builder 6
       (например, C:\Program Files\Borland\CBuilder6)
  <RxLibDir> означает полный путь к папке с установленным RxLib 2.75
       (например, C:\Program Files\Borland\CBuilder6\RX)

Установка RxLib 2.75 для C++ Builder 6
======================================
1. Извлечь из архива и запустить rxinst.exe
2. В качестве конечной папки для RxLib 2.75 желательно задать C:\Program Files\Borland\CBuilder6\RX
3. Отказаться от добавления каких бы то ни было путей Delphi Search Path.


Установка Patch 2.2 на RXLib 2.75
=================================
1. Распаковать с заменой файлов все файлы из архива в папку <RxLibDir>

2. [Настроить опции в <RxLibDir>\units\rx.inc]

3. Tools => Environment Options... => Library
   в Library Path добавить путь <RxLibDir>\dcu\C6
   в Library Path добавить путь <RxLibDir>\units

4. Project => Options => Directories/Conditionals
   в Include Path добавить путь <RxLibDir>\units

5. Из папки <RxLibDir>\units удалить файлы strutils.*

6. Отключить в среде опцию Use dynamic RTL
   Project => Options... => Linker
   (возможно, лучше также отключить опцию Build with runtime packages
    Project => Options... => Packages
    и установить режим компилятора Release
    Project => Options... => Compiler)

7. По очереди открывать файлы
   rxctl6.bpk, rxdb6.bpk, rxbde6.bpk, dclrxall6.bpk
   из папки <RxLibDir>\units
   и компилировать их: Project => Build

8. Установить пакет
   dclrxall6.bpl
   с помощью Component => Install Packages... => Add...
   из папки <BCB6Dir>\Projects\Bpl


насколько я помню, я делал все по этому файлику + еще пришлось вручную прописывать пути в CBuilder6\Bin\*.cfg-файлах...
Наверное, это слишком большой изврат, но у меня RxLib после этого работал на все 100%... 

И еще... ммм... там не все пакеты надо устанавливать... они двух типов - времени проектирования и времени выполнения... только те, что времени проектирования ставить надо...  вот.

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