Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.01.27;
Скачать: CL | DM;

Вниз

Преобразование строк в...   Найти похожие ветки 

 
ssmaxx   (2003-01-10 18:50) [0]

И еще один вопросик: имеется строка типа String: Str:=x*x-5. Необходимо сделать так, чтобы по этой формуле можно было расчитывать примерно так:

Function y(x:Real):Real;
Begin
y:=Func;
end;

где Func - это формула, описанная строкой Str.


 
Poirot ©   (2003-01-10 19:18) [1]

"у ты какая" - ну вам как минимум надо интерпретатор формул написать (почти самим) или раскопать гденить.
Вам просто надо разбивать строку на блоки по приоритетам и рекурсивно вызывать для этих блоков функцию разбора по приоритетам, а кода бить нечего - начать вычисления...
Так вот и уж давайте без Y. Есть вполне прикольная переменная у каждой функции - Result///


 
Axis_of_Evil ©   (2003-01-10 19:19) [2]

2 ssmaxx:
это сложно, забудь про это.


 
D   (2003-01-10 19:23) [3]

Где-то на сайте Королевство Дельфи предлагалась подобная биб-ка.

Или можно сформировать во время вып-я программы dll, записав туда
эту функцию
Function y(x:Real):Real;
Begin
y:=<сюда запишется конкретная строка>;
end;
Но подробностей не помню, 5 лет назад писала :(


 
ssmaxx   (2003-01-10 19:44) [4]

Ну спасибо и на этом.


 
ssmaxx   (2003-01-10 20:07) [5]

Я почему предполагаю, что это возможно: когда я был маленьким, (


 
D   (2003-01-10 20:30) [6]

Могу в понедельник поискать (дискеты дома, а Инет на работе)


 
ssmaxx   (2003-01-10 20:42) [7]

Если не трудно, скиньте все найденное (желательно по теме) на ssmaxx@yandex.ru
Заранее благодарю!


 
BlackTiger   (2003-01-11 15:07) [8]

Да возьми просто класс TParser из FreeReport"а и всё. Пишешь так

Uses
//...
//...

procedure ParserGetValue(const s: String; var v: Variant);
begin
//s - имя переменной
//v - значение переменной
// здесь определяешь значение переменной
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Parser := TParser.Create(nil);
Parser.OnGetValue := ParserGetValue;
end;

function CalculateExpression(const Expr: string): variant;
begin
Result := Parser.Calc(Expr);
end;


Многое опустил, но, думаю, все должно быть понятно.



Страницы: 1 вся ветка

Текущий архив: 2003.01.27;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.02 c
7-87157
Sura
2002-11-11 17:59
2003.01.27
Кнопка мыши, правая !


14-87077
kostya2000
2003-01-08 19:43
2003.01.27
Какая ОС вам больше всего нравится? Почему?


1-86849
Анатолий
2003-01-18 21:18
2003.01.27
Консольное приложение


3-86638
Flagman
2003-01-06 22:56
2003.01.27
Удаление записей через триггер


3-86637
TTCustomDelphiMaster
2003-01-07 15:45
2003.01.27
Вы мне скажите честно