Mathematical Parsers for Delphi Reklamy Google
Pokaz dwóch pareserów matematycznych : dla liczb rzeczywistych oraz zespolonych z przykładami. Parsery są bardzo ważnym elementem przy programownaiu obliczeń numerycznych. Szczególnie sprawę ułatwia parser dla liczb zespolonych - przy Odwrotnej transformacie Laplace'a i innych metodach numerycznych.
Real Number Mathematical Parser
Parser matematyczny jest specjalnym algorytmem, który pozwala na obliczenie wartości funkcji
(typu zmiennoprzecinkowego) dla podanych argumentów X, Y i/lub Z (również typu zmiennoprzecinkowego).
Funkcja jest zapisana w postaci łańcucha znaków (typu łańcuchowego - string). Na problem taki najczęściej
się napotyka kiedy programista chce obliczać wartości jakiejś funkcji wpisywanej z klawiatury przez użytkownika.
Przykładowe zastosowanie - jak na rysunku poniżej : Program rysujący wykresy funkcji, w którym wzory są wprowadzane z klawiatury, obliczanie
wartości funkcji.

Przykłąd zastosowania parsera - pobieranie funkcji od użytkownika
Korzystanie jest bardzo proste - wystarczy podać funkcję InputString oraz zmienne X , Y lub Z.
Nie trzeba w takim przypadku wywoływać żadnej funkcji obliczającej. Wygodniejszym i szybszym rozwiązaniem jest
zastosowanie funkcji Wynik ( x , y , z ) .
Zmiennymi rozróżnianymi są : x , y oraz z .
Parser rozróżnia 21 następujących operatorów oraz stałą pi :
Dodawanie : 'x + y'
Odejmowanie : 'x - y'
Mnożenie : 'x * y'
Dzielenie : 'x / y'
Potęgowanie : 'x^y'
Logarytm dziesiętny : 'log (x)'
Eksponenta : 'exp (x)'
Logarytm naturalny : 'ln (x)'
Pierwiastek kwadratowy : 'sqrt (x)', 'sqr (x)'
Sinus : 'sin (x)'
Cosinus : 'cos (x)'
Tangens : 'tan (x)'
Cotangens : 'ctg (x)'
Negacja : '- x = neg (x)' (to samo co '-'jednoargumentowy)
Negacja (minus jednoargumentowy) : '-x'
Wartość bezwzględna : 'abs (x)'
Arcus tangens : 'atan (x)'
Odwrotność : 'inv (x) = 1/x'
Signium : 'sgn (x)'
Calosc z liczby : 'int (x)'
Czesc dziesietna z liczby : 'frac (x)'
Stala Pi : 'pi'
Przykład 1 :
Parser1.InputString := '2*x+1';
Parser1.ValueX := 2;
Label1.Caption := FloatToStr(Parser1.Result); //Result = 5
Przykład 2 :
Parser1.InputString := 'x+y+1';
Parser1.ValueX := 2;
Parser1.ValueY := 2;
Label1.Caption := FloatToStr(Parser1.Result); //Result = 5
Przykład 3 :
Parser1.InputString := 'x+y+z';
Label1.Caption := FloatToStr(Parser1.Wynik(1,2,3)); //Result = 6
Pliki do pobrania:
Complex Number Mathematical ParserParser dla liczb zespolonych działa identycznie jak dla rzeczywistych z tą różnicą, że argumentami są liczby typu TComplex.
Zmiennymi rozróżnianymi są : s oraz z.
Mój parser zespolony działa na następujących operatorach :
Dodawanie : 'x + y'
Odejmowanie : 'x - y'
Mnożenie : 'x * y'
Dzielenie : 'x / y'
Potęgowanie : 'x^y'
Eksponenta : 'exp (x)'
Pierwiastek kwadratowy : 'sqrt (x)', 'sqr (x)'
Negacja : '- x = neg (x)' (to samo co '-'jednoargumentowy)
Negacja (minus jednoargumentowy) : '-x'
Wartość bezwzględna : 'abs (x)'
Odwrotność : 'inv (x) = 1/x'
Mała różnica jest także w funkcji Wynik, która jako argumenty pobiera tylko jedną liczę zespoloną :
function Wynik ( Real , Imag : Double ) : TComplex;
Pliki do pobrania:
Visitors
Reklamy Google
Komentarze (2)
Zapraszam do pisania komentarzy w tym temacie.
Napisz komentarz
Pamiętaj, aby wypełnić wszystkie pola.
|