00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef _EQU
00024 #define _EQU
00025
00026 #define DEGTORAD 0.01745329252
00027 #define EZERO 0
00028
00029 #include "tree.h"
00030 #include "qlist.h"
00031
00032 struct range
00033 {
00034 double From;
00035 double To;
00036 double Step;
00037 double Accuracy;
00038 };
00039
00040 struct variable
00041 {
00042 char Name[12];
00043 double Value;
00044 };
00045
00046 class Parser;
00047
00048
00049 #ifdef __WATCOMC__
00050 #if __WATCOMC__ < 1100
00051 #ifndef BOOL_DEF
00052 enum bool {false = 0, true = 1};
00053 #define BOOL_DEF
00054 #endif
00055 #endif
00056 #endif
00057
00058 class Equation : public TTree
00059 {
00060 friend class Parser;
00061
00062 public:
00063 Equation();
00064 ~Equation();
00065 double Evaluate();
00066 void Differentiate( Equation *, int, Parser * );
00067 double NumInt( range, int );
00068 double FindRoot( range, int );
00069 double RK4( range, int, int );
00070 void PowerSeries( Equation *, int, int, Parser * );
00071 char *VarText(int);
00072 double VarValue(int);
00073
00074 private:
00075 void RemoveBrackets();
00076 void EvalNode(Node *);
00077 void DiffFromNode(Node *, Node **);
00078 variable *NumToVarPtr(int);
00079 void AddPowerSeriesTerm(int, Node *, double, double, Parser *);
00080
00081 public:
00082 QList<variable> Variables;
00083 char *EquationText;
00084 int DiffVar;
00085 bool Radians;
00086
00087 private:
00088 int brackets;
00089 };
00090
00091 #endif