Code :
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; }
|