Как найти индекс максимального значения в массиве?
Допустим, у нас есть массив с именем 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.
@csg, 👍2
4 ответа
Лучший ответ:
Во-первых, вам действительно нужны значения 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;
}
}
Форум Arduino обсуждал поиск индекса, когда вы знаете, какой индекс значения вам нужен. Решение было найдено путем обхода массива по значению, которое вы искали.
Для вашего требования вам придется
(1) сначала найдите maxValue, а затем
(2) найдите позицию (индекс) этого maxValue, используя код, который они обсуждали здесь:
https://forum.arduino.cc/index.php?topic=121116.0
Код, предоставленный Якубом Крначем, получает небольшое изменение, которое даст индекс максимального значения. Вот измененный код:
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;
}
}
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;
- Работает ли конструкция int array[100] = {0} на Arduino?
- Длина константного массива uint8_t*
- Как удалить элемент из массива arduino?
- Как вернуть значение массива символов в функции Arduino IDE?
- Есть ли ограничения на размер массива в Arduino Mega 2560?
- Чтение из SPIFFS - Как лучше всего работать со строковым (или char) массивом с неопределенной длиной?
- Чтение изображений bmp с SD-карты, преобразование их и отображение на последовательном мониторе в Arduino
- Как установить текущее положение двигателя постоянного тока равным нулю + сохранить текущие позиции в массиве и запустить его?