PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV Mobile 2024 → Valeur moyenne quelle méthode utilisée en programmation
Valeur moyenne quelle méthode utilisée en programmation
Débuté par stef, 19 avr. 2007 12:03 - 4 réponses
Posté le 19 avril 2007 - 12:03
Je demande conseil sur la meilleure méthode d'après vous pour obtenir "la valeur moyenne" d'une série d'entier...

je m'explique, mon application wm recois une série d'entier qui représente une température chaque seconde, pendant une séquence de 8 sec.

1sec 82°
2sec 83°
3sec 82°
4sec 81°
5sec 80°
6sec 82°
7sec 81°
8sec 82°

je dois obtenir le plus rapidement possible la température qui revient le plus dans la série.
dans l'exemple la c'est 82° (4 cas dans la série).
Avez vous une idée sur une astuce de programmation pour un calcul hyper rapide ?
je pense partir sur un tableau dynamique de 8 entier et effectuer un comptage/tri...
Posté le 19 avril 2007 - 13:23
Bonjour,
Tu peux utiliser une liste chainée d'objets qui contiennent la température, et le nombre d'occurrence.
A chaque lecture de la temperature, tu pacrours la liste chainée:
Soit la température est déjà enregistrée => tu incrémentes le bombre d'occurences
Soit elle n'y est pas => tu l'ajoutes.
Pour seulement 8 valeurs, il n'est pas nécessaire de trier la liste chainée.
Au final, il te suffit de chercher dans la liste la valeur qui a le plus grand nombre d'occurrence. Chercher une valeur dans une liste chainée de 8 enregistrements, ce n'est pas la mort...
Dans ton exemple, tu auras seulement 4 enregistrements, dans cet ordre:
82;4
83;1
81;2
80;1

Après, si les valeurs sont dans une base:
select temp,count(*) from LaTable group by valeur order by 2 desc
La première ligne contient la température et le nombre de fois qu'elle apparait.

Frédéric.
Posté le 19 avril 2007 - 13:41
Merci pour cette méthode Frédéric !!!
Posté le 19 avril 2007 - 13:42
A la louche :

SInfoTemperature est structure
dwTemperature est entier // Valeur de la temperature
dwOccurrence est entier // Nombre d'occurrences
Fin
tInfoTemperature est tableau dynamique de 0 SInfoTemperature

dwIndex est entier
dwTemperatureTemp est entier // Contient une de tes valeurs

// Traiter le bloc suivant pour chacune de tes valeurs
dwIndex = tableaucherche(tInfoTemperature,tclineaire,"dwTemperature",
dwTemperatureTemp)
si dwIndex > 0 alors
tInfoTemperature[dwIndex]:dwOccurrence ++
sinon
dwindex = tableauajoute(tInfoTemperature)
tInfoTemperature[dwIndex]:dwTemperature = dwTemperatureTemp
tInfoTemperature[dwIndex]:dwOccurrence = 1
fin

// Résultat final
si Dimension(tInfoTemperature) > 0 alors
tableautrie(tInfoTemperature,ttDecroissant,"dwOccurrence")
trace(tInfoTemperature[1]:dwTemperature + " / " +
tInfoTemperature[1]:dwOccurrence)
tableausupprimetout(tInfoTemperature)
Fin

Enfin voilà à la louche pour le principe (à qqs erreurs de frappe pres
je pense...)

eric l.

> stef a écrit :
Je demande conseil sur la meilleure méthode d'après vous pour obtenir "la valeur moyenne" d'une série d'entier...

je m'explique, mon application wm recois une série d'entier qui représente une température chaque seconde, pendant une séquence de 8 sec.

1sec 82°
2sec 83°
3sec 82°
4sec 81°
5sec 80°
6sec 82°
7sec 81°
8sec 82°

je dois obtenir le plus rapidement possible la température qui revient le plus dans la série.
dans l'exemple la c'est 82° (4 cas dans la série).
Avez vous une idée sur une astuce de programmation pour un calcul hyper rapide ?
je pense partir sur un tableau dynamique de 8 entier et effectuer un comptage/tri...

Posté le 19 avril 2007 - 17:58
Merci Eric et Fred pour leurs experiences... c 'est ok.