Поиск min и max массива

Olha
Offline
Зарегистрирован: 30.04.2020

Добрый день.

Подскажите пожалуйста девушке,которая только начинает программировать,есть ли готовые библиотеки или решения для поиска минимального и максимального значения в массиве с выводом индекса этих значений?
У меня есть считывание с аналогового входа значений

int Value[100];
int i;

void setup() {
 
  Serial.begin(9600);
}


void loop() {
   Value[i] = analogRead(A0);

  for (i = 0; i < 100; i = i + 1) {
  Serial.println(Value[i]);
  }

  delay(1000);       
}

Очень благодарю за помощь и подсказки

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

Ваш код не работает !

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

В лекциях должно бытть все написано. 

-NMi-
Offline
Зарегистрирован: 20.08.2018

Дет, помому на первом курсаке уже и матрицирование и интехралы решали ужо? Нахождение мин/мах помому ещё в школе было. Так-шо каки лехции?

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

Прежде чем искать максимум, минимум в массиве - надо что то туда записать !!!

sadman41
Offline
Зарегистрирован: 19.10.2016

Сейчас с начальной школы учатся программировать...

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

sadman41 вместо того что бы научить писать, читать и считать ...

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Komandir пишет:

вместо того что бы научить писать, читать и считать ...

И говорить, заодно. Многие студенты и этого не умеют.

-NMi-
Offline
Зарегистрирован: 20.08.2018

sadman41 пишет:
Сейчас с начальной школы учатся программировать...

Тогда эту "профэссию" можно смыть в унитаз.

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

"Пить, курить, программировать и ходить я начал одновременно" 

-NMi-
Offline
Зарегистрирован: 20.08.2018

Понятно почему теперь 90% тем на ЛЮБЫХ форумах - либо памагите, либо "чояделаюнетак". Уотт это напрягает.

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Чисто теория:
1. Можно считать данные в массив и потом определить в нем min/max

2. Определять min/max «на лету», но нужно понимать, что min/max будет верным на момент последнего считывания с пина. 
 

-NMi-
Offline
Зарегистрирован: 20.08.2018

Во втором случае и массив то и не нужен. мин и макс две переменные + количество измерений. Ну не палучицца из 90% программистов, 89% праграмистоф - палучицца.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Милае девачко, скажи чесно, что ты таки хочешь, научиться или по-быстренькому сделать задание?

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Olha пишет:

Очень благодарю за помощь и подсказки

В любом поисковике набираете "поиск минимума и максимума в массиве с++" и получаете ОГРОМНУЮ кучу программ. Выбирайте....

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

DetSimen пишет:

Милае девачко, скажи чесно, что ты таки хочешь, научиться или по-быстренькому сделать задание?

Давайте дрочить с открытыми глазами. Девачко, даже если оно было, оставило лишь первый пост! ;))))))))

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Интерес у неё пропал))) 

Я так лет 15 назад дочери одной барышни двусвязный список с комментариями старательно по аське расписывал. Часа два. Потом обратил внимание, что нет ни вопросов, ни ответа. А ей наскучило и она гулять ушла. Молча. 

Olha
Offline
Зарегистрирован: 30.04.2020

Komandir пишет:

Ваш код не работает !

да.вроде сделала ошибку в записи значения.

т.е каждому элементу массива(соответственно считыванию присваивается номер)

Так правильно?

int Value[100];
int i;

void setup() {
 
  Serial.begin(9600);
}


void loop() {
     for (i = 0; i < 100; i = i + 1) {
 Value[i] = analogRead(A0);
  Serial.println(Value[i]);
  }

  delay(1000);       
}

 

Olha
Offline
Зарегистрирован: 30.04.2020

DetSimen пишет:

Милае девачко, скажи чесно, что ты таки хочешь, научиться или по-быстренькому сделать задание?

лучше научиться.

если есть информация,то лучше прочитать и усвоить

sadman41
Offline
Зарегистрирован: 19.10.2016

Olha пишет:

т.е каждому элементу массива(соответственно считыванию присваивается номер)

Теперь давайте думать - можем ли мы повторно пройтись по массиву, сравнить каждый его элемент с некоторой переменной и поместить значение сравниваемого элемента в вышеозначенную переменную при условии, что её значение меньше значения элемента массива?

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Если принять за основу, что измерения и подсчёт мин и макс происходит «на лету», то как элемент статистики нужен ещё счётчик считанных элементов. И все. Три элемента самодостаточны в решении этой задачи. 

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Но эта задача очень простая, а сортировка массива - это настоящая задача. Тут и пять с плюсом можно получить.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

mykaida пишет:

а сортировка массива - это настоящая задача. 

Это раньше так было. А с тех пор в стандартной СИ-шной библиотеке qsort появилась :-)

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

ЕвгенийП пишет:

Это раньше так было. А с тех пор в стандартной СИ-шной библиотеке qsort появилась :-)

Мда... Отстал. А в свое время неплохая задача была... А тут qsort и все.

А чего девочке не подсказали? 

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

А мы когда то на Бейсике сначала «метод пузырька» проходили, потом сортировку в упорядоченном списке и только потом в не упорядочном. Но это ещё когда Бейсик был «крутым языком программирования» (и почти всегда единственном). Но с тех пор забыл его, а жаль. VBA как оказалось очень крутой для быстрой разработки и в любом ms office присутствует (читай в любом пк сейчас почти).  

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

BOOM пишет:

А мы когда то на Бейсике сначала «метод пузырька» проходили, потом сортировку в упорядоченном списке и только потом в не упорядочном. Но это ещё когда Бейсик был «крутым языком программирования» (и почти всегда единственном). Но с тех пор забыл его, а жаль. VBA как оказалось очень крутой для быстрой разработки и в любом ms office присутствует (читай в любом пк сейчас почти).  

Не у нас фортран был в тренде. Там и математические библиотеки и компилируемый. На бейсике я пару раз писал нормальные вычислительные задачи для БК11М - сутки вычислений. СМка была занята. Не впечатлило...

Olha
Offline
Зарегистрирован: 30.04.2020

Пока из того,что прочитала получилось получилось минимальное и максимальное значение с индексами таким образом.

int Value[4];
int i;

void setup() {
 
  Serial.begin(9600);
}


void loop() {
  int max_v = 0;
  int max_i = 0;
  int min_v = 1023;
  int min_i = 0;
     for (i = 0; i < 4; i = i + 1) {
 Value[i] = analogRead(A0);
     if ( Value[i] > max_v )
    {
      max_v = Value[i];
      max_i = i;
    }
if ( Value[i] < min_v )
    {
      min_v = Value[i];
      min_i = i;
    }

  }
Serial.println(Value[i]);
Serial.print("min=");
Serial.println(min_v);
Serial.println("max=");
Serial.println(max_v);
  delay(1000);       
}

но проблема,в том,что после первого массива из 4 значений,минимумы и максимумы сохраняются

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

29 строка выпала за цикл ...

sadman41
Offline
Зарегистрирован: 19.10.2016

В каком смысле сохраняются?

Все min/max переменные имеют локальную область видимости и переинициализируются на каждом повторе loop()

Olha
Offline
Зарегистрирован: 30.04.2020

Komandir пишет:

29 строка выпала за цикл ...

спасибо,сейчас поправлю и попробую

Olha
Offline
Зарегистрирован: 30.04.2020

sadman41 пишет:

В каком смысле сохраняются?

Все min/max переменные имеют локальную область видимости и переинициализируются на каждом повторе loop()

к примеру 2 считывания по 4 значения
№1

9

8

7

6

max=9

 

№2

5

4

3

2

1

max=9

 

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

в #30 вывод из другого кода ! после max= должен быть перевод строки 

строки 11-14 так делать не следует !

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Видимо вы нам показываете одно, а у себя пробуете другое:

382
382
384
385
min=382
max=385
384
385
386
387
min=384
max=387
387
387
388
389
min=387
max=389
389
389
390
390
min=389
max=390

 

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Olha пишет:

Пока из того,что прочитала получилось получилось минимальное и максимальное значение с индексами таким образом.

но проблема,в том,что после первого массива из 4 значений,минимумы и максимумы сохраняются

А написать комментарии к тому, что Вы делаете в программе очень тяжело?

Напишите - может чего просветлится...

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018
#define num_v 4
int Value[num_v];
int i;
int max_v;
int max_i;
int min_v;
int min_i;

void setup()  {
   Serial.begin(9600);
}

void loop() {
   Serial.println("In array:");
   for (i = 0; i < num_v; i = i + 1)  {
      Value[i] = analogRead(A0);
      if ( i==0 )  {
	 max_v = Value[0] ;
	 max_i = 0;
	 min_v = Value[0] ;
	 min_i = 0;
      }
      if ( Value[i] > max_v ) {
	 max_v = Value[i];
	 max_i = i;
      }
      if ( Value[i] < min_v ) {
	 min_v = Value[i];
	 min_i = i;
      }
      Serial.println(Value[i]);
   }
   Serial.print("min=");
   Serial.print(min_v);
   Serial.print("   index=");
   Serial.println(min_i);
   Serial.print("max=");
   Serial.print(max_v);
   Serial.print("   index=");
   Serial.println(max_i);
   delay(1000);       
}

 

Olha
Offline
Зарегистрирован: 30.04.2020

Komandir пишет:

#define num_v 4
int Value[num_v];
int i;
int max_v;
int max_i;
int min_v;
int min_i;

void setup()  {
   Serial.begin(9600);
}

void loop() {
   Serial.println("In array:");
   for (i = 0; i < num_v; i = i + 1)  {
      Value[i] = analogRead(A0);
      if ( i==0 )  {
	 max_v = Value[0] ;
	 max_i = 0;
	 min_v = Value[0] ;
	 min_i = 0;
      }
      if ( Value[i] > max_v ) {
	 max_v = Value[i];
	 max_i = i;
      }
      if ( Value[i] < min_v ) {
	 min_v = Value[i];
	 min_i = i;
      }
      Serial.println(Value[i]);
   }
   Serial.print("min=");
   Serial.print(min_v);
   Serial.print("   index=");
   Serial.println(min_i);
   Serial.print("max=");
   Serial.print(max_v);
   Serial.print("   index=");
   Serial.println(max_i);
   delay(1000);       
}

 

Спасибо большое,все получилось.
А переменные в цикле лучше не указывать?

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

Начальное значение поиска должно входить в массив, а не как у вас было 0 и 1023. Случаи всякие бывают...

gal
Offline
Зарегистрирован: 08.06.2018

А как переделать код чтобы определить min max  напряжения подаваемого на А0, которое меняется медленным вращением потенциометром  ?

b707
Offline
Зарегистрирован: 26.05.2017

gal пишет:

А как переделать код чтобы определить min max  напряжения подаваемого на А0, которое меняется медленным вращением потенциометром  ?

какае отношение ваш вопрос имеет к массивам?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

gal пишет:

А как переделать код чтобы определить min max  напряжения подаваемого на А0, которое меняется медленным вращением потенциометром  ?

Нинкак. Тут массив не нужен. Надо писать другой код. 

Вам ответ нужен словами (как его написать) или только кодом?

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

gal пишет:

А как переделать код чтобы определить min max  напряжения подаваемого на А0, которое меняется медленным вращением потенциометром  ?

У меня, кстати, похожий вопрос: а как умножить 2 на 3? 2 на 2 я помню со школы, я же не дурак! Это 4. А вот 2 на 3 никак не вспомню. Говорят нужно сложить три раза, так я и складываю: 2+3 три раза, 15 получается! Другие говорят "двойки складывай", 222 - вообще двести двадцать два получилось! Ну не бред? Они там со своей математикой совсем охренели, штоле?!!

b707
Offline
Зарегистрирован: 26.05.2017

народ. не тратьте время... просто сделайте поиск по нику...

http://arduino.ru/forum/programmirovanie/bin-arduino

прошло три года... вопросы мало изменились.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

ТОчняк! Как я не вспомнил?! Есть тут такой псих, он пару раз в год, вероятно, выходит из дурдома и задает одни и те же вопросы. Вроде еще с ником "Тед" он же? Двинутый на металлоискателях.

gal
Offline
Зарегистрирован: 08.06.2018

wdrakula пишет:

ТОчняк! Как я не вспомнил?! Есть тут такой псих, он пару раз в год, вероятно, выходит из дурдома и задает одни и те же вопросы. Вроде еще с ником "Тед" он же? Двинутый на металлоискателях.

Обижаешь "начальник" без причины = большой дурак

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

gal пишет:

Обижаешь "начальник" без причины = большой дурак

А причём тут присваивание? Разве "без причины" может быть l-value?

Компилятор-то чего говорит?

gal
Offline
Зарегистрирован: 08.06.2018

оскорбление = хам.

Больше нет смысла говорить.

До Свидания.

b707
Offline
Зарегистрирован: 26.05.2017

gal пишет:

Больше нет смысла говорить.

До Свидания.

давно бы так....

gal
Offline
Зарегистрирован: 08.06.2018

b707 пишет:

 сделайте поиск .

Да не ищите, лучше посмотрите здесь,

https://www.youtube.com/watch?v=7x4ZKUUy8io

 лицензию продал за хорошие деньги, а вы дальше тут умничайте.

b707
Offline
Зарегистрирован: 26.05.2017

gal пишет:

Да не ищите, лучше посмотрите здесь,

https://www.youtube.com/watch?v=7x4ZKUUy8io

 

по чужим видео не шастаю.

Мой поиск веселее - я предлагал поискать твои перлы на форуме - там просто обхохочешься...