Как найти индекс максимального значения в массиве?

Допустим, у нас есть массив с именем myMeasurements

int myMeasurements[9]={3,4,8,12,7,2,1,67,8};

Как найти индекс максимального элемента этого массива?

Например, код MATLAB будет выглядеть так:

myMeasurements = [3,4,8,12,7,2,1,67,8];
[maxValue,Index] = max(myMeasurements);

где maxValue возвращается как 67, тогда как Index возвращается как 8.

Для справки: я использую Teensy 3.2 и программирую его с помощью Arduino IDE, используя дополнение Teensyduino.

, 👍2


4 ответа


Лучший ответ:

3

Во-первых, вам действительно нужны значения int для измерений или нет? Если нет, и у вас есть числа от 0 до 255, переключите значения в byte, ваш микроконтроллер скажет вам спасибо.

Затем есть проблема с другими ответами, которая заключается в том, что... Переменные нельзя оставлять неинициализированными!!! Вы можете использовать этот код, чтобы получить необходимую вам информацию:

(Я также поместил размер myMeasurements в константную переменную. Позже вы сможете поблагодарить меня за это)

const byte maxMeasurements = 9;
int myMeasurements[maxMeasurements ]={3,4,8,12,7,2,1,67,8};

byte maxIndex = 0;
int maxValue = myMeasurements[maxIndex];

for(byte i = 1; i < maxMeasurements; i++)
{
    if(myMeasurements[i] > maxValue) {
        maxValue = myMeasurements[i];
        maxIndex = i;
    }
}
,

-1

Форум Arduino обсуждал поиск индекса, когда вы знаете, какой индекс значения вам нужен. Решение было найдено путем обхода массива по значению, которое вы искали.
Для вашего требования вам придется
(1) сначала найдите maxValue, а затем
(2) найдите позицию (индекс) этого maxValue, используя код, который они обсуждали здесь: https://forum.arduino.cc/index.php?topic=121116.0

,

-1

Код, предоставленный Якубом Крначем, получает небольшое изменение, которое даст индекс максимального значения. Вот измененный код:

int myMeasurements[9]={3,4,8,12,7,2,1,67,8};
int max,current, maxI; 
for(int i = 0;i < 9;i++){
    current = myMeasurements[i];
    if(current > max){
        max = current;
        maxI = i;
    }
}
,

0
int myMeasurements[9] = {3,4,8,12,7,2,1,67,8};
int maxI = 0;
for(int i = 1;i < 9;i++) 
    if(myMeasurements[i] > myMeasurements[maxI])
       maxI = i;
,