1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
| double Delta::evalue(DecomBoolean temps_reel, unsigned char& erreur)
{
double valeur;
double result = 0;
valeur= argument->evalue(temps_reel, erreur);
/* on sélectionne les variables concernées */
if (IsRealTime(temps_reel))
traitement_d(ancienne_erreur, ancienne_valeur, valeur, result, erreur);
else
traitement_d(ancienne_erreurdiff, ancienne_valeurdiff, valeur, result, erreur);
return result;
}
void traitement_d(int& une_erreur, double& une_valeur, double& valeur, double& result, unsigned char& erreur)
{
if (erreur == 0)
{
if (une_erreur == 0)
/* si il n'y a pas d'erreur cette fois ci et la fois précédente */
result = valeur - une_valeur;
else
{
/* si le traitement précédent était invalide */
une_erreur= 0;
erreur= 1;
}
une_valeur= valeur;
}
else
une_erreur= 1;
}
void calcule(unsigned char& erreur, TArbre p, double& resultat, double temp, DecomBoolean temps_reel)
{
if (erreur == 0)
{
temp= p->evalue(temps_reel, erreur);
if (erreur == WITHOUT_ERROR)
resultat= resultat + temp;
else
resultat= 0;
}
}
const char *Somme::ClassName()
{return "TSomme";}
double Somme::evalue(DecomBoolean temps_reel, unsigned char& erreur)
{
double resultat;
double temp=0;
int i;
double result = 0;
resultat= 0;
for (i= 0;(i <= (arguments->Count - 1));i++)
calcule(erreur, TArbre(arguments->items(i)), resultat, temp, temps_reel);
if (erreur == WITHOUT_ERROR)
result= resultat;
else
result= 0;
return result;
} |
Partager