Problème de calcul de Delta

Problème de calcul de Delta - C++ - Programmation

Marsh Posté le 19-05-2009 à 18:06:24    

Bonjour,

 

J'ai un bug que je n'arrive pas à corriger car ce n'est pas mon code à la base.

 

Voilà le problème :

 

J'ai un opérateur Delta qui calcule la différence entre 2 valeurs consécutives d'un paramètre FRAME qui incrémente de 1 à chaque fois.
Le problème est que si je calcule le résultat des 2 paramètres a et b :
A = (+ (DELTA FRAME) (DELTA FRAME)(DELTA FRAME))
B = (DELTA (+ FRAME FRAME FRAME))

 

Le problème est que lorsque je lance mon programme :

 

J'obtient :
FRAME=0 ; a=X ; b=X    puis
FRAME=1 ; a=X ; b=3    puis
FRAME=2 ; a=X ; b=3    puis
FRAME=3 ; a=3 ; b=3  

 

La question est : Pourquoi l'écriture du paramètre A a besoin de 3 incrémentations du FRAME pour donner un résultat alors que le paramètre B non ?

 


Voilà le code en question:

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

Merci bien d'avance pour toute l'aide que vous pouvez m'apporter

 


Édité par Elmoricq : ajout des balises code


Message édité par Elmoricq le 20-05-2009 à 08:12:14
Reply

Marsh Posté le 19-05-2009 à 18:06:24   

Reply

Marsh Posté le 19-05-2009 à 18:44:48    

tu peux utiliser les balises cpp pour que ton code soit coloré, ce sera plus sympa pour la relecture


Message édité par theshockwave le 19-05-2009 à 18:44:58

---------------
last.fm
Reply

Marsh Posté le 20-05-2009 à 08:21:13    

[:psychokwak]

 

Là comme ça, ça ne semble avoir ni queue ni tête. Ça fait plein de trucs, on sait pas trop quoi, avec un million de variables dont on ne sait rien (et une gestion d'erreur semble-t-il très TDWTF-ienne). Et la fonction qui imprime les lignes que tu indiques, qui aurait pu nous aider, est absente du code posté.

 

Bref : je passe.

 

edit : c'est du C++Builder ?


Message édité par Elmoricq le 20-05-2009 à 08:22:37
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed