czy ktoś zna funkcję, która oblicza wynik jakiegoś działania podanego jako string - czyli powiedzmy że w TEdit wpisuję działanie w stylu (3+4)*12-23 i chcę mieć wynik -oczywiście użytkownik może wpisać dowolny ciąg i chodzi o to, żeby funkcja ta obliczyła wynik - wiem, że w php i javie coś takiego jest - to musi być i w delphi - znacie może taką funkcję?
0
0
Zczytuj znaki z Edita (Int,Znak, smieci) i potem prosta zasada dzialan ze *./,+,-
0
Zczytuj znaki z Edita (Int,Znak, smieci) i potem prosta zasada dzialan ze *./,+,-
Nie jest to takie proste - problemy są przy: liczbach ujemnych (oznaczenie takie jak działanie odejmowania), kolejności działań, operacjach na nawiasach - bez rekurencji się nie obejdzie.
Tu masz rozwiązanie mojego autorstwa:
http://4programmers.net/article.php?id=545
lub tu Dryobatesa:
0
Już sobie poradziłem - ściagnąłem komponent RTCalcExpress - szkoda tylko że demówka:( i wystarczy taki kod aby obliczyć działanie w stylu
(23+43)*(45+65)-(3-(3+4)*3)*2
lub w postaci
(23 + 43 ) * ( 45 + 65) - ( 3 - (3+ 4 ) *3) *2
procedure TForm1.Button1Click(Sender: TObject);
var
p_tmp: PChar;
rslt: double;
n_tmp, code_err: integer;
begin
p_tmp := StrAlloc(160);
n_tmp := 0;
code_err := 0;
RTCalcExpress1.MessLanguage := ttEnglish;
RTCalcExpress1.ReturnType := ttString;
rslt := RTCalcExpress1.Evaluate(PChar(Memo1.Lines.Text), n_tmp, code_err, p_tmp);
Edit2.Text := string(p_tmp);
StrDispose(p_tmp);
end;