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

Die Klasse implementiert den Computer des Casio fx-3600P. Mehr ...

#include <calc_fx3600p.h>

Klassendiagramm für ComputerFx3600p:
ComputerCasioSci ComputerSci ComputerBase

Ö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 ...
 
- Öffentliche Methoden geerbt von ComputerCasioSci
 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 ...
 
SymOperatorcheckConstMode (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 ()
 
- Öffentliche Methoden geerbt von ComputerSci
 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 ...
 
- Öffentliche Methoden geerbt von ComputerBase
 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 ...
 

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 ...
 
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 ...
 

Private Attribute

CalculatorFx3600pmCalcFx3600pP
 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

- Geschützte Methoden geerbt von ComputerCasioSci
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 ...
 
- Geschützte Methoden geerbt von ComputerSci
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 ...
 
- Geschützte Methoden geerbt von ComputerBase
bool popNumDepOnLastSymBase ()
 Holt die vorherige Eingabe vom Zahlenstack, wenn es kein Operator war. Mehr ...
 
- Geschützte Attribute geerbt von ComputerCasioSci
DisplayCasioScimDisplayCasioP
 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
 
- Geschützte Attribute geerbt von ComputerSci
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.
 
- Geschützte Attribute geerbt von ComputerBase
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
 

Ausführliche Beschreibung

Die Klasse implementiert den Computer des Casio fx-3600P.

Dokumentation der Elementfunktionen

◆ addPrgStep()

void ComputerFx3600p::addPrgStep ( const string &  in)
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.

Parameter
inSymbol der aktuellen Taste

◆ aftProcess2()

void ComputerFx3600p::aftProcess2 ( string &  in)
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.

Parameter
inSymbol der aktuellen Taste; wird hier zunaechst nicht benoetigt, aber vielleicht spaeter mal

Erneute Implementation von ComputerBase.

◆ checkOnPrgBreak()

bool ComputerFx3600p::checkOnPrgBreak ( )
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).

Rückgabe
true, wenn im Konsolenmodus eine Eingabe gemacht wurde, sonst false

◆ execPrg()

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.

◆ f()

double ComputerFx3600p::f ( double  x)
private

Ermittelt den Funktionswert y der Funktion im aktuellen Programmspeicher an der Stelle x.

Parameter
xx-Wert, an dem die Funktion berechnet wird
Rückgabe
Funktionswert an der Stelle x

◆ integrate()

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.

  • Zunaechst wird der Rechner vom Anwender in den Intagrationsmodus geschaltet ("Mode" "1"), das heisst, das Flag mIsIdxMode ist also gesetzt.
  • Anschliessend wird eine der beiden Funktionen P1 oder P2 ausgewaehlt, die zugehoerige process()-Funktion AcPrgCtrl::processP1P2() wird daher aufgerufen. Diese ruft wiederum zur Eingabe der Integrationsgrenzen intgrInputAb() auf.
  • intgrInputAb() erzeugt ein neues Programm und schreibt es in mRunningPrg. Dies besteht aus der Eingabe von zwei Zahlen, die in K1 und K2 gespeichert werden. Bei jeder Eingabe wird dieses Programm wie ueblich unterbrochen und fortgesetzt, sobald die "RUN"-Taste gedrueckt wird. Die zugehoerige process()-Funktion PrgCtrlRun::process() fragt mIdxStep ab, das von intgrInputAb() auf 1 gesetzt wurde, und inkrementiert es. Auch bei der Eingabe der oberen Integrationsgrenze wird mIdxStep inkrementiert, so dass es dann auf 3 steht. Nach dem zweimaligen Inkrementieren ist die Eingabe beendet und PrgCtrlRun::process() ruft intgegrate() auf.
  • Zuvor kann durch die Eingabe von 'Zahl' "INV" "RUN" noch eine Streifenanzahl festegelegt werden. In diesem Fall wird das Symbol "run" von preProcess() auf das Symbol "strps" gemapped und AcStrps::process() schreibt die Streifenanzahl in K3.
  • integrate() hat nun alle Informationen, um die Integration durchzufuehren: Die Grenzen des Integrals stehen in K1 und K2, falls mit 'Zahl' "INV" "RUN" eine Streifenzahl vorgegeben wurde, steht diese in K3 (sonst dort 0). Die Integration wird jetzt mit der Simpson-Naeherung durchgefuehrt. Fuer jeden Funktionswert wird die Funktion f() aufgerufen. Sie schreibt das aktuelle Programm jedesmal in mRunningPrg und ruft execPrg() auf. Dies darf in diesem Fall die Nummer des aktuellen Programms in mActivePrg nicht wie sonst ueblich nach Abarbeitung auf 0 setzen (mIdxStep != 0 wird abgefragt).
  • Schliesslich ist das Integral berechnet. Jetzt hat der Casio fx-3600P noch die Eigenheit, das Ergebnis zunaechst im wissenschaftlichen Format mit sechs Stellen zurueckzugeben, wobei aber der Modus "SCI" nicht aktiv ist; wenn man "=" drueckt, wird die Darstellung umgewandelt. Dieser Effekt wird hier erzielt, indem integrate() vor Ausgabe des Ergebnisses in den SCI-Modus schaltet. Der muss nun aber sofort wieder abgeschaltet (bzw. auf den alten Modus zurueckgesetzt) werden. Das macht die neue Funktion aftProcess2(), die von CalculatorBase::process() nach der Ausgabe ins Display aufgerufen wird. Da diese Funktion aber natuerlich nach jedem prozessierten Symbol aufgerufen wird, aber nur nach Ende der Integration aktiv werden soll, wird wieder die Steuervariable mIdxStep abgefragt.

◆ intgrInputAb()

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().

◆ map()

bool ComputerFx3600p::map ( string &  in)
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.

◆ preProcess()

bool ComputerFx3600p::preProcess ( string &  in)
privatevirtual

Fuehrt Pre-Processing des Symbols durch.

Falls der Programmiermodus aktiviert ist, werden alle Eingaben in mPrgMem[] gespeichert.

Rückgabewerte
inzu mappendes Symbol

Erneute Implementation von ComputerSci.

◆ qsimp()

double ComputerFx3600p::qsimp ( double  a,
double  b,
int &  j,
double &  dif 
)
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

Parameter
auntere Grenze des Integrals
bobere Grenze des Integrals
Rückgabewerte
jVerfeinerungsstufe, die noetig war
difDifferenz zwischen Endergebnis und der vorherigen Verfeinerung
Rückgabe
Integral

◆ storeMainPrgAndCheckOnRecursionError()

bool ComputerFx3600p::storeMainPrgAndCheckOnRecursionError ( bool  isSubPrgRunning,
const string &  in,
string &  mainRunningPrg 
)
private

Falls gerade kein Unterprogramm laeuft, wird prophylaktisch das sich abbauende Hauptprogramm immer in den zweiten String mainRunningPrg kopiert.

Falls dann irgendwann ein Unterprogramm aufgerufen wird, kann man nach dessen Abarbeitung das Hauptprogramm an der aktuellen Stelle wieder fortsetzen. Ausserdem wird geprueft, ob in einem laufenden Programm noch einmal dasselbe Programm aufgerufen wird. Falls das der Fall ist, muss der Rechner in den Error-State versetzt werden. Die beiden Dinge haben eigentlich nichts miteinander zu tun, muessen aber beide nach jedem getNextSym() gemacht werden; daher in einem Unterprogramm zusammengefasst.

Parameter
isSubPrgRunningtrue, wenn gerade ein Unterprogramm laeuft
stringdas letzte gelesene Symbol aus dem laufenden Programm
Rückgabewerte
mainRunningPrgdie Kopie des abgearbeiteten Hauptprogramms
Rückgabe
true, wenn dasselbe Programm noch einmal aufgerufen werden soll, sonst false

◆ trapzd()

double ComputerFx3600p::trapzd ( double  a,
double  b,
int  n 
)
private

Berechnet die n-te Verfeinerungsstufe der Erweiterten Trapezregel als Naeherungsformel der Integration.

Aus: Press u.a.: Numerical Recipes in C, S. 137

Parameter
auntere Grenze des Integrals
bobere Grenze des Integrals
nVerfeinerungsstufe
Rückgabe
Integral

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