Bonjour ! J'ai un code à faire pour le Bac (presque fini je ne vais pas vous demander de le faire à ma place ^^), et ça ressemble à ça :
int max1 = 0;
int min1 = 0;
int max2 = 0;
int min2 = 0;
for (int i=0; i<=19; i++){
if (son2[i+1] > son2[i]){
max1 = son2[i+1];
}
if (son[i+1] < son[i]) {
min1 = son2[i+1];
}
}
for (int i =20; i<=39; i++){
if (son2[i+1] > son2[i]){
max2 = son2[i+1];
}
if (son2[i+1] < son2[i]){
min2 = son2[i+1];
}
}
En clair j'acquiers des données que j'analyse afin de trouver le max et le min dans cet échantillon (20 nombres ici).
Je voudrais ensuite connaître le rang i+1 pour lequel on a les max et les min, en même temps que la valeur stockée dans son*.* Je sais pas si c'est très clair mais je peux vous donner le reste du code si vous voulez. Merci d'avance !
Il faut déjà revoir ton algorithme de recherche des min et max.
Ensuite il suffit de mémoriser i dans une variable (par exemple imin1 et imax1 ) quand tu mémorise min1 et max1.
Est tu sur que les max/min soient univoques?
Souvent les mesures ont du bruit il y a des max provisoires...
Voici un code qui fonctionne bien chez moi:
if (A0Byte > Treshold && ATpointer < 394)
{ // Detection of Events Above Treshold, that must last for at least Duration and max 3xDuration
// Find maximum value and record corresponding time.
ATDuration ++;
if (A0Byte > ATMax)
{
ATMax = A0Byte;
AThour = hour;
ATmin = minute;
ATsec = second;
}
}
else // At the end of the event categorize it
{
if (ATDuration > Duration && ATDuration < 3 * Duration)
{
// record event data in Array
filbuff4[ATpointer] = AThour;
ATpointer ++;
filbuff4[ATpointer] = ATmin;
ATpointer ++;
filbuff4[ATpointer] = ATsec;
ATpointer ++;
filbuff4[ATpointer] = ATMax; // Maximum
ATpointer ++;
filbuff4[ATpointer] = ATDuration;
ATpointer ++;
ATDuration = 0;
if (ATMax > NAT1) nNAT1 ++;
if (ATMax > NAT2) nNAT2 ++;
if (ATMax > NAT3) nNAT3 ++;
}
else
{
// drop event
ATDuration = 0;
ATMax = 0;
} // end if/else duration
} // end if/else above treshold
Je classe tous les max dans un array avec l'heure, le maximum et la durée.
Il y a des conditions supplémentaires:
le max doit durer au moins x et moins de 3x et
l'évènement doit être supérieur a une limite inférieure.
J'attends de repasser par la limite inférieure avand d'enregistrer l'évènement,
En effet, je ne comprends pas bien le besoin (il y a des son et des son2, c'est pas très clair), mais si tu veux connaitre les valeurs min et max et leurs indices, il te faut un truc comme ça :
int imin1 = 0;
int min1 = son2[0];
int imax1 = 0;
int max1 = son2[0];
for (int i=1; i<=19; i++)
{
if (son2[i] > max1){
max1 = son2[i];
imax1 = i;
}
if (son[] < min1) {
min1 = son2[i];
imin1 = i;
}
}
Mais je ne sais pas si c'est ce que tu cherches...
Merci beaucoup j'ai utilisé ton code et j'ai adapté quelques trucs et ca marche !
Tu viens sûrement de me faire gagner des points pour le bac
Et merci aux autres qui ont pris le temps de me répondre.
Sujet résolu !