есть массив a[5]={2,5,3,6,1};
далее советник изменяет размер массива и добавляет новое число.
arrayresize(a,6);
a[6]=8;
первый вопрос:как програмно узнать какое число добавилось в массив?
(я так понимаю что нужно запомнить предыдуший массив и сравнивать его с новым)
и второй вопрос:
если массив уменьшился на одно число, как узнать какого числа не хватает в массиве?
(тоже через сравнение, только с циклами запутался)
помогите, наверняка у кого-то уже есть готовый кусок кода сравнения массива?
- Вопросы от начинающих MQL4 MT4 MetaTrader 4
- Print() и массив
- Помощь в кодировании
dmmikl86:
arrayresize(a,6);
a[6]=8;
Ошибка, а[6] в вашем массиве нет, а[0],a[1], ..., a[5]
ответ первый: массив a[5]={2,5,3,6,1}; это статический массив, а вот массив a[]={2,5,3,6,1}; возможно и будет соответствовать Вашей задаче по изменению размера массива, т.к. он динамический массив.
Figar0:
Ошибка, а[6] в вашем массиве нет, а[0],a[1], ..., a[5]
Ошибка, а[6] в вашем массиве нет, а[0],a[1], ..., a[5]
да вы правы. ошибся.
IgorM:
ответ первый: массив a[5]={2,5,3,6,1}; это статический массив, а вот массив a[]={2,5,3,6,1}; возможно и будет соответствовать Вашей задаче по изменению размера массива, т.к. он динамический массив.
ответ первый: массив a[5]={2,5,3,6,1}; это статический массив, а вот массив a[]={2,5,3,6,1}; возможно и будет соответствовать Вашей задаче по изменению размера массива, т.к. он динамический массив.
a[5] - просто хотел показать что в массиве 5 чисел.
как сравнить два массива с 5 и 6 числами, и найти какое число новое появилось или удалилось?
как вариант может при сравнивании старого и нового массива из нового массива удалять числа которые есть в старом. тогда в конце останется только одно число, которое и есть "добавленное".
dmmikl86:
первый вопрос:как програмно узнать какое число добавилось в массив?
(я так понимаю что нужно запомнить предыдуший массив и сравнивать его с новым)
Добавляется последней элемент массива, вот ваше число а[5]
dmmikl86:
и второй вопрос:
если массив уменьшился на одно число, как узнать какого числа не хватает в массиве?
(тоже через сравнение, только с циклами запутался)
Что значит уменьшился на одно число? Уменьшился на один элемент? Ваше число снова a[5], запомните перед уменьшением размера массива.
****
Не очень как-то понятно что вы хотите, возможно пример с описанием задачи шибко утрирован.
не знаю как в mql, но обычно все компиляторы перераспределяют память при изменении размера массива, поэтом у в документации указывают что данные в измененном массиве могут быть утеряны. Думаю Вам проще в новый массив(в том котором изменили размер) скопировать старые данные и затем добавить/удалить нужный элемент
решил проблему так:
for(i=ArraySize(ticket)-1;i>=0;i--) { Alert(i+" = "+ticket[i]); } ArrayCopy(old_ticket,ticket); // копируем c ticket в old_ticket /* old_ticket=7 ticket=10*/ ArrayResize(ticket,10); // изменяем размер ArraySort(ticket,WHOLE_ARRAY,0,MODE_DESCEND); // сортируем по убыванию ticket[ArraySize(ticket)-1]=new_index; // добавляем число в новый элемент for(i=ArraySize(ticket)-1;i>=0;i--) // цикл по массивам при совпадении изменяем значение элемента на -1 { for(z=ArraySize(old_ticket)-1;z>=0;z--) { if(ticket[i]==old_ticket[z]) { ticket[i]=-1; Alert("совпадение ticket["+i+"] = old_ticket["+z+"] ticket["+i+"] = -1;"); } } } Alert("-----"); for(i=ArraySize(ticket)-1;i>=0;i--) { if(ticket[i]!=-1) { Alert("новое число в массиве!!! ticket["+i+"]="+ticket[i]); } }
dmmikl86:
есть массив a[5]={2,5,3,6,1};
далее советник изменяет размер массива и добавляет новое число.
arrayresize(a,6);
a[6]=8;
первый вопрос:как програмно узнать какое число добавилось в массив?
(я так понимаю что нужно запомнить предыдуший массив и сравнивать его с новым)
и второй вопрос:
если массив уменьшился на одно число, как узнать какого числа не хватает в массиве?
(тоже через сравнение, только с циклами запутался)
помогите, наверняка у кого-то уже есть готовый кусок кода сравнения массива?
Не мучились Вы бы с ArrayResizaми. Объявите заранее массив с запасом. И посмотрите https://www.mql5.com/ru/forum/137963 занимательное исследование по поводу Resize.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь