Digital Signal Processing 3D Graphics & Rendering Programming Download Natalia
Komentarze (2)  Wizyty (1 763)  Aktualnie osób (5)  Tutaj (1) 
User: Hasło:

 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:

    ParserReal.rar (4.27 kB) - komponent dla Delphi parsera liczb rzeczywistych (432 pobrań)

    Complex Number Mathematical Parser

    Parser 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:

    ParserCplx.rar (4.56 kB) - komponent dla Delphi parsera liczb zespolonych (413 pobrań)

    Visitors

    free counters

    Reklamy Google


    Komentarze (2)

    Zapraszam do pisania komentarzy w tym temacie.

    #812 - TAK
       Tak, ten renderowany wykres 3D to moj wlasny komponent.

    Dodano przez: Natalia Data: 2009-10-05 23:53:50

    #278 - użycie Parsera
       Witam! Fajny ten Parser, użyłam sobie - dzięki za source ale jakim komponentem zrobić taki wykres?
    męczę się z tym Delphi a może warto zostać przy Matlabie?
    przecież to musi się dać.
    W Delphi ChartFX ma niby funkcje dla trzech zmiennych x,y,z ale mi pisze że jest "niedorobione".
    Robisz to własnym komponentem?

    Dodano przez: Zegarkowa Data: 2008-10-17 12:24:21

    Napisz komentarz

    Pamiętaj, aby wypełnić wszystkie pola.

    Temat: Podpis: