Bonjour, commençons par expliquer les lignes sur les plus hauts proposé dans :
Identification du plus haut et du plus bas
et au passage en proposer une meilleure version, et ensuite on verra pour obtenir l’équivalent pour les plus bas).
G1=highest[50](distance)
for i=0 to 49
$montab[i]=distance[i]
if distance[i]=G1 then
i1=i
endif
next
for i=0 to 49
if i=i1 then
$montab[i]=0
endif
next
G2=ArrayMax($montab)
moy2plusgrands=(G1+G2)/2
G1 à chaque bougie retient le plus haut de la variable “distance” parmi 50 (celle en cours et les 49 avant) de distance
ensuite la boucle for va permettre d’indexer un tableau $montab et d’y stocker chaque “distance” en l’alignant sur 50 (bougie en cours [0] et les 49 avant)
pendant que i parcours de 0 à 49, si on tombe sur distance[i]=G1, on met en mémoire l’index du moment via i1=i (il peut y en avoir plusieurs si G1 pas unique, on retiendra juste le dernier dans un seul i1)
ensuite, pour trouver le 2e plus haut, on va supprimer le plus haut $montab[i1] de la série et utiliser arraymax où le 2e plus haut d’avant est devenu le plus haut pour trouver G2. Si je me souviens bien, j’étais d’abord parti sur une façon de faire à 2 boucles, puis j’ai changé en remplaçant le contenu des 2 boucles, mais en relisant je vois qu’avec cette façon de faire-ci il n’y a plus besoin de boucle pour réaliser la 2e étape, donc on va plutôt faire (même résultat mais plus léger en écriture):
G1=highest[50](distance)
for i=0 to 49
$montab[i]=distance[i]
if distance[i]=G1 then
i1=i
endif
next
$montab[i1]=0
G2=ArrayMax($montab)
moy2plusgrands=(G1+G2)/2
enfin, puisque tu précises en #217736 que “distance” peut être aussi bien positif que négatif, alors imaginons un jeu théorique de 50 “distance” tous négatif, remplacer G1 par 0 n’éliminerait pas la valeur en tant que 1er plus grand comme cela le ferait pour une série comportant des “distance” positif, on va donc plutôt faire sans 2e boucle, directement:
$montab[i1]=arraymin($montab)
Au final:
G1=highest[50](distance)
for i=0 to 49
$montab[i]=distance[i]
if distance[i]=G1 then
i1=i
endif
next
$montab[i1]=ArrayMin($montab)
G2=ArrayMax($montab)
moy2plusgrands=(G1+G2)/2
et donc, pour faire la moyenne des 2 plus petits “distance” (en réponse au post #217680, n’ayant pas regardé en détails les posts qui ont suivi où “plafond” et “plancher” semblent avoir remplacé “distance”), on adaptera ainsi:
G11=lowest[50](distance) // je reprends ta notation G11,G12 à la place des G1,G2 du cas des 2 plus grands
for i=0 to 49
$montab[i]=distance[i]
if distance[i]=G11 then // attention, tu avaiss oublié de transformer G1 en G11 ici
i1=i
endif
next
$montab[i1]=ArrayMax($montab)// on élimine le plus petit en i1 du tableau en en faisant un plus grand, pour qu'ensuite l'arraymin donne le 2e plus petit de la série de départ
G12=ArrayMin($montab)
moy2pluspetits=(G11+G12)/2