C# týden Slevový týden - Březen
Využij náš slevový týden a získej až 30 % bodů navíc zdarma! Zároveň také probíhá C# týden se slevou na e-learning až 80 %
Hledáme fulltime programátora do ITnetwork týmu -100% homeoffice, 100% časově flexibilní #bezdeadlinu Mám zájem!

Parser matematických výrazů v céčku

Toto je můj parser matematických výrazů napsaný v jazyce C. Zvládá klasické +-*/(), mocniny, odmocniny, funkce, konstantu π a také uložení proměnných pro pozdější použití. To všechno s přesností na 30 desetinných míst s rozsahem 10^(-4932) až 104932.

  1. Použitelné symboly jsou standardní "+-*/^()" +
    Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!

    "\" = druhá odmocnina - použití : 2\256=16

  2. Můžete používat tyto funkce : sin, cos, tan, asin, acos, atan, sinh, cosh, tanh, asinh, acosh, atanh, log, abs, fact (factorial)
    • use : sin(90)
    • sin, cos, tan ... - vstup je v radiánech (= stupně*pi/180)

    Můžete používat konstantu : pi

  3. Ve vstupu pro proměnné můžete zadávat proměnné ve formátu : "a=2.2;b=2,3;c=a­+b;re=5+a-c/b"
  4. V normálním vstupu můžete zadávat matematické výrazy ve formátu : "5+8*3-2a+fact(3)+5b(2-1)(4+2)" a přiřadit je proměnné :
    • "sa=2\16+a"

    V normálním vstupu můžete psát příkazy pomocí znaku ":" , můžete použít : vars

    • použití : ":vars"
  5. Tento program odstraňuje mezery a nahrazuje {}[] za () a : za / , takže
    • "abs[ a+b :r e }" je to samé jako
    • "abs(a+b/re)"
  6. Přesnost je 30 desetinných míst, nejsou podporována čísla větší než 104932 nebo menší než 10^(-4932)

Galerie

Program byl vytvořen v roce 2014.

 

Stáhnout

Staženo 187x (239.88 kB)
Aplikace je včetně zdrojových kódů v jazyce C++

 

 

Program pro vás napsal tomisoka
Avatar
Jak se ti líbí článek?
Ještě nikdo nehodnotil, buď první!
Všechny články v sekci
Největší český C a C++ portál - Kompletní on-line kurzy
Aktivity (1)

 

 

Komentáře

Avatar
Libor Šimo (libcosenior):7.11.2014 13:43

Zdá sa mi, že som nepochopil názov článku.
Píšeš o parseri výrazov a v skutočnosti parsuješ či je dobre zadaný reťazec - číslo.

Odpovědět
7.11.2014 13:43
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar

Člen
Avatar
:15.12.2015 22:09

no pokud bys to chtěl vylepšit tak pravý parser si tvoří svůj syntaktický strom ast pokud se jedná o parser výrazů tak tvoří binární strom. :) jinak k'od je celkem dost nečitelný jako je vidět že jazyku c rozumíš. Jinak celkem je to overhead řešení :)

 
Odpovědět
15.12.2015 22:09
Avatar
Odpovídá na
Jakub Šárník:15.12.2015 22:41

Parser nemusí tvořit jen AST a nevím, proč by měl parser výrazů tvořit zrovna jen binární strom :-D

 
Odpovědět
15.12.2015 22:41
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Martin Dráb
Redaktor
Avatar
Odpovídá na Jakub Šárník
Martin Dráb:16.12.2015 0:41

Ano. Já jsem snad vždycky, když jsem potřeboval parsovat výrazy, uchýlil k postfixu. Přišlo mi to jednodušší, než sázení stromů.

Odpovědět
16.12.2015 0:41
2 + 2 = 5 for extremely large values of 2
Avatar
Odpovídá na Martin Dráb
Jakub Šárník:17.12.2015 18:52

Já jsem si teď jen pro procvičování dělal parser (jsem tady taky měl dotaz :-D) a použil jsem AST. Mě se zase zdá jednodušší ten a hlavně univerzálnější. Jen třeba moc nevím, jak bych to dělal, kdyby měl mít uživatel třeba možnost definovat vlastní operátory (s prioritou), aniž by se to nějak extrémé zkomplikovalo...

Editováno 17.12.2015 18:53
 
Odpovědět
17.12.2015 18:52
Avatar
David Novák
Redaktor
Avatar
Odpovídá na Martin Dráb
David Novák:22.12.2015 15:15

Souhlas. Na matematické výrazy je asi postfix nejlepší řešení :)

Odpovědět
22.12.2015 15:15
Chyba je mezi klávesnicí a židlí.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.