Działania matematyczne

0

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

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:

http://4programmers.net/article.php?id=254

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;

1 użytkowników online, w tym zalogowanych: 0, gości: 1