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

C a C++ Parser matematických výrazů v céčku

ONEbit hosting Unicorn College Tento obsah je dostupný zdarma v rámci projektu IT lidem. Vydávání, hosting a aktualizace umožňují jeho sponzoři.

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í "+-*/^()" +

    "\" = 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 147x (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í!
Miniatura
Všechny články v sekci
C a C++
Miniatura
Následující článek
Přechod od C k C++
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
tomichi
Redaktor
Avatar
tomichi: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  -1 15.12.2015 22:09
Dělte se o svou zkušenost, je to cesta jak dosáhnout nesmrtelnosti. Dalajláma
Avatar
Odpovídá na tomichi
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  +1 15.12.2015 22:41
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  +1 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
Tým ITnetwork
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.