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

Fran974
Messages postés
2
Date d'inscription
dimanche 26 juin 2016
Dernière intervention
26 juin 2016
- 26 juin 2016 à 19:15 - Dernière réponse : Whismeril
Messages postés
12238
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 novembre 2018
- 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
Messages postés
12238
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 novembre 2018
- 26 juin 2016 à 20:18
0
Merci
Bonjour

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

Commenter la réponse de Whismeril
Fran974
Messages postés
2
Date d'inscription
dimanche 26 juin 2016
Dernière intervention
26 juin 2016
- 26 juin 2016 à 20:39
0
Merci
VB Express
Et pardon , c'est If valeur > valeur_max Then
Commenter la réponse de Fran974
Whismeril
Messages postés
12238
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 novembre 2018
- 26 juin 2016 à 21:03
0
Merci
VB.Net donc.
Je fais déplacer dans le bon forum
Commenter la réponse de Whismeril
Whismeril
Messages postés
12238
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 novembre 2018
- Modifié par Whismeril le 26/06/2016 à 21:09
0
Merci
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
Messages postés
1701
Date d'inscription
samedi 11 janvier 2014
Dernière intervention
15 novembre 2018
- 27 juin 2016 à 01:34
0
Merci
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
Messages postés
12238
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 novembre 2018
> vb95
Messages postés
1701
Date d'inscription
samedi 11 janvier 2014
Dernière intervention
15 novembre 2018
- 27 juin 2016 à 15:24
La structure est à la classe ce que le tableau est à la collection.... ;-)
vb95
Messages postés
1701
Date d'inscription
samedi 11 janvier 2014
Dernière intervention
15 novembre 2018
> Whismeril
Messages postés
12238
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 novembre 2018
- 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
Messages postés
12238
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 novembre 2018
> vb95
Messages postés
1701
Date d'inscription
samedi 11 janvier 2014
Dernière intervention
15 novembre 2018
- 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
Messages postés
1701
Date d'inscription
samedi 11 janvier 2014
Dernière intervention
15 novembre 2018
> Whismeril
Messages postés
12238
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 novembre 2018
- 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
Messages postés
12238
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 novembre 2018
> vb95
Messages postés
1701
Date d'inscription
samedi 11 janvier 2014
Dernière intervention
15 novembre 2018
- 28 juin 2016 à 10:07
Salut, c'est pas La Naissance de Venus non plus hein!
Commenter la réponse de vb95
ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
- 27 juin 2016 à 07:35
0
Merci
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
Messages postés
12238
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 novembre 2018
- 27 juin 2016 à 07:39
Bonjour Uc, tout à fait.

Ps, pourrais tu colorer le code de la question? Merci
ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
> Whismeril
Messages postés
12238
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 novembre 2018
- 27 juin 2016 à 07:47
Bonjour, Whismeril. Fait.
Whismeril
Messages postés
12238
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 novembre 2018
> ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
- 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.