Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Узнай, как пользоваться виджетами на MQL5.community
gince
547
gince 2010.12.20 20:48 

Нужна часть кода

Есть одномерный массив. Как пример показан с пяти элементов, хотя число элементов может быть и больше.

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;

Напишите кто может код.

Владимир Тезис
4266
Владимир Тезис 2010.12.20 22:24  

Можно сделать самому - организуем 2 цикла - в первом проходим по массиву, отыскивая самое большое число и самое маленькое число, попутно запоминая их индексы. Во втором снова порходим по массиву, отыскивая самое большое число, но которое меньше уже найденного и тож попутно запоминаем индекс (в этом же цикле отыскиваем второе минимальное). При равенстве двух отыскиваемых величин придётся делать код, обрабатывающий эту ситуацию. Можно сделать и проще. Попробуйте сами догадаться - задачка не сложная.

Mislaid
621
Mislaid 2010.12.20 23:27  

Другой вариант. Создаем двухмерный массив b, где b[ i, 0] = a[i], b[ i, 1] = i. Сортируем b по первому индексу с помощью ArraySort(). Два первых и два последних элемента массива будут искомыми экстремумами, во втором измерении лежат индексы энстремумов.

gince
547
gince 2010.12.21 11:43  
Спосибо за советы. А в коде можно ?
gince
547
gince 2010.12.21 16:48  

Пробовал так, но со вторыми элементами проблема

Где ошибка в моем мышлений ?

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=0

int 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);
  }
gince
547
gince 2010.12.21 17:13  

Нашел ошибку

count_extr=8

Mislaid
621
Mislaid 2010.12.22 07:20  
gince:
Спосибо за советы. А в коде можно ?

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);
  }
gince
547
gince 2010.12.22 09:20  

Спасибо. У вас проще получилось

/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий