Скачать MetaTrader 5

Алгоритм перемешивания элементов массива на mql4

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Кирилл
89
Кирилл  
Кто знает, подкиньте, пожалуйста, вариант реализации алгоритма перемешивания элементов одномерного массива, реализованный на mql4.
Murad Ismayilov
1810
Murad Ismayilov  

Алгоритм очень простой - пробегаемся по всем элементам от первого до последнего и меняем текущий элемент со случайным элементом местами. Типа так:

fot (int i = 0; i < len; i++) { temp = a[i]; ri = rand(len); a[i] = a[ri]; a[ri] = temp; }

Или тебе именно на mql4 записать?

Кирилл
89
Кирилл  
Лучше на mql, если не трудно=)
Murad Ismayilov
1810
Murad Ismayilov  

Типа так:

   double a[10]; // Сам одномерный массив; длина любая
   MathSrand(TimeLocal());
   int len = ArrayRange(a, 1); 
   for (int index = 0; index < len; index++)
   {
      double temp = a[index];
      int rnd = ((double)MathRand() * (double)len) / 32768.0;
      a[index] = a[rnd];
      a[rnd] = temp;
   }
Кирилл
89
Кирилл  
Огроооомное спасибо!!!!
Murad Ismayilov
1810
Murad Ismayilov  
LenIFCHIK:
Огроооомное спасибо!!!!


Последнюю строку поправил, должно быть

a[rnd] = temp;
Sceptic Philozoff
Модератор
17843
Sceptic Philozoff  

Принудительного преобразования типов в double в таком виде в MQL4 не помню (хотя ошибки компиляции нет).

Но оно уже и не обязательно, т.к. частное 32768.0 - уже double. Так что обе (double) в скобках можно убрать, деление все равно будет нецелочисленным.

Андрей
1890
Андрей  
Блин. Ну к инту же- а потом делением по остатку %.
Mathemat:

Но оно уже и не обязательно, т.к. частное 32768.0 - уже double. Так что обе (double) в скобках можно убрать, деление все равно будет нецелочисленным.

Там какая-то недокументированная особенность была- для "трейдеров, которые не программисты" )), типа || / &&, сильно удивительная- не помню какая. Поэтому лучше писать как wmlab.
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий