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

Вниз

Опять про формулы   Найти похожие ветки 

 
SPeller ©   (2002-05-15 05:37) [0]

Здравствуйте! Надо мне вычислить значение некоей формулы вида y=a/x+bx^2+c. Помню читал, что в RX чё-то есть, но не знаю где и как называется функция. Подскажите пожалста!


 
MBo ©   (2002-05-15 07:09) [1]

TRxMathParser


 
SPeller ©   (2002-05-15 07:26) [2]

А как этим парсером пользоваться ? Можно пример?


 
Alx2 ©   (2002-05-15 07:28) [3]

Думаю, разберешься и дополнишь :)

Function EvalExpr(S: String): Double;
Type
TFuncNames = (fnone, fsin, fcos, ftan, farctan, fsqr, fsqrt);
Var K: Integer;
Function Expr: Double; Forward;

Function ReadFuncName: TFuncNames;
Var tmpStr: String;
Start: Integer;
Begin
Result := fnone;
Start := K;
While S[K] In ["a".."z", "A".."Z", "0".."9"] Do inc(K);
tmpStr := UpperCase(Copy(S, Start, K - Start));
If tmpStr = "SIN" Then Result := fsin Else
If tmpStr = "COS" Then Result := fcos Else
If tmpStr = "TAN" Then Result := ftan Else
If tmpStr = "ARCTAN" Then Result := farctan Else
If tmpStr = "SQR" Then Result := fsqr Else
If tmpStr = "SQRT" Then Result := fsqrt;
End;

Function ATOM: Double;
Var
tmp : Double;
tmpStr: String;
Code : Integer;
Begin
Result := 0;
If S[K] = "(" Then
Begin
inc(K);
Result := Expr;
inc(K);
End
Else
Begin
tmpStr := Copy(S, K, Length(S));
Val(tmpStr, tmp, Code);
If Code > 1 Then
Begin
K := K + Code - 1;
SetLength(tmpStr, Code - 1);
Val(tmpStr, tmp, Code);
If Code <> 0 Then exit;
Result := tmp;
End
Else
Begin
Case ReadFuncName Of
fsin: Result := sin(ATOM);
fcos: Result := cos(ATOM);
ftan: Result := tan(ATOM);
farctan: Result := arctan(ATOM);
fsqr: Result := sqr(ATOM);
fsqrt: Result := sqrt(ATOM);
End;
End;
End;
End;

Function Term: Double;
Var Ch: Char;
Begin
Result := ATOM;
Ch := S[K];
While Ch In ["*", "/"] Do
Begin
inc(K);
Case Ch Of
"*": Result := Result * ATOM;
"/": Result := Result / ATOM;
End;
Ch := S[K];
End;
End;

Function Expr: Double;
Var Ch: Char;
Begin
Result := Term;
Ch := S[K];
While Ch In ["+", "-"] Do
Begin
inc(K);
Case Ch Of
"+": Result := Result + Term;
"-": Result := Result - Term;
End;
Ch := S[K];
End;
End;

Begin
K := 1;
S := S + " ";
Result := Expr;
End;




 
SPeller ©   (2002-05-15 09:07) [4]

Это и в RX как я понял, решение вроде sin(5)+cos(6)/frac(3.78). Но мне надо решение алгебраического уравнения как я привёл выше. Существует что-нибудь для этих целей?


 
Alx2 ©   (2002-05-15 09:18) [5]

Так у тебя вопрос был формулу посчитать?
А если найти решение, то выведи общую формулу решения и вернемся к предыдущей задаче.


 
Кулюкин Олег ©   (2002-05-15 09:26) [6]

2 SPeller
Попробуйте парсер от FastReport.
Хотя мне он не нравится :)



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

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

Наверх




Память: 0.48 MB
Время: 0.019 c
1-73293
Tosha_a
2002-05-11 19:37
2002.05.23
как вызвать процедуру?


3-73002
Oleg_er
2002-04-25 15:21
2002.05.23
Округление в select dig1-dig2


3-73030
Helenka
2002-04-25 12:32
2002.05.23
связывание таблиц


1-73254
yar
2002-05-08 20:05
2002.05.23
Text


6-73340
igmel
2002-03-13 06:49
2002.05.23
Пинг