Almetare
1.14
Alle meine Taschenrechner - Eine C++-Bibliothek zur Entwicklung von Taschenrechnern
|
Die Klasse implementiert den Computer des Casio fx-3600P. Mehr ...
#include <calc_fx3600p.h>
Öffentliche Methoden | |
ComputerFx3600p (CalculatorFx3600p *cP) | |
Konstruktor fuegt der Symboltabelle spezielle fx-3600P-Symbole hinzu. | |
bool | map (string &sym) |
Mapped das uebergebene Symbol gegebenenfalls auf ein anderes Symbol um. Mehr ... | |
bool | getIsIdxMode () |
bool | getIsLrnMode () |
bool | getIsEntMode () |
bool | getIsHltMode () |
int | getActivePrg () |
int | getIsPrgBreak () |
int | getIdxStep () |
string | getRunningPrg () |
string | getPrgMem (int i) |
string | getPrgMemOrg (int i) |
void | setIsIdxMode (bool isOn) |
void | setIsLrnMode (bool isOn) |
void | setIsEntMode (bool isOn) |
void | setIsHltMode (bool isOn) |
void | setActivePrg (int prg) |
void | setIsPrgBreak (bool b) |
void | setIdxStep (int i) |
void | setPrgMem (int i, string str) |
void | setPrgMemOrg (int i, string str) |
void | setRunningPrg (string prg) |
void | resetRunningPrg () |
bool | isPrgRunning () |
void | precedeRunningPrg (const string &pre) |
Number | execPrg () |
Fuehrt das Programm actPrg aus. Mehr ... | |
void | intgrInputAb () |
Eingabe der Integrationsgrenzen. Mehr ... | |
void | integrate () |
Funktion zur Berechnung von Bestimmten Integralen. Mehr ... | |
void | aftProcess2 (string &in) |
Fuehrt Aktionen nach Prozessierung des Symbols aus. Mehr ... | |
![]() | |
ComputerCasioSci () | |
Konstruktor fuegt die neuen Symbole zur Symboltabelle hinzu. | |
bool | getIsMode () const |
bool | getIsKinInput () const |
bool | getIsKoutInput () const |
bool | getIsXkInput () const |
Number | getKmem (int idx) const |
CalcMode | getCalcMode () const |
Number | getXdata () const |
string | getSdDat () const |
string | getLrDat () const |
void | setKmem (const int idx, const Number &num) |
void | setIsMode (bool isOn=false) |
void | setIsKinInput (bool isOn) |
void | setIsKoutInput (bool isOn) |
void | setIsXkInput (bool isOn) |
void | setCalcMode (CalcMode cm) |
void | setXdata (Number x) |
void | setSdDat (const string &dat) |
void | setLrDat (const string &dat) |
Number | calcA () const |
Berechnet aus den K-Speichern den y-Achsenabschnitt A bei Regressionsrechnung. Mehr ... | |
Number | calcB () const |
Berechnet Regressionskoeffizient B aus den K-Speichern. Mehr ... | |
Number | calcR () const |
Berechnet Korrelationskoeffizient r aus den K-Speichern. Mehr ... | |
void | handleEmptyNumStack (Number &a, SymOperator *soP, Number &b) |
Erfindet einen zweiten Operanden, falls ein Operator mit nur einem berechnet werden soll. Mehr ... | |
void | handleDisplayAfterBra () |
Siehe Kommentar ComputerBase::handleDisplayAfterBra(). Mehr ... | |
SymOperator * | checkConstMode (SymOperator *opP) |
Untersucht, ob in den Konstanten-Modus gewechselt werden muss oder dieser abgeschaltet werden muss. Mehr ... | |
void | handlePercent () |
Prozessiert das Prozentzeichen. Mehr ... | |
void | popNumDepOnLastSym () |
Siehe gleichartige Funktion in ComputerBase. | |
bool | popNumDepOnLastSymCasio () |
Siehe gleichartige Funktion in ComputerBase. | |
void | aftProcess (string &in) |
Fuehrt Aktionen nach Prozessierung des Symbols in aus. Mehr ... | |
string | makeCompCasioSciInfoStr () |
Erzeugt fuers Debugging String mit den wichtigen Member-Variablen. Mehr ... | |
virtual string | makeCompInfoStr () |
![]() | |
ComputerSci () | |
Der Konstruktor fuegt der Symboltabelle die zusaetzlichen Symbole fuer wissenschaftliche Taschenrechner hinzu. Mehr ... | |
bool | getIsInv () const |
bool | getIsHyp () const |
bool | getIsFixInput () const |
bool | getIsSciInput () const |
AngMode | getAngMode () const |
void | setIsInv (bool isOn) |
void | setIsHyp (bool isOn) |
void | setIsFixInput (bool isOn) |
void | setIsSciInput (bool isOn) |
void | setAngMode (AngMode mode=DEG) |
string | makeCompSciInfoStr () |
Erzeugt String mit den wichtigen Member-Variablen. Mehr ... | |
![]() | |
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 | 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 ... | |
Private Methoden | |
void | addCasioFx3600SymsToSymTab () |
Fuegt der Symboltabelle spezielle fx-3600P-Symbole hinzu. | |
bool | preProcess (string &in) |
Fuehrt Pre-Processing des Symbols durch. Mehr ... | |
bool | checkOnPrgBreak () |
Funktion dient zum Abbrechen eines laufenden Programmes. Mehr ... | |
void | addPrgStep (const string &in) |
Speichert im Programmiermodus den naechsten Programmschritt. Mehr ... | |
double | trapzd (double a, double b, int n) |
Berechnet die n-te Verfeinerungsstufe der Erweiterten Trapezregel als Naeherungsformel der Integration. Mehr ... | |
double | qsimp (double a, double b, int &n, double &dif) |
Berechnet das Integral der Funktion funcP in den Grenzen a bis b nach der Simpson-Naeherung. Mehr ... | |
double | f (double x) |
Ermittelt den Funktionswert y der Funktion im aktuellen Programmspeicher an der Stelle x. Mehr ... | |
Private Attribute | |
CalculatorFx3600p * | mCalcFx3600pP |
Zeiger auf den zugehoerigen Calculator. | |
bool | mIsForceSciTypeB |
true, wenn SCI erst bei Zahlen kleiner 1e-7 | |
bool | mIsIdxMode |
Rechner ist im Intagrationsmodus. | |
bool | mIsLrnMode |
Rechner ist im Programmiermodus. | |
bool | mIsEntMode |
Rechner ist im "Enter"-Modus. | |
bool | mIsHltMode |
Programm wurde durch "HLT"-Befehl unterbrochen. | |
string | mPrgMem [2] |
Speicher fuer zwei Programme. | |
string | mPrgMemOrg [2] |
die beiden aktuellen Programme als Volltext | |
int | mActivePrg |
gerade aktives Programm | |
string | mRunningPrg |
gerade ablaufendes Programm | |
bool | mIsPrgBreak |
Flag, ob laufendes Prg. durch "AC" unterbr. wurde. | |
int | mIdxStep |
aktueller Zustand des Integrationsprozesses | |
DspMode | mDspMode |
aktueller Display-Mode, zum Ruecksetzen nach Integration | |
int | mDigits |
aktuelle Display-Genauigkeit, zum Ruecksetzen nach Integration | |
Weitere Geerbte Elemente | |
![]() | |
bool | mapCasioSci (string &sym) |
Mapped einige Symbole auf andere Symbole um. Mehr ... | |
bool | mapKinKoutInputCasioSci (string &sym) |
Fuehrt spezielles Mapping von Ziffern oder "+", "-", "*", "/" aus, falls zuvor "Kin" oder "Kout" eingegeben wurde. Mehr ... | |
![]() | |
bool | mapSci (string &sym) |
Prueft verschiedene Shift-Ebenen und versucht, das Symbol sym entsprechend anzuupassen. Mehr ... | |
bool | mapInvSci (string &sym) |
Ordnet einem Symbol dasjenige Symbol zu, das ihm im Invers-Modus entspricht. Mehr ... | |
bool | mapHypSci (string &sym) |
Ordnet einem Symbol dasjenige Symbol zu, das ihm im Hyperbolicus-Modus entspricht (sin -> sinh, cos -> cosh etc.). Mehr ... | |
bool | mapFixSciInputSci (string &sym) |
Macht aus einer Ziffer ein "fix"- oder "sci"-Symbol, wenn zuvor "fix" oder "sci" eingegeben wurde. Mehr ... | |
![]() | |
bool | popNumDepOnLastSymBase () |
Holt die vorherige Eingabe vom Zahlenstack, wenn es kein Operator war. Mehr ... | |
![]() | |
DisplayCasioSci * | mDisplayCasioP |
Zeiger auf das zugehoerige Display. | |
bool | mIsMode |
Mode-Modus. | |
bool | mIsKinInput |
Kin wurde gedrueckt. | |
bool | mIsKoutInput |
Kin wurde gedrueckt. | |
bool | mIsXkInput |
X<->K wurde gedrueckt. | |
Number | mKmem [6] |
Konstantenspeicher K1 bis K6. | |
CalcMode | mCalcMode |
Calculation-Modus CMP, SD, LR. | |
Number | mXdata |
temporaerer Speicher fuer Regressionsrechnung | |
string | mSdDat |
zuletzt im Editor eingegebene SD-Daten | |
string | mLrDat |
dito LR-Daten | |
![]() | |
bool | mIsInv |
Invers-Modus. | |
bool | mIsHyp |
Hyperbolicus. | |
bool | mIsFixInput |
fix wurde gedrueckt, jetzt wird auf Ziffer gewartet | |
bool | mIsSciInput |
sci wurde gedrueckt, jetzt wird auf Ziffer gewartet | |
AngMode | mAngMode |
Modus RAD, DEG, GRA. | |
![]() | |
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 | |
Die Klasse implementiert den Computer des Casio fx-3600P.
|
private |
Speichert im Programmiermodus den naechsten Programmschritt.
Dabei ist zu beruecksichtigen, dass nicht alle Eingaben gespeichert werden duerfen. Z.B. wird "inv" nicht gespeichert, weil das Symbol ohnehin durch das entsprechende "ge-inv-te" ersetzt wird und dieses gespeichert wird. Alle Symbole, die nicht gespeichert werden duerfen, sind im String notToStore aufgezaehlt. Ein Sonderfall ist auch bei der Eingabe von Sexagesimalzahlen zu beachten: Wenn die Zahl eine Eingabe ist (also nach der "ENT"-Taste eingegeben wird), duerfen die bis zu drei "isxg"-Symbole nicht gespeichert werden, vielmehr muss die Sexagesimalzahl als eine einzige Eingabe betrachtet werden. Dabei ist ausreichend, nur die letzte Eingabezahl aufzuzeichnen, da diese bei der Ausfuehrung des Programms ohnehin durch den aktuellen Eingabewert ersetzt wird.
in | Symbol der aktuellen Taste |
|
virtual |
Fuehrt Aktionen nach Prozessierung des Symbols aus.
Im Unterschied zu aftProcess wird diese Funktion von Calculator::process() aufgerufen, NACHDEM das Display aufgefrischt wurde. Noetig bei der Integration, um die Anzeige wieder von der SCI-Notation, in der die Ergebnisse zunaechst ausgegeben werden, wieder zurueckzustellen.
in | Symbol der aktuellen Taste; wird hier zunaechst nicht benoetigt, aber vielleicht spaeter mal |
Erneute Implementation von ComputerBase.
|
private |
Funktion dient zum Abbrechen eines laufenden Programmes.
Sie wird bei jedem Schleifendurchlauf von execPrg() aufgerufen. Einzelheiten siehe dort. Als Konsolenanwendung wird die Standardeingabe abgefragt (nur Linux).
Number ComputerFx3600p::execPrg | ( | ) |
Fuehrt das Programm actPrg aus.
Ein Programm besteht aus einem String, in dem alle aufgezeichneten Symbole durch ein Leerzeichen getrennt aufgeschrieben sind. Die Symbole werden bei der Programmausfuehrung aus dem String geholt und in einer Schleife der normalen process()-Funktion des Calculators uebergeben, so wie es immer geschieht. Bloed: Die process()-Funktion gehoert dem Calculator, dieser benutzt eigentlich den Computer; hier muss jetzt der Computer den Calculator benutzen, was eigentlich so nicht vorgesehen war. Diese gegenseitige Abhaengigkeit ist unschoen, aber scheint mir immer noch besser als im Computer die process()-Funktion zu duplizieren.
Ein Problem sind die Symbole "ent" und "hlt". Bei diesen muss naemlich der Programmfluss unterbrochen werden, damit der Benutzer eine Eingabe machen kann. Um auch hier die ganz normale Algorithmik beim Eingeben von Zahlen benutzen zu koennen, wird das Programm tatsaechlich voellig beendet und die Kontrolle kehrt zur Hauptereignisschleife zurueck. Wenn der User seine Eingabe gemacht hat, drueckt er wieder die "RUN"-Taste und das Programm wird fortgesetzt, indem es erneut gestartet wird.
Das funktioniert nun so:
|
private |
Ermittelt den Funktionswert y der Funktion im aktuellen Programmspeicher an der Stelle x.
x | x-Wert, an dem die Funktion berechnet wird |
void ComputerFx3600p::integrate | ( | ) |
Funktion zur Berechnung von Bestimmten Integralen.
Zur Berechnung werden die normalen Programmspeicher benutzt. Daher muss hier ein etwas kompliziertes Hin- und Herspringen erfolgen, das vom Flag mIdxStep gesteuert wird. Dieser Zaehler wird immer inkrementiert, wenn ein Schritt beendet wurde.
void ComputerFx3600p::intgrInputAb | ( | ) |
Eingabe der Integrationsgrenzen.
Es wird temporaer ein Programm angelegt und ausgefuehrt, in dem man zwei Zahlen angeben kann, die in K1 und K2 abgelegt werden. Alle anderen Speicher werden geloescht. Siehe auch integrate().
|
virtual |
Mapped das uebergebene Symbol gegebenenfalls auf ein anderes Symbol um.
Das ist z.B. noetig, wenn der Computer gerade im Invers-Modus ist.
Erneute Implementation von ComputerSci.
|
privatevirtual |
Fuehrt Pre-Processing des Symbols durch.
Falls der Programmiermodus aktiviert ist, werden alle Eingaben in mPrgMem[] gespeichert.
in | zu mappendes Symbol |
Erneute Implementation von ComputerSci.
|
private |
Berechnet das Integral der Funktion funcP in den Grenzen a bis b nach der Simpson-Naeherung.
Aus: Press u.a.: Numerical Recipes in C, S. 139
a | untere Grenze des Integrals |
b | obere Grenze des Integrals |
j | Verfeinerungsstufe, die noetig war |
dif | Differenz zwischen Endergebnis und der vorherigen Verfeinerung |
|
private |
Berechnet die n-te Verfeinerungsstufe der Erweiterten Trapezregel als Naeherungsformel der Integration.
Aus: Press u.a.: Numerical Recipes in C, S. 137
a | untere Grenze des Integrals |
b | obere Grenze des Integrals |
n | Verfeinerungsstufe |