Сравнение массивов, сломал голову с OUT OF RANGE
Доброго времени суток (всех с праздником).
Требуется решить следующую задачу
Есть два массива Array1 и Array2 всегда исполняется условие что Array1>=Array2, нужно найти те элементы Array1, которых нет в Array2 и поместить в третий Массив
Навоял следующий код (по его результату в результативном массиве должен лежать 1 элемент со значением 8):
input int Koof= 10;
input int Slippage = 2;
//User Functions
bool MyArrayCompare(int &Array1[], int &Array2[], int &ArrayDest[])
{
int j=0;
ArraySort(Array1,WHOLE_ARRAY,0,MODE_ASCEND);
ArraySort(Array2,WHOLE_ARRAY,0,MODE_ASCEND);
int size = ArraySize(Array1);
for (int i=0; ArraySize(Array1); i++)
{
/// Для каждого элемента большого массива ищем такой же элемент в маленьком, если находим ничего не делаем если нет то кладем в результирующий массив
int k=ArrayBsearch(Array2,Array1[i],WHOLE_ARRAY,0,MODE_ASCEND);
if (ArrayBsearch(Array2,Array1[i],WHOLE_ARRAY,0,MODE_ASCEND)==0) // если 0 то не нашли
{
ArrayDest[j]=Array1[i];
j++;
}
}
return 0;
}
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- create timer
EventSetTimer(60);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- destroy timer
EventKillTimer();
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
int ParentsOrders[] = {2,3,4,5,6,7,8};
int ChildOrders [] = {2,3,4,5,6,7};
int ArrayDest[10];
ArrayResize(ArrayDest,10);
int PCnt =0;
int CCnt=0; //считаем сколько детей и сколько родаков
MyArrayCompare(ParentsOrders,ChildOrders,ArrayDest);
}
3. Если объявлен статический массив, то зачем ему ArrayResize с тем-же размером?
И самое главное, всё это мартышкин труд. потому, что
Возвращаемое значение
Возвращает индекс найденного элемента. Если искомое значение не найдено, то возвращает индекс ближайшего по значению элемента.
Очень жаль что так испоганили язык. Раньше, если правильно помню, была возможность задать флаг, возвратить ближайшее или -1 в случае неудачи.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Сравнение массивов, сломал голову с OUT OF RANGE
Alexey Viktorov, 2017.02.14 13:22
1. Выделенная строка должна быть так...3. Если объявлен статический массив, то зачем ему ArrayResize с тем-же размером?
И самое главное, всё это мартышкин труд. потому, что Следовательно любое значение первого массива будет найдено во втором. Пусть не совсем оно, но довольствуйся тем что есть.
Очень жаль что так испоганили язык. Раньше, если правильно помню, была возможность задать флаг, возвратить ближайшее или -1 в случае неудачи.
действительно нужна функция поиска элемента в массиве и неужели ее тоже писать самому?
Огромное спасибо! действительно глупейшая ошибка от замыленного глаза.... спасибо спасибо что ткнули носом....
действительно нужна функция поиска элемента в массиве и неужели ее тоже писать самому?
Эммм туплю (это мой первый код на mql), проверил справочник молчит он насчет точного равенства.
Эммм туплю (это мой первый код на mql), проверил справочник молчит он насчет точного равенства.
Вместо этого
{
ArrayDest[j]=Array1[i];
j++;
}
{
ArrayDest[j]=Array1[i];
j++;
}
Доброго времени суток (всех с праздником).
Требуется решить следующую задачу
Есть два массива Array1 и Array2 всегда исполняется условие что Array1>=Array2, нужно найти те элементы Array1, которых нет в Array2 и поместить в третий Массив
Навоял следующий код (по его результату в результативном массиве должен лежать 1 элемент со значением 8):
input int Koof= 10;
input int Slippage = 2;
//User Functions
bool MyArrayCompare(int &Array1[], int &Array2[], int &ArrayDest[])
{
int j=0;
ArraySort(Array1,WHOLE_ARRAY,0,MODE_ASCEND);
ArraySort(Array2,WHOLE_ARRAY,0,MODE_ASCEND);
int size = ArraySize(Array1);
for (int i=0; ArraySize(Array1); i++)
{
/// Для каждого элемента большого массива ищем такой же элемент в маленьком, если находим ничего не делаем если нет то кладем в результирующий массив
int k=ArrayBsearch(Array2,Array1[i],WHOLE_ARRAY,0,MODE_ASCEND);
if (ArrayBsearch(Array2,Array1[i],WHOLE_ARRAY,0,MODE_ASCEND)==0) // если 0 то не нашли
{
ArrayDest[j]=Array1[i];
j++;
}
}
return 0;
}
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- create timer
EventSetTimer(60);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- destroy timer
EventKillTimer();
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
int ParentsOrders[] = {2,3,4,5,6,7,8};
int ChildOrders [] = {2,3,4,5,6,7};
int ArrayDest[10];
ArrayResize(ArrayDest,10);
int PCnt =0;
int CCnt=0; //считаем сколько детей и сколько родаков
MyArrayCompare(ParentsOrders,ChildOrders,ArrayDest);
}