Comment mettre le résultat d'un calcul dans une mémoire tampon..

Fermé
karoutcho78 Messages postés 6 Date d'inscription dimanche 12 mai 2013 Statut Membre Dernière intervention 8 février 2014 - 12 mai 2013 à 09:33
karoutcho78 Messages postés 6 Date d'inscription dimanche 12 mai 2013 Statut Membre Dernière intervention 8 février 2014 - 13 mai 2013 à 10:02
Bonjour à tous,

J'utilise depuis peu un outil informatique pour la surveillance de paramètres d'une installation industrielle. Certaines données de mesures en entrées (les paramètres) présentent souvent des erreurs, ce qui donnent des pics importants sur les courbes à l'écran et gênent l'interprétation. Je souhaite "écraser" ces pics pour lisser les courbes.

Or l'outil a une possibilité d'introduire un traitement sur les données sortantes, en programmant en CSharp.

Je ne suis pas informaticien et ne connais pas le langage C. J'ai essayé d'apprendre sur le ouaib pour écrire un programme qui calculerait une moyenne glissante. C.à.d., pour un paramètre, le but est de calculer à chaque fois une nouvelle moyenne en utilisant la dernière valeur "A" avec la moyenne précédente (à n-1) mise en "MoyenneTampon", tel que :

Moyenne = (0.6 x MoyenneTampon) + (0.4 x A)

De mémoire, j'ai programmé çà mais çà ne marche pas car je n'arrive apparemment pas à mettre ma moyenne dans la mémoire tampon pour calculer la moyenne lors de l'étape suivante :

--------------------------------------------
Static Double Moyenne, MoyenneTampon ;
Static Bool Initialisation=true ;

Double Fonction
{
if (Initialisation=true) -> là c'est pour démarrer le calcul a la première ligne de la colonne du paramètre vu qu'il n'y a pas encore de moyenne précédente
Moyenne = A.Value ;
MoyenneTampon = Moyenne ;
Initialisation = False ;

then
Moyenne = (0.6 x MoyenneTampon) + ( 0.4 x A.Value) ;
MoyenneTampon = Moyenne ; -> là c'est pour pouvoir utiliser cette moyenne dans le calcul suivant
Initialisation = False ;

return moyenne ;
}
---------------------------------------------

Je me doute bien que c'est possible de stocker la Moyenne dans MoyenneTampon pour l'utiliser dans le calcul suivant mais je n'ai pas trouvé .....
J'espère que ma question est claire et mon explication pas trop confuse ?!?!
Merci d'éclairer ma lanterne de néophyte.

4 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836
12 mai 2013 à 13:45
Bonjour,

Avant de réponse, j'ai une question.
Vous parlez de Csharp et de C. Ce sont deux langages différents.
Lequel devez-vous utiliser ?
1
karoutcho78 Messages postés 6 Date d'inscription dimanche 12 mai 2013 Statut Membre Dernière intervention 8 février 2014
12 mai 2013 à 20:36
Bonsoir,

J'utilise CSharp. On m'a dit que c'était proche du C (voir C++) que je ne connais pas non plus.
Comme je n'ai pas trouvé de forum CSharp, je me suis permis de poster sur celui-ci.
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836
Modifié par fiddy le 12/05/2013 à 20:45
Euh, non cela ne ressemble pas du tout au C...
Sinon, le forum Csharp existe bien. Il s'agit de C# (sharp = # en anglais). Je redirige donc le post.
0
karoutcho78 Messages postés 6 Date d'inscription dimanche 12 mai 2013 Statut Membre Dernière intervention 8 février 2014
12 mai 2013 à 23:34
Merci !!... j'ai encore appris qq choses... je fais des progrès en codage ;o))
0
tsri_badr_esgi Messages postés 524 Date d'inscription samedi 21 mars 2009 Statut Membre Dernière intervention 26 mai 2014 9
12 mai 2013 à 21:08
personnellement je comprend pas bien ce que tu veut faire mais je comprend que tu veut stocker une variable pour l'utiliser une autre fois .
d'ou vient cette A.Value?

ce que je remarque est que tu met Initialisation =false .alors s'il n'y a pas queqlque chose qui la met en true en dehors de tes methodes ci-dessus le programme ne rentra plus dans les methodes car Initialisation =false et ton programme entre ces methode seulement si Initialisation =true.

plus de code et explication aide a bien comprendre ton prgramme.
0
karoutcho78 Messages postés 6 Date d'inscription dimanche 12 mai 2013 Statut Membre Dernière intervention 8 février 2014
12 mai 2013 à 23:30
Mon but est de calculer une moyenne glissante sur une série de données. Pour expliquer, je déroule ce que devrait faire mon programme sur une série de données imaginaires qui apparaissent dans un tableau et qui sont :
10, 12, 13, 9, 11,10 ,8
A chaque pas du programme j'affiche la Moyenne en résultat :
"return Moyenne"

1 - 1er pas du programme, la première donnée (A.Value) apparait et elle est seule => pas possible de calculer une moyenne avec la MoyenneTampon qui est vide donc :
"Moyenne=A.Value" =10
Je veux coller cette valeur dans la mémoire tampon pour l'utiliser dans le calcul de la moyenne suivante :
"MoyenneTampon=Moyenne"=10
Le premier pas du programme est passé car j'aurai au moins 2 valeurs pour calculer une moyenne avec la valeur suivante qui est 12 donc je passe
"Initialisation = false"
pour ne plus repasser par cette étape.

2 - avec la nouvelle valeur de A.Value qui est 12, je peux calculer une moyenne (60% de la moyenne précédente + 40% de la dernière valeur) qui donne :
"Moyenne = (0.6 x 10) + (0.4 x 12)" = 10.8
Je colle le résultat dans la mémoire tampon
"MoyenneTampon = Moyenne"=10.8

3 - pas suivant du programme avec la nouvelle valeur de A qui est 13
"Moyenne = (0.6 x 10.8) + (0.4 x 13)" = 11.68
Je stocke le résultat pour le calcul suivant
"MoyenneTampon=Moyenne"=11.68

4 - pas suivant avec la nouvelle valeur de A.Value = 9
"Moyenne = (0.6 x 11.68) + (0.4 x 9)" = 10,608
Sauvegarde de la valeur pour le calcul suivant :
"MoyenneTampon=Moyenne"=10,608

5 - ""Moyenne = (0.6 x 10.608) + (0.4 x 11)" = 10,765
"MoyenneTampon=Moyenne"=10,765

6 - et ainsi de suite..

Il faut :
- que j'initialise le programme lors de la première étape car je n'ai qu'1 valeur,
- puis que je stocke à chaque fois ma moyenne glissante pour l'utiliser dans le calcul suivant

On appèle çà une moyenne glissante pondérée.

J'espère que j'ai pas été trop long et surtout claire dans mes explications...
0
tsri_badr_esgi Messages postés 524 Date d'inscription samedi 21 mars 2009 Statut Membre Dernière intervention 26 mai 2014 9
13 mai 2013 à 00:40
classiquement si j'ai un tableau comme ça :

double[] tableau = { 10, 12, 13, 9, 11, 10, 8 };
et
double Moyenne, MoyenneTampon;

supposant qui j'ai une bouton et une textbox ,quand je clique sur le bouton je veut que la texbtox m'afficher le résultat du premier calculpuis écrire "---" ,puis la deuxième calcul puis écrire "---" et ainsi de suit jusqu'au la dernier valeur dans mon tableau.(tous ça sans calculer la premier qui est 10)

alors je veut le résultat final sera quelque chose comme ça

[ -- 10,8 -- 11,68 -- 10,608 -- 10,7648 -- 10,45888 -- 9,475328]

dans l'événement click de ma bouton j écrit ce code:

 private void button1_Click(object sender, EventArgs e)
       {
          
           Moyenne = tableau[0];
           for (int i = 1 ; i <tableau.Length; i++)
           {
               
               Moyenne = (0.6*Moyenne)+(0.4*tableau[i]);
               textBox1.Text = textBox1.Text + " -- " + Moyenne;
             
              

               
           }
           
       }



notez ici que tous les calcule sans fait successivement ,ce que donne le résultat voulu.
notez aussi que dans la loop for j'ai commencer pas i=1 et non par i=0 pour ne compter pas la premier (qui est 10),a la place je l'ai conserver en dehors de la loop.

je crois que ce n'est pas le code que tu veut mais c'est juste une idée ,tu n'est pas obligé d'initialiser "Initialisation ".
si je comprend d'ou vient les donnée et s'il y a quelque chose que t'oblige a faire l'Initialisation ,et si les calcul doivent commencer en fonction des conditions ou juste l'un a la suite de l'autre ,Maybe je peut faire mieux que ce code ci-dessus.


Happy Programming
0
karoutcho78 Messages postés 6 Date d'inscription dimanche 12 mai 2013 Statut Membre Dernière intervention 8 février 2014
13 mai 2013 à 10:02
Hello !!

Mon problème est que le tableau n'existe pas car les données arrivent en temps réel (real-time data).
Le programme fonctionne en permanence et affiche le résultat "Moyenne" à chaque fois qu'une nouvelle donnée arrive.
Les données en entrée et en sortie (input and output datas) sont ensuite stockées dans un tableau pour la possibilité d'être ré-utilisées (re-use) plus tard (playback).

Je vais essayer de voir ce que je peux faire avec votre idée ..

Thanks for help
See you later
0