Almetare  1.15
Alle meine Taschenrechner - Eine C++-Bibliothek zur Entwicklung von Taschenrechnern
ComputerBase Klassenreferenz

Basisklasse aller Computer. Mehr ...

#include <calculator.h>

Klassendiagramm für ComputerBase:
ComputerSci ComputerCasioSci ComputerTiSci ComputerFx3600p ComputerFx85v ComputerTi30

Ö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
 
SymOperatorgetConstOpP () const
 
SymOperatorgetLastOpP () const
 
SymOperatorgetLastButOneOpP () const
 
SymbolgetLastInP () const
 
SymbolgetLastButOneInP () const
 
SymbolgetSymP (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 ()
 
SymOperatorpopSym ()
 
SymOperatortopSym ()
 
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 SymOperatorcheckConstMode (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

DisplayBasemDsplP
 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.
 
SymbolmLastInP
 das zuletzt eingegebene Symbol
 
SymbolmLastButOneInP
 das vorletzte eingegebene Symbol
 
SymOperatormLastOpP
 der zuletzt eingegebene Operator
 
SymOperatormLastButOneOpP
 der vorletzte eingegebene Operator
 
Number mMemory
 Speicherregister.
 
int mBraLev
 Klammerebene.
 
Number mPrcWhole
 bei Prozentrechnung: das "Ganze"
 
SymOperatormConstOpP
 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.
 

Ausführliche Beschreibung

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.

Dokumentation der Elementfunktionen

◆ checkConstMode()

SymOperator * ComputerBase::checkConstMode ( SymOperator opP)
virtual

Untersucht, ob in den Konstanten-Modus gewechselt werden oder dieser abgeschaltet werden muss.

Bedingungen fuers Einschalten (bei Casio-Rechnern):

  • Es muss zwei Mal unmittelbar hintereinander derselbe Operator eingegeben worden sein.
  • Es duerfen keine Klammern eingegeben worden sein. Bedingung fuers Ausschalten:
  • Irgendein Operator wurde eingegeben.

Erneute Implementation in ComputerCasioSci.

◆ compute()

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.

Rückgabe
Element von Klasse Error

◆ createSymTabBase()

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.

◆ extractParam()

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.

Parameter
inzu untersuchende Zeichenkette

◆ handleDisplayAfterBra()

void ComputerBase::handleDisplayAfterBra ( )
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.

◆ handleEmptyNumStack()

void ComputerBase::handleEmptyNumStack ( Number a,
SymOperator soP,
Number b 
)
protectedvirtual

Erfindet einen zweiten Operanden, falls ein Operator mit nur einem berechnet werden soll.

Muss von den abgeleiteten Klassen je nach Taschenrechner ueberladen werden.

Parameter
aerster Operand
soPZeiger auf Operatorsymbol
Rückgabewerte
berfundener zweiter Operator

Erneute Implementation in ComputerCasioSci und ComputerTiSci.

◆ handlePercent()

void ComputerBase::handlePercent ( )
virtual

Prozentrechnung des Solar-Rechners:

  • 1: a* b%: a*b/100
  • 2: a/ b%: a*100/b
  • 3: a+ b%: a+a*b/100
  • 4: a- b%: a-a*b/100
  • 5: a% : a
  • 6: a*% : a*a/100 : wie oben mit b = a
  • 7: a/% : 100/a
  • 8: a+% : 0
  • 9: a-% : 0

Erneute Implementation in ComputerCasioSci, ComputerSci und ComputerTiSci.

◆ initMembers()

void ComputerBase::initMembers ( bool  clrMem = true)

Initialisiert die Members von ComputerBase.

Aus Konstruktor ausgelagert, weil auch von AcInit::process() aufgerufen.

Parameter
clrMemwenn true, wird der Memory-Speicher geloescht

◆ initStacks()

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.

◆ isSym()

bool ComputerBase::isSym ( const string &  sym)

Prueft, ob Symbol sym in der Symboltabelle ist, und gibt true oder false zurueck.

Parameter
symzu untersuchende Zeichenkette
Rückgabe
true, wenn das Symbol in der Symboltabelle gefunden wurde

◆ makeCompBaseInfoStr()

string ComputerBase::makeCompBaseInfoStr ( )

Erzeugt fuers Debugging String mit den wichtigen Member-Variablen.

Rückgabe
String mit den wichtigen Member-Variablen

◆ popNumDepOnLastSymBase()

bool ComputerBase::popNumDepOnLastSymBase ( )
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.

Rückgabe
true, wenn wirklich was gepopped wurde

◆ popStacks()

void ComputerBase::popStacks ( )

Holt die letzten Stacks von den Stack-Listen.

Wird benoetigt, wenn die Klammerebene erniedrigt wird.

◆ pushNewStacks()

void ComputerBase::pushNewStacks ( )

Wirft neue Stacks auf die Stack-Listen.

Wird benoetigt, wenn die Klammerebene erhoeht wird.

◆ setLastInP()

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.

Parameter
sPZeiger auf das Symbol, das in mLastInP gespeichert wird

◆ setLastOpP()

void ComputerBase::setLastOpP ( SymOperator sP)

Speichert die Zeiger auf die beiden zuletzt eingegebene Operator-Symbole.

Parameter
sPZeiger auf das Symbol, das in mLastInP gespeichert wird

Die Dokumentation für diese Klasse wurde erzeugt aufgrund der Dateien: