Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Вся активность участников MQL5.community на одной странице!
Михаил
1025
Михаил 2012.02.24 10:59 
есть массив a[5]={2,5,3,6,1};

далее советник изменяет размер массива и добавляет новое число.

arrayresize(a,6);
a[6]=8;

первый вопрос:как програмно узнать какое число добавилось в массив?
(я так понимаю что нужно запомнить предыдуший массив и сравнивать его с новым)

и второй вопрос:
если массив уменьшился на одно число, как узнать какого числа не хватает в массиве?
(тоже через сравнение, только с циклами запутался)

помогите, наверняка у кого-то уже есть готовый кусок кода сравнения массива?
Левитин Сергей В.
5155
Левитин Сергей В. 2012.02.24 11:02  
dmmikl86:

arrayresize(a,6);
a[6]=8;


Ошибка, а[6] в вашем массиве нет, а[0],a[1], ..., a[5]
IgorM М
4801
IgorM М 2012.02.24 11:03  
ответ первый: массив a[5]={2,5,3,6,1}; это статический массив, а вот массив a[]={2,5,3,6,1}; возможно и будет соответствовать Вашей задаче по изменению размера массива, т.к. он динамический массив.
Михаил
1025
Михаил 2012.02.24 11:10  
Figar0:

Ошибка, а[6] в вашем массиве нет, а[0],a[1], ..., a[5]

да вы правы. ошибся.
IgorM:
ответ первый: массив a[5]={2,5,3,6,1}; это статический массив, а вот массив a[]={2,5,3,6,1}; возможно и будет соответствовать Вашей задаче по изменению размера массива, т.к. он динамический массив.

a[5] - просто хотел показать что в массиве 5 чисел.

как сравнить два массива с 5 и 6 числами, и найти какое число новое появилось или удалилось?

Михаил
1025
Михаил 2012.02.24 11:33  

как вариант может при сравнивании старого и нового массива из нового массива удалять числа которые есть в старом. тогда в конце останется только одно число, которое и есть "добавленное".

Левитин Сергей В.
5155
Левитин Сергей В. 2012.02.24 11:41  
dmmikl86:

первый вопрос:как програмно узнать какое число добавилось в массив?
(я так понимаю что нужно запомнить предыдуший массив и сравнивать его с новым)


Добавляется последней элемент массива, вот ваше число а[5]

dmmikl86:

и второй вопрос:
если массив уменьшился на одно число, как узнать какого числа не хватает в массиве?
(тоже через сравнение, только с циклами запутался)


Что значит уменьшился на одно число? Уменьшился на один элемент? Ваше число снова a[5], запомните перед уменьшением размера массива.

****

Не очень как-то понятно что вы хотите, возможно пример с описанием задачи шибко утрирован.

IgorM М
4801
IgorM М 2012.02.24 11:43  
не знаю как в mql, но обычно все компиляторы перераспределяют память при изменении размера массива, поэтом у в документации указывают что данные в измененном массиве могут быть утеряны. Думаю Вам проще в новый массив(в том котором изменили размер) скопировать старые данные и затем добавить/удалить нужный элемент
Михаил
1025
Михаил 2012.02.24 12:32  

решил проблему так:

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]);
   }
}

Mikhail Kozhemyako
1180
Mikhail Kozhemyako 2012.02.24 14:02  
dmmikl86:
есть массив a[5]={2,5,3,6,1};

далее советник изменяет размер массива и добавляет новое число.

arrayresize(a,6);
a[6]=8;

первый вопрос:как програмно узнать какое число добавилось в массив?
(я так понимаю что нужно запомнить предыдуший массив и сравнивать его с новым)

и второй вопрос:
если массив уменьшился на одно число, как узнать какого числа не хватает в массиве?
(тоже через сравнение, только с циклами запутался)

помогите, наверняка у кого-то уже есть готовый кусок кода сравнения массива?

Не мучились Вы бы с ArrayResizaми. Объявите заранее массив с запасом. И посмотрите https://www.mql5.com/ru/forum/137963 занимательное исследование по поводу Resize.
/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий