#include <calculator.h>
Klassendiagramm für ComputerBase:

Öffentliche Methoden | |
| ComputerBase () | |
| Konstruktor erzeugt Symboltabelle, initialisiert Symbol- und Nummern-Stack. | |
| virtual | ~ComputerBase () |
| Die mit new angelegten Symbole muessen wieder geloescht werden. | |
| void | createSymTabBase () |
| Taschenrechner i.d.R. keine Klammern kennen. | |
| void | showSymTab () |
| Schreibt alle Symbole in die Log-Datei. | |
| void | initStacks () |
| Initialisiert die beiden Stack-Listen. | |
| void | initMembers (bool clrMem=true) |
| Initialisiert die Members von ComputerBase. | |
| void | clearNum () |
| Number | getConstVal () const |
| Number | getPrcWhole () const |
| Number | getMemory () const |
| int | getBraLev () const |
| int | getParam () const |
| SymOperator * | getConstOpP () const |
| SymOperator * | getLastOpP () const |
| Symbol * | getLastInP () const |
| Symbol * | getLastButOneInP () const |
| Symbol * | getSymP (const string &sym) |
| void | setDsplP (DisplayBase *dsplP) |
| void | setConstVal (const Number &val) |
| void | setPrcWhole (const Number &val) |
| void | setMemory (const Number &val) |
| void | setParam (const int val) |
| void | setLastOpP (SymOperator *soP) |
| void | setConstOpP (SymOperator *soP) |
| void | setLastInPisNotToSet (bool is) |
| void | setLastInP (Symbol *sP) |
| Speichert den Zeiger auf das zuletzt eingegebene Symbol. | |
| void | pushNewStacks () |
| Wirft neue Stacks auf die Stack-Listen. | |
| void | popStacks () |
| Holt die letzten Stacks von den Stack-Listen. | |
| void | pushNum (const Number &n) |
| void | pushSym (SymOperator *sP) |
| Number | getTopButOneNum () |
| void | setTopButOneNum (const Number &n) |
| bool | isNumEmpty () |
| bool | isSymEmpty () |
| Number | popNum () |
| Number | topNum () |
| SymOperator * | popSym () |
| SymOperator * | topSym () |
| void | incBraLev () |
| void | decBraLev () |
| void | printSymHelp () |
| Gibt alle Symbole der Symboltabelle auf die Konsole aus. | |
| string | getAllSyms () |
| Gibt saemtliche Symbole und Infos im String zurueck. | |
| bool | isSym (const string &sym) |
| Prueft, ob Symbol sym in der Symboltabelle ist, und gibt true oder false zurueck. | |
| Error | compute () |
| Berechnet den letzten Operator auf dem Symbol-Stack. | |
| Error | swapNum () |
| string | extractParam (string &in) |
| Extrahiert einen moeglicherweise vorhandenen Parameter des Symbols. | |
| string | makeCompBaseInfoStr () |
| Erzeugt fuers Debugging String mit den wichtigen Member-Variablen. | |
| virtual bool | preProcess (string &in) |
| virtual void | aftProcess (string &in) |
| virtual void | aftProcess2 (string &in) |
| virtual SymOperator * | checkConstMode (SymOperator *opP) |
| Untersucht, ob in den Konstanten-Modus gewechselt werden oder dieser abgeschaltet werden muss. | |
| virtual void | handleDisplayAfterBra () |
| Erzeugt passende Anzeige nach Eingabe von "(". | |
| virtual void | handlePercent () |
| Prozentrechnung des Solar-Rechners:. | |
| virtual void | popNumDepOnLastSym () |
| virtual bool | map (string &sym) |
| virtual string | makeCompInfoStr () |
Geschützte Methoden | |
| bool | popNumDepOnLastSymBase () |
| Holt die vorherige Eingabe vom Zahlenstack, wenn es kein Operator war. | |
| virtual void | handleEmptyNumStack (Number &a, SymOperator *soP, Number &b) |
| Erfindet einen zweiten Operanden, falls ein Operator mit nur einem berechnet werden soll. | |
Geschützte Attribute | |
| DisplayBase * | mDsplP |
| Zeiger auf zugehoeriges Display. | |
| SymTabT | mSymTab |
| Symboltabelle. | |
| NumStackList | mNumStackList |
| Zahlen-Stack-Liste zum Rechnen. | |
| SymStackList | mSymStackList |
| Symbol-Stack-Liste zum Rechnen. | |
| NumStack | mNumStack |
| Default-Zahlen-Stack: ist immer leer. | |
| SymStack | mSymStack |
| Default-Symbol-Stack: ist immer leer. | |
| Symbol * | mLastInP |
| das zuletzt eingegebene Symbol | |
| Symbol * | mLastButOneInP |
| das vorletzte eingegebene Symbol | |
| SymOperator * | mLastOpP |
| der zuletzt eingegebene Operator | |
| Number | mMemory |
| Speicherregister. | |
| int | mBraLev |
| Klammerebene. | |
| Number | mPrcWhole |
| bei Prozentrechnung: das "Ganze" | |
| SymOperator * | mConstOpP |
| bei Konstantenrechnung: der Operator | |
| Number | mConstVal |
| bei Konstantenrechnung: der konstante Wert | |
| int | mParam |
| bei manchen Operatoren uebergebener Parameter | |
| bool | mLastInPisNotToSet |
| damit kann Setzen von mLastInP verhindert werden | |
Freundbeziehungen | |
| ostream & | operator<< (ostream &os, ComputerBase &c) |
| Ausgabeoperator gibt wichtige Member-Variablen aus. | |
Die Klasse bildet zusammen mit den Symbolen das Rechenwerk des Calculators. Sie enthaelt einen Zahlen-Stack, einen Symbolstack, verschiedene "Register" (mMemory, mConstVal etc.) und Zustandsflags (RAD, DEG etc.). Fuer jede Klammerebene wird ein eigener Zahlen- und Symbol-Stack angelegt; daher gibt es in Wahrheit eine Liste von Zahlen-Stacks und eine Liste von Symbol-Stacks. Unterschiede zwischen den Rechnern werden in einem Satz virtueller Funktionen nachgebildet.
|
|
Konstruktor erzeugt Symboltabelle, initialisiert Symbol- und Nummern-Stack.
|
|
|
Die mit new angelegten Symbole muessen wieder geloescht werden.
|
|
|
Erneute Implementation in ComputerSci und ComputerCasioSci. |
|
|
Erneute Implementation in ComputerFx3600p. |
|
|
Untersucht, ob in den Konstanten-Modus gewechselt werden oder dieser abgeschaltet werden muss. Bedingungen fuers Einschalten (bei Casio-Rechnern):
Erneute Implementation in ComputerCasioSci. |
|
|
|
|
|
Berechnet den letzten Operator auf dem Symbol-Stack. Dazu werden die benoetigten Operanden vom Zahlen-Stack geholt, die Operation ausgefuehrt und das Ergebnis wieder auf dem Zahlen-Stack abgelegt.
|
|
|
Taschenrechner i.d.R. keine Klammern kennen. Da die Behandlung von Klammern integraler Bestandteil des Stack-Konzeptes ist, gehoeren auch Klammern zum minimalen Taschenrechner, obwohl einfache |
|
|
|
|
|
Extrahiert einen moeglicherweise vorhandenen Parameter des Symbols. Einige Operatoren ("sci", "fix") benoetigen einen Parameter. Dieser wird bei der Eingabe, durch "@" getrennt, an den Operator angehaengt und hier wieder extrahiert. Bei "ee" (Exponentialtaste des TI-30) Sonderbehandlung: Wenn hier der Parameter weggelassen wird, wird er auf 9999 gesetzt; dies wird in Symbol AcEe dann ausgewertet.
|
|
|
Gibt saemtliche Symbole und Infos im String zurueck.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Erzeugt passende Anzeige nach Eingabe von "(". Die Rechner unterscheiden sich darin, welche Zahl im Display erscheint, wenn "(" eingegeben wird. (TI: behaelt aktuelle Zahl bei, sie wird nur geloescht, wenn dann vor dem Operator noch eine andere eingegeben wird; Casio: schreibt "0" ins Display). Als Default-Verhalten ist hier das Casio-Verhalten implementiert. Erneute Implementation in ComputerCasioSci und ComputerTiSci. |
|
||||||||||||||||
|
Erfindet einen zweiten Operanden, falls ein Operator mit nur einem berechnet werden soll. Muss von den abgeleiteten Klassen je nach Taschenrechner ueberladen werden.
Erneute Implementation in ComputerCasioSci und ComputerTiSci. |
|
|
Prozentrechnung des Solar-Rechners:.
Erneute Implementation in ComputerSci, ComputerCasioSci und ComputerTiSci. |
|
|
|
|
|
Initialisiert die Members von ComputerBase. Aus Konstruktor ausgelagert, weil auch von AcInit::process() aufgerufen.
|
|
|
Initialisiert die beiden Stack-Listen. Die Stacks koennen leider nicht bereits im Konstruktor initialisiert werden, da mLogFileP zum Zeitpunkt des Aufrufs (Member von Calculator) noch nicht gesetzt ist. |
|
|
|
|
|
Prueft, ob Symbol sym in der Symboltabelle ist, und gibt true oder false zurueck.
|
|
|
|
|
|
Erzeugt fuers Debugging String mit den wichtigen Member-Variablen.
|
|
|
Erneute Implementation in ComputerSci und ComputerCasioSci. |
|
|
Erneute Implementation in ComputerSci, ComputerFx3600p und ComputerFx85v. |
|
|
|
|
|
Erneute Implementation in ComputerCasioSci. |
|
|
Holt die vorherige Eingabe vom Zahlenstack, wenn es kein Operator war. Das ist z.B. noetig, wenn direkt nacheinander zwei Zahlen eingegeben werden: Die zweite muss die erste auf dem Stack ersetzen. Diese Funktion muss in anderen Taschenrechnern erweitert werden um weitere Symbole; z.B. gilt das auch fuer die Tasten "Kout@1", ..., "Kout@6" der Casio-Taschenrechner. Daher muss eine virtuelle Funktion aufgerufen werden, die wiederum einige Funktionen wie diese hier aufruft.
|
|
|
Holt die letzten Stacks von den Stack-Listen. Wird benoetigt, wenn die Klammerebene erniedrigt wird. |
|
|
|
|
|
Erneute Implementation in ComputerSci, ComputerFx3600p und ComputerFx85v. |
|
|
Gibt alle Symbole der Symboltabelle auf die Konsole aus.
|
|
|
Wirft neue Stacks auf die Stack-Listen. Wird benoetigt, wenn die Klammerebene erhoeht wird. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Speichert den Zeiger auf das zuletzt eingegebene Symbol. Alle Symbole mit Parametern benoetigen normalerweise zwei Durchlaeufe (z.B. Kout: im zweiten Durchlauf wird daraus "Kout@2"). Beim ersten Durchlauf darf mLastInP nicht gesetzt werden, da die Bearbeitung noch nicht abgeschlossen ist. Daher koennen diese Symbole das durch Setzen von mLastInPisNotToSet unterbinden.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Schreibt alle Symbole in die Log-Datei.
|
|
|
|
|
|
|
|
|
|
|
||||||||||||
|
Ausgabeoperator gibt wichtige Member-Variablen aus.
|
|
|
Klammerebene.
|
|
|
bei Konstantenrechnung: der Operator
|
|
|
bei Konstantenrechnung: der konstante Wert
|
|
|
Zeiger auf zugehoeriges Display.
|
|
|
das vorletzte eingegebene Symbol
|
|
|
das zuletzt eingegebene Symbol
|
|
|
damit kann Setzen von mLastInP verhindert werden
|
|
|
der zuletzt eingegebene Operator
|
|
|
Speicherregister.
|
|
|
Default-Zahlen-Stack: ist immer leer.
|
|
|
Zahlen-Stack-Liste zum Rechnen.
|
|
|
bei manchen Operatoren uebergebener Parameter
|
|
|
bei Prozentrechnung: das "Ganze"
|
|
|
Default-Symbol-Stack: ist immer leer.
|
|
|
Symbol-Stack-Liste zum Rechnen.
|
|
|
Symboltabelle.
|
1.4.1