Problème d'itération..

Signaler
Messages postés
2
Date d'inscription
lundi 6 décembre 2010
Statut
Membre
Dernière intervention
6 décembre 2010
-
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
-
bonjour a tout le monde, je suis débutant en vb net.
sous visual basic 2005 --> smart device --> pocket pc
et je lutte sur un problème de moyenne
j'ai un timer réglable qui a chaque tick enregistre un entier dans un tableau de 10 cases.
je dois effectuer une moyenne glissante de ces valeurs entières. le code que j'ai fait ne le fais qu'une seule fois la moyenne et je ne trouve pas pourquoi
ci joint mon code
regardez au niveau de la méthode Timer1_tick et Moyenne.

en vous remerciant d'avance.
Cdlt

#################################
Public Class Form1

Dim random_temp As Integer
Dim random_pression As Integer
Dim Moy_temp As Double = 0
Dim Moy_Pression As Double = 0
Dim Moyenne_T(9) As Integer
Dim Moyenne_P(9) As Integer
Dim Tot_pression As Integer = 0
Dim somme As Integer = 0
Dim j As Integer = 0


Private Function Rand_Temp()
' Initialize the random-number generator.
Randomize()
' Generate random value between -10 and 30.
Rand_Temp = CInt(Int((30 * Rnd()) + 1))

End Function
Private Function Rand_Pression()
' Initialize the random-number generator.
Randomize()
' Generate random value between 980 and 1050.
Rand_Pression = CInt(Int((70 * Rnd()) + 980))
End Function
Public Sub Moyenne()

Dim i As Integer = 0

For i = 0 To 9
somme = somme + Moyenne_T(i)
Tot_pression = Tot_pression + Moyenne_P(i)
Next
Moy_temp = somme / 10
somme = 0
Moy_Pression = Tot_pression / 10
Tot_pression = 0
Temp_moyenne.Text = Moy_temp.ToString 'affichage T°
pression_moyenne.Text = Moy_Pression.ToString 'affichage P

End Sub

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Timer1.Interval = 1000
reglette.Value = 25
reglette2.Value = 1025

End Sub

Private Sub Label1_ParentChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label_Tinst.ParentChanged, label_Moyenne.ParentChanged, label_Seuil.ParentChanged

End Sub

Private Sub Panel2_GotFocus(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Pression.GotFocus

End Sub

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
random_temp = Rand_Temp()
random_pression = Rand_Pression()
Temp_mesure.Text = random_temp.ToString
pression_mesure.Text = random_pression.ToString
If j < 10 Then
Moyenne_T(j) = random_temp
Moyenne_P(j) = random_pression
j += 1
ElseIf (j > 10) Then
j = 0
End If
Moyenne()
If (random_temp > reglette.Value) Then
MsgBox("Le seuil de T° a été dépassé à" & Date.Now)
ElseIf (random_pression > reglette2.Value) Then
MsgBox("Le seuil de pression a été dépassé à" & Date.Now)
End If
End Sub

Private Sub Timer_Period_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer_Period.SelectedIndexChanged
Timer1.Interval = CType(Timer_Period.SelectedItem, Integer)

End Sub

Private Sub Temp_mesure_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Temp_mesure.TextChanged

End Sub
End Class

#################################

4 réponses

Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
Bonsoir
ne lutte pas trop

le code que j'ai fait ne le fais qu'une seule fois la moyenne et je ne trouve pas pourquoi


tu veux après tous les 10 chiffres la moyenne soit calculée

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        random_temp = Rand_Temp()
        random_pression = Rand_Pression()
        Temp_mesure.Text = random_temp.ToString
        pression_mesure.Text = random_pression.ToString
        If j < 10 Then
            Moyenne_T(j) = random_temp
            Moyenne_P(j) = random_pression
            j += 1
        Else
            Moyenne()
            j = 0
        End If
        If (random_temp > reglette.Value) Then
            MsgBox("Le seuil de T° a été dépassé à" & Date.Now)
        ElseIf (random_pression > reglette2.Value) Then
            MsgBox("Le seuil de pression a été dépassé à" & Date.Now)
        End If
    End Sub


et aussi

' Generate random value between -10 and 30.
Rand_Temp = CInt(Int((30 * Rnd()) + 1))

ça donne un nombre entre 1 et 30 et non -10 :30
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
nombres aléatoires entre -10 et 30
  Rand_Temp = CInt(Int((-41 * Rnd()) + 31))
Messages postés
2
Date d'inscription
lundi 6 décembre 2010
Statut
Membre
Dernière intervention
6 décembre 2010

En fait j'aimerais faire la moyenne glissante de la température et pression
de la manière suivante :
les 10 premiers coup de timer, on ne calcule pas de moyenne
par contre, on remplit un tableau de 10 cases
If j < 10 Then
Moyenne_T(j) = random_temp
Moyenne_P(j) = random_pression
j += 1
Else
j = 0

Au 11ème coup je calcule ma moyenne des dix dernières T° et P et je remplace ensuite le 1er element du tableau (case 0) par la T° instantanée.

For i = 0 To 9
somme = somme + Moyenne_T(i)
Tot_pression = Tot_pression + Moyenne_P(i)
Next
Moy_temp = somme / 10


Au 12 coup, on recalcule la moyenne en tenant compte de la 11éme température inscrite dans le tableau et on stocke la T instantané dans la 2° valeur du tableau (case 1).

etc.... la moyenne doit être faite a chaque entrée de température sur les 10 dernière valeurs....

Dans mon programme, tout se passe bien jusqu'au 11ème coup, après il n'y a plus de calcul de moyenne.
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
après il n'y a plus de calcul de moyenne
la sub moyenne n'est pas executée
met un point d'arret à la ligne
Moyenne()
lance to prog et verifies si ça arrive
continuues pour voir si ça arrive encore une fois