|
| 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 | 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 ...
|
|
|
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 ...
|
|
bool | storeMainPrgAndCheckOnRecursionError (bool isSubPrgRunning, const string &in, string &mainRunningPrg) |
| Falls gerade kein Unterprogramm laeuft, wird prophylaktisch das sich abbauende Hauptprogramm immer in den zweiten String mainRunningPrg kopiert. Mehr ...
|
|
|
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
|
|
bool | mIsToInit |
| wird von AcAc::process() auf true gesetzt und nur vom fx-3600P ausgewertet
|
|
Die Klasse implementiert den Computer des Casio fx-3600P.
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:
- Der Benutzer startet ein Programm durch "p1" oder "p2". => Die Funktion AcPrgCtrl::processP1P2() holt zuerst den passenden Programm-String aus dem Speicher, kopiert ihn in die Membervariable mRunningPrg, setzt das Flag mActivePrg von 0 auf die Nummer des aktiven Programms (1 bzw. 2) und ruft execPrg() auf.
- execPrg() holt Symbol fuer Symbol aus dem String mRunningPrg; der String wird dabei abgebaut, so dass immer das naechste Symbol vorne steht.
- Wenn das Symbol "ent" oder "hlt" im Programm auftaucht, wird das Flag mIsEntMode bzw. mIsHltMode gesetzt und execPrg() verlassen. => Die Kontrolle geht damit wieder ganz normal an die Hauptschleife ueber.
- Der Anwender kann den Rechner jetzt ganz normal bedienen, insbesondere kann er im Display eine Eingabe machen. Sobald er die "RUN"-Taste drueckt, ruft PrgCtrlRun::process() wieder execPrg() auf. => Das Programm wird fortgesetzt, und zwar genau an der Stelle, an der es unterbrochen wurde, da der String mRunningPrg nicht veraendert wurde.
- Ein gerade laufendes Programm muss durch Druecken von "AC" abgebrochen werden koennen. Dies geschieht, indem in chkOnPrgBreak() die Funktion qApp->processEvents() aufgerufen wird, die kurz zur Qt-Hauptschleife zurueckkehrt bis alle Events abgearbeitet sind. Wenn "AC" gedrueckt wurde, wird nun wie immer auch die preProcess()-Funktion aufgerufen. Wenn diese das Symbol "ac" findet und gerade ein Programm laeuft (was an mActivePrg festgestellt wird), wird dort das Flag mIsPrgBreak gesetzt. Anschliessend kehrt die Kontrolle hierher zurueck, und das Flag wird abgefragt; falls es gesetzt ist, wird execPrg() verlassen.
Version 1.15: Auf Anwenderwunsch soll es moeglich sein, dass man aus einem Programm das jeweils andere als Unterprogramm aufruft. Das ist kompliziert, weil execPrg() nicht nur von AcPrgCtrl::processP1P2() aufgerufen wird, sondern nach einem ENT oder HLT auch von PrgCtrlRun::process(); der Aufruf durch intgrInputAb() ist dagegen unkritisch. Ziel ist es daher, dass alle noetigen Informationen, um den Vorgang zu steuern, lokal hier in execPrg() ermittelt und gespeichert werden. Das geschieht nun in einigen statischen Variablen, aus denen ersichtlich ist, ob gerade ein Unterprogramm laeuft oder/und ein solches gerade durch ENT oder HLT unterbrochen wurde und bein naechsten Aufruf fortgesetzt werden muss:
- isToContinue wird auf true gesetzt, bevor ein Programm wegen ENT oder HLT unterbrochen wird.
- isSubPrgRunning gibt an, ob gerade ein Unterprogramm laeuft.
- mainRunningPrg ist eine Kopie des im Rahmen der Abarbeitung sich verkuerzenden Hauptprogramms.
- mainActivePrg ist die Nummer (1 oder 2) des Hauptprogramms.
- Rückgabe
- das oberste Element des Number-Stacks.