Можно сделать самому - организуем 2 цикла - в первом проходим по массиву, отыскивая самое большое число и самое маленькое число, попутно запоминая их индексы. Во втором снова порходим по массиву, отыскивая самое большое число, но которое меньше уже найденного и тож попутно запоминаем индекс (в этом же цикле отыскиваем второе минимальное). При равенстве двух отыскиваемых величин придётся делать код, обрабатывающий эту ситуацию. Можно сделать и проще. Попробуйте сами догадаться - задачка не сложная.
Другой вариант. Создаем двухмерный массив b, где b[ i, 0] = a[i], b[ i, 1] = i. Сортируем b по первому индексу с помощью ArraySort(). Два первых и два последних элемента массива будут искомыми экстремумами, во втором измерении лежат индексы энстремумов.
Пробовал так, но со вторыми элементами проблема
Где ошибка в моем мышлений ?
2010.12.21 16:44:49 2010.08.23 14:18 max_min EURUSDFXF,M5: i_min1=0
2010.12.21 16:44:49 2010.08.23 14:18 max_min EURUSDFXF,M5: p_min1=1
2010.12.21 16:44:49 2010.08.23 14:18 max_min EURUSDFXF,M5: i_max1=5
2010.12.21 16:44:49 2010.08.23 14:18 max_min EURUSDFXF,M5: p_max1=9
2010.12.21 16:44:49 2010.08.23 14:18 max_min EURUSDFXF,M5: i_min2=0
2010.12.21 16:44:49 2010.08.23 14:18 max_min EURUSDFXF,M5: p_min2=0
2010.12.21 16:44:49 2010.08.23 14:18 max_min EURUSDFXF,M5: i_max2=0
2010.12.21 16:44:49 2010.08.23 14:18 max_min EURUSDFXF,M5: p_max2=0int start() { int i,j, count_extr; double extr[9]={1,2,3,4,5,9,8,7,6}; double extr_max[9], extr_min[9]; int index_max_1, index_min_1, index_max_2, index_min_2; double price_max_1, price_min_1, price_max_2, price_min_2; //---- price_max_1=extr[ArrayMaximum(extr)]; Print("p_max1=",price_max_1); index_max_1=ArrayMaximum(extr); Print("i_max1=",index_max_1); price_min_1=extr[ArrayMinimum(extr)]; Print("p_min1=",price_min_1); index_min_1=ArrayMinimum(extr); Print("i_min1=",index_min_1); //цикл для создания нового массива в котором будем искать второй максимум и его индекс // for(j=0;j<count_extr;j++) { extr_max[j]=extr[j]; //переписываем бывший массив extr_max[index_max_1]=-100000; //меняем значение элемента с индексом первого максимума на очень малинкое значение } price_max_2=extr_max[ArrayMaximum(extr_max)];Print("p_max2=",price_max_2); index_max_2=ArrayMaximum(extr_max); Print("i_max2=",index_max_2); //цикл для создания нового массива в котором будем искать второй минимум и его индекс // for(j=0;i<count_extr;i++) { extr_min[j]=extr[j]; //переписываем бывший массив extr_min[index_min_1]=100000; //меняем значение элемента с индексом первого минимума на очень большое значение } price_min_2=extr_min[ArrayMinimum(extr_min)];Print("p_min2=",price_min_2); index_min_2=ArrayMinimum(extr_min); Print("i_min2=",index_min_2); //---- return(0); }
Нашел ошибку
count_extr=8
Спосибо за советы. А в коде можно ?
int start() { //---- int i; double extr[9]={1,2,3,4,5,9,8,7,6}; //---- double b[ 9, 2]; for (i = 0; i < 9; i++) { b[ i, 0] = extr[ i ]; b[ i, 1] = i; } ArraySort( b ); Print("p_min1=", b[ 0, 0], " i_min1=", b[ 0, 1]); Print("p_min2=", b[ 1, 0], " i_min2=", b[ 1, 1]); Print("p_max2=", b[ 7, 0], " i_max2=", b[ 7, 1]); Print("p_max1=", b[ 8, 0], " i_max1=", b[ 8, 1]); //---- return(0); }
Спасибо. У вас проще получилось

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Нужна часть кода
Есть одномерный массив. Как пример показан с пяти элементов, хотя число элементов может быть и больше.
double а[5]={4,1,6,3,9};
Надо наити два максимума и дава минимума с индексами :
а_max1 = 9;
a_max_index1 = 4;
а_max2 = 6;
a_max_index2 = 2;
а_min1 = 1;
a_min_index1 = 1;
а_min2 = 3;
a_main_index2 = 3;
Напишите кто может код.