Almetare
1.15
Alle meine Taschenrechner - Eine C++-Bibliothek zur Entwicklung von Taschenrechnern
|
Basisklasse aller Computer. Mehr ...
#include <calculator.h>
Öffentliche Methoden | |
ComputerBase () | |
Konstruktor erzeugt Symboltabelle, initialisiert Symbol- und Nummern-Stack. | |
virtual | ~ComputerBase () |
Die mit new angelegten Symbole muessen wieder geloescht werden. | |
void | createSymTabBase () |
Erzeugt Symboltabelle mit allen Symbolen des "minimalen" Taschenrechners. Mehr ... | |
void | showSymTab () |
Schreibt alle Symbole in die Log-Datei. | |
void | initStacks () |
Initialisiert die beiden Stack-Listen. Mehr ... | |
void | initMembers (bool clrMem=true) |
Initialisiert die Members von ComputerBase. Mehr ... | |
void | clearNum () |
Number | getConstVal () const |
Number | getPrcWhole () const |
Number | getMemory () const |
int | getBraLev () const |
int | getParam () const |
SymOperator * | getConstOpP () const |
SymOperator * | getLastOpP () const |
SymOperator * | getLastButOneOpP () 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) |
Speichert die Zeiger auf die beiden zuletzt eingegebene Operator-Symbole. Mehr ... | |
void | setConstOpP (SymOperator *soP) |
void | setLastInPisNotToSet (bool is) |
void | setLastInP (Symbol *sP) |
Speichert den Zeiger auf das zuletzt eingegebene Symbol. Mehr ... | |
void | setIsToInit (bool in) |
void | pushNewStacks () |
Wirft neue Stacks auf die Stack-Listen. Mehr ... | |
void | popStacks () |
Holt die letzten Stacks von den Stack-Listen. Mehr ... | |
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. Mehr ... | |
Error | compute () |
Berechnet den letzten Operator auf dem Symbol-Stack. Mehr ... | |
Error | swapNum () |
string | extractParam (string &in) |
Extrahiert einen moeglicherweise vorhandenen Parameter des Symbols. Mehr ... | |
string | makeCompBaseInfoStr () |
Erzeugt fuers Debugging String mit den wichtigen Member-Variablen. Mehr ... | |
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. Mehr ... | |
virtual void | handleDisplayAfterBra () |
Erzeugt passende Anzeige nach Eingabe von "(". Mehr ... | |
virtual void | handlePercent () |
Prozentrechnung des Solar-Rechners: Mehr ... | |
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. Mehr ... | |
virtual void | handleEmptyNumStack (Number &a, SymOperator *soP, Number &b) |
Erfindet einen zweiten Operanden, falls ein Operator mit nur einem berechnet werden soll. Mehr ... | |
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 | |
SymOperator * | mLastButOneOpP |
der vorletzte 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 | |
bool | mIsToInit |
wird von AcAc::process() auf true gesetzt und nur vom fx-3600P ausgewertet | |
Freundbeziehungen | |
ostream & | operator<< (ostream &os, ComputerBase &c) |
Ausgabeoperator gibt wichtige Member-Variablen aus. | |
Basisklasse aller Computer.
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.
|
virtual |
Untersucht, ob in den Konstanten-Modus gewechselt werden oder dieser abgeschaltet werden muss.
Bedingungen fuers Einschalten (bei Casio-Rechnern):
Erneute Implementation in ComputerCasioSci.
Error ComputerBase::compute | ( | ) |
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.
void ComputerBase::createSymTabBase | ( | ) |
Erzeugt Symboltabelle mit allen Symbolen des "minimalen" Taschenrechners.
Da die Behandlung von Klammern integraler Bestandteil des Stack-Konzeptes ist, gehoeren auch Klammern zum minimalen Taschenrechner, obwohl einfache Taschenrechner i.d.R. keine Klammern kennen.
string ComputerBase::extractParam | ( | string & | in | ) |
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.
in | zu untersuchende Zeichenkette |
|
virtual |
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.
|
protectedvirtual |
Erfindet einen zweiten Operanden, falls ein Operator mit nur einem berechnet werden soll.
Muss von den abgeleiteten Klassen je nach Taschenrechner ueberladen werden.
a | erster Operand |
soP | Zeiger auf Operatorsymbol |
b | erfundener zweiter Operator |
Erneute Implementation in ComputerCasioSci und ComputerTiSci.
|
virtual |
Prozentrechnung des Solar-Rechners:
Erneute Implementation in ComputerCasioSci, ComputerSci und ComputerTiSci.
void ComputerBase::initMembers | ( | bool | clrMem = true | ) |
Initialisiert die Members von ComputerBase.
Aus Konstruktor ausgelagert, weil auch von AcInit::process() aufgerufen.
clrMem | wenn true, wird der Memory-Speicher geloescht |
void ComputerBase::initStacks | ( | ) |
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.
bool ComputerBase::isSym | ( | const string & | sym | ) |
string ComputerBase::makeCompBaseInfoStr | ( | ) |
Erzeugt fuers Debugging String mit den wichtigen Member-Variablen.
|
protected |
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.
void ComputerBase::popStacks | ( | ) |
Holt die letzten Stacks von den Stack-Listen.
Wird benoetigt, wenn die Klammerebene erniedrigt wird.
void ComputerBase::pushNewStacks | ( | ) |
Wirft neue Stacks auf die Stack-Listen.
Wird benoetigt, wenn die Klammerebene erhoeht wird.
void ComputerBase::setLastInP | ( | Symbol * | sP | ) |
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.
sP | Zeiger auf das Symbol, das in mLastInP gespeichert wird |
void ComputerBase::setLastOpP | ( | SymOperator * | sP | ) |
Speichert die Zeiger auf die beiden zuletzt eingegebene Operator-Symbole.
sP | Zeiger auf das Symbol, das in mLastInP gespeichert wird |