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 |
| +------------+
.
.
.