Calcul moyenne glissée à partir d'un tableau de données

Fran974 2 Messages postés dimanche 26 juin 2016Date d'inscription 26 juin 2016 Dernière intervention - 26 juin 2016 à 19:15 - Dernière réponse : Whismeril 11516 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 19 mai 2018 Dernière intervention
- 28 juin 2016 à 10:07
Bonjour,
Je suis un grand novice en programmation et VB et je cherche de l'aide !
Je dispose d'un _tableau(6000, 2) As Decimal et je voudrais calculer la moyenne glissée (toutes les 10 valeurs) et en retenir le quotient (moyenne des données de la première variable / moyenne des données de la deuxième variable) le plus grand.
Actuellement mon code ne donne que la première moyenne, la répétition de la boucle ne semble pas marcher ! Des conseils s'il vous plait ? :)

 Dim i As Integer = 0
Dim moy_1 As Decimal = 0 ' moyenne de la première variable du tableau précédemment définie
Dim moy_2 As Decimal = 0 ' moyenne de la deuxième variable du tableau
Dim valeur As Decimal = 0
Dim valeur_max As Decimal = 0

For i = 0 To 6000 Step 10
moy_1 = moy_1 + _tableau(i, 1)
moy_2 = moy_2 + _tableau(i, 2)
valeur = (moy_1 / 10) / (moy_2/ 10)
If valeur < valeur_max Then
valeur_max = valeur
End If
Continue For
Next


Code mis entre balises (veux-tu bien y penser dorénavant ?).
Afficher la suite 

Votre réponse

19 réponses

Whismeril 11516 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 19 mai 2018 Dernière intervention - 26 juin 2016 à 20:18
0
Utile
Bonjour

quel VB?
  • VBA?
  • VBS?
  • VB6?
  • VB.Net?

Commenter la réponse de Whismeril
Fran974 2 Messages postés dimanche 26 juin 2016Date d'inscription 26 juin 2016 Dernière intervention - 26 juin 2016 à 20:39
0
Utile
VB Express
Et pardon , c'est If valeur > valeur_max Then
Commenter la réponse de Fran974
Whismeril 11516 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 19 mai 2018 Dernière intervention - 26 juin 2016 à 21:03
0
Utile
VB.Net donc.
Je fais déplacer dans le bon forum
Commenter la réponse de Whismeril
Whismeril 11516 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 19 mai 2018 Dernière intervention - Modifié par Whismeril le 26/06/2016 à 21:09
0
Utile
Ce que je comprends de ton texte n'est pas cohérent avec ton code.

Ai je bien compris:
tu veux faire la moyenne des 10 premiers enregistrements (0 à 9), sur tes 2 dimensions, diviser les résultats puis stocker quotient quelque part, ensuite faire de même avec les enregistrement de 10 à 19, etc...
Et à la fin retourner le plus grand quotient c'est bien ça?

Quand j'étais petit, la mer Morte n'était que malade.
George Burns
Commenter la réponse de Whismeril
vb95 1563 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 17 mai 2018 Dernière intervention - 27 juin 2016 à 01:34
0
Utile
Bonsoir
J'ai compris la même chose que Whismeril
De plus en VB Net les tableaux commencent à l'indice 0
donc le boucle serait plutôt
For i = 0 to 5999 step 10


Le code donnerait à mon avis si j'ai bien compris

Dim valeur As Decimal
Dim valeurmax As Decimal = 0
Dim moy1 As Decimal
Dim moy2 As Decimal
Dim index as Integer
For i = 0 To 599 ' 600 boucles
valeur = 0
moy1 = 0
moy2 = 0
Index = i * 10
For j = 0 To 9 ' à faire 10 fois
moy1 = moy1 + tableau(index + j, 1)
moy2 = moy2 + tableau(index + j, 2)
Next j
valeur = (moy1 / 10) / (moy2 / 10)
If valeur > valeur_max Then valeur_max = valeur
Next i


remarque
 valeur = (moy1 / 10) / (moy2 / 10)

peut se simplifier par
 valeur = moy1  / moy2 


(100/10)/(50/10) est équivalent à 100/50
10 / 5 est égal à 100 / 50
Whismeril 11516 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 19 mai 2018 Dernière intervention > vb95 1563 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 17 mai 2018 Dernière intervention - 27 juin 2016 à 15:24
La structure est à la classe ce que le tableau est à la collection.... ;-)
vb95 1563 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 17 mai 2018 Dernière intervention > Whismeril 11516 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 19 mai 2018 Dernière intervention - 27 juin 2016 à 15:34
Donc mieux vaut une classe qu'une structure ainsi qu'une collection plutôt qu'un tableau
Plus facile pour moi à visualiser le mécanisme dans ma tête qu'à me servir de ce même mécanisme dans le code surtout au niveau classe et structure
Pour les collections je commence à pas trop mal les maitriser
Merci pour toutes ces infos Whis
Whismeril 11516 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 19 mai 2018 Dernière intervention > vb95 1563 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 17 mai 2018 Dernière intervention - 27 juin 2016 à 22:40
Un petit exemple vite fait.

D'abord la classe
	Public Class Division
		Public Sub New(ByVal LeNumerateur As Double, ByVal LeDenominateur As Double) 'constructeur avec les deux nombres à diviser
			Numerateur = LeNumerateur
			Denominateur = LeDenominateur
		End Sub

		Public Property Numerateur() As Double

		Public Property Denominateur() As Double

		Public ReadOnly Property Quotient() As Double 'propriété en lecture seule qui retourne le quotient
			Get
				Return Numerateur / Denominateur
			End Get
		End Property
	End Class



Et le traitement, la première partie sert à initialiser des données et la 2eme à faire "la moyenne glissée"

			'======Initilialisation
			Dim mesDivisions(49) As Division
			Dim rnd As New Random()
			For i As Integer = 0 To 49
				mesDivisions(i) = New Division(rnd.NextDouble(), rnd.NextDouble())
			Next i

			'======="moyenne glissée" selon Fran974
			Dim lesQuotients As New List(Of Double)()
			For i As Integer = 0 To 49 Step 10
				lesQuotients.Add(mesDivisions.Skip(i).Take(10).Average(Function(x) x.Quotient))
			Next i

			Dim MoyenneMaxi As Double = lesQuotients.Max()
vb95 1563 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 17 mai 2018 Dernière intervention > Whismeril 11516 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 19 mai 2018 Dernière intervention - 27 juin 2016 à 23:02
Salut Whis
un chef d’œuvre ce code
Je me le garde
On n'a aucune nouvelle du postulant en tout cas
Whismeril 11516 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 19 mai 2018 Dernière intervention > vb95 1563 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 17 mai 2018 Dernière intervention - 28 juin 2016 à 10:07
Salut, c'est pas La Naissance de Venus non plus hein!
Commenter la réponse de vb95
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - 27 juin 2016 à 07:35
0
Utile
Bonjour à tous,
J'aimerais connaître la signification précise que donne Fran974 aus termes "moyenne glissée".
S'agit-il :
1) - d'une moyenne glissante, donc mobile
ou
2) - d'une moyenne "lissée"

Si réponse 2 : indiquer de manière précise (en langage naturel) la manière décidée pour "lisser"
Si réponse 1 : le code que je vois, tant en ce qui concerne moy_1 que moy_2, n'est pas celui du calcul d'une moyenne glissante !
Whismeril 11516 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 19 mai 2018 Dernière intervention - 27 juin 2016 à 07:39
Bonjour Uc, tout à fait.

Ps, pourrais tu colorer le code de la question? Merci
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention > Whismeril 11516 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 19 mai 2018 Dernière intervention - 27 juin 2016 à 07:47
Bonjour, Whismeril. Fait.
Whismeril 11516 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 19 mai 2018 Dernière intervention > ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - 27 juin 2016 à 08:17
Merci
Commenter la réponse de ucfoutu

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.