47 lines
2.0 KiB
Plaintext
47 lines
2.0 KiB
Plaintext
Kalkulačka racionálních čísel
|
|
|
|
Struktura programu:
|
|
Instance třídy CParser zpracovává algebraické výrazy v LL1 gramatice
|
|
(viz. doc/dor/grammar.dot)
|
|
Pamatuje si proměnné a řídí dodaný saver.
|
|
|
|
Ze zadaných výrazů složí strom na jehož vrchol zavolá rekurzivní eval()
|
|
|
|
Abstraktní třída CPrintable zastřešuje veškeré výstupy z parseru,
|
|
tedy čísla a operace. Její potomci imlepentují metodu eval() kterou
|
|
se rekurzivně vyhodnotí celý strom operací. Polymorfismus zajištěje
|
|
že operandy můžou být jak čísla tak jiné operace.
|
|
|
|
Kalkulačcka implementuje exaktní operace pro racionální čísla,
|
|
celočíselné modulo, a proximaxi logaritmů a exponenciel.
|
|
|
|
+-------------------------+ +---------------------------+
|
|
| CPrintable *abstract* | | CParser |
|
|
|-input from parser | | parses input into |
|
|
|-output to UI |--+ | tree of CPrintables |
|
|
| SPrintableValue *eval() | | | |
|
|
+-------------------------+ | +---------------------------+
|
|
|
|
|
|
|
|
|
|
|
+-------------------------+ | +---------------------------+
|
|
| COperator *abstarct* |<-+->| CRational |
|
|
| CPrintable *operandB | | CBigInt *deniminator |
|
|
| CPrintable *operandA | | CBigInt *numerator |
|
|
| | | |
|
|
+-------------------------+ +---------------------------+
|
|
|
|
|
| +-----------+ +---------------------------+
|
|
+-->| CAdittion | | CBigInt |
|
|
| +-----------+ | CBigInt *add( CBigint *) |
|
|
| | CBigInt *sub( CBigint *) |
|
|
| +----------------+ | CBigInt *mul( CBigint *) |
|
|
+-->| CMultipication | +---------------------------+
|
|
| +----------------+
|
|
|
|
|
| +------------+
|
|
+-->| CFactorial |
|
|
| +------------+
|
|
.
|
|
.
|
|
. |