Проверьте выражение2 в цикле, при каком условии он должен прекратить итерации?
for (int i=0; ArraySize(Array1); i++)
Александр Иванчук:
1. Выделенная строка должна быть так...Доброго времени суток (всех с праздником).
Требуется решить следующую задачу
Есть два массива Array1 и Array2 всегда исполняется условие что Array1>=Array2, нужно найти те элементы Array1, которых нет в Array2 и поместить в третий Массив
Навоял следующий код (по его результату в результативном массиве должен лежать 1 элемент со значением 8):
//--- input parameters
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);
}
Спасибо!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);
}
for (int i=0; i < ArraySize(Array1); i++)
2. Сортировка первого массива необязательна.3. Если объявлен статический массив, то зачем ему ArrayResize с тем-же размером?
И самое главное, всё это мартышкин труд. потому, что
Возвращаемое значение
Возвращает индекс найденного элемента. Если искомое значение не найдено, то возвращает индекс ближайшего по значению элемента.
Очень жаль что так испоганили язык. Раньше, если правильно помню, была возможность задать флаг, возвратить ближайшее или -1 в случае неудачи.
Огромное спасибо! действительно глупейшая ошибка от замыленного глаза.... спасибо спасибо что ткнули носом....
3. Если объявлен статический массив, то зачем ему ArrayResize с тем-же размером?
И самое главное, всё это мартышкин труд. потому, что Следовательно любое значение первого массива будет найдено во втором. Пусть не совсем оно, но довольствуйся тем что есть.
Очень жаль что так испоганили язык. Раньше, если правильно помню, была возможность задать флаг, возвратить ближайшее или -1 в случае неудачи.
А вот как быть с мартышкиным трудом?
действительно нужна функция поиска элемента в массиве и неужели ее тоже писать самому?
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Сравнение массивов, сломал голову с OUT OF RANGE
Alexey Viktorov, 2017.02.14 13:22
1. Выделенная строка должна быть так...for (int i=0; i < ArraySize(Array1); i++)
2. Сортировка первого массива необязательна.3. Если объявлен статический массив, то зачем ему ArrayResize с тем-же размером?
И самое главное, всё это мартышкин труд. потому, что Следовательно любое значение первого массива будет найдено во втором. Пусть не совсем оно, но довольствуйся тем что есть.
Очень жаль что так испоганили язык. Раньше, если правильно помню, была возможность задать флаг, возвратить ближайшее или -1 в случае неудачи.
действительно нужна функция поиска элемента в массиве и неужели ее тоже писать самому?
Александр Иванчук:
Огромное спасибо! действительно глупейшая ошибка от замыленного глаза.... спасибо спасибо что ткнули носом....
А вот как быть с мартышкиным трудом?
действительно нужна функция поиска элемента в массиве и неужели ее тоже писать самому?
Попробуй поставить ещё сравнение на точное равенство. Если искомое значение и найденное не равны, то пишем в третий массив.
Огромное спасибо! действительно глупейшая ошибка от замыленного глаза.... спасибо спасибо что ткнули носом....
действительно нужна функция поиска элемента в массиве и неужели ее тоже писать самому?
Эммм туплю (это мой первый код на mql), проверил справочник молчит он насчет точного равенства.
Александр Иванчук:
Эммм туплю (это мой первый код на mql), проверил справочник молчит он насчет точного равенства.
==
Эммм туплю (это мой первый код на mql), проверил справочник молчит он насчет точного равенства.
Александр Иванчук:
Эммм туплю (это мой первый код на mql), проверил справочник молчит он насчет точного равенства.
Точное равенство это знак ==Эммм туплю (это мой первый код на mql), проверил справочник молчит он насчет точного равенства.
Вместо этого
if (ArrayBsearch(Array2,Array1[i],WHOLE_ARRAY,0,MODE_ASCEND)==0) // если 0 то не нашли
{
ArrayDest[j]=Array1[i];
j++;
}
Вот это{
ArrayDest[j]=Array1[i];
j++;
}
if(Array2[ArrayBsearch(Array2, Array1[i], WHOLE_ARRAY, 0, MODE_ASCEND)] != Array1[i]) // если найденное значение не равно искомому
{
ArrayDest[j]=Array1[i];
j++;
}
{
ArrayDest[j]=Array1[i];
j++;
}
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Доброго времени суток (всех с праздником).
Требуется решить следующую задачу
Есть два массива 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);
}