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