Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Вся активность участников MQL5.community на одной странице!
Кирилл
91
Кирилл 2012.03.12 04:29 
Кто знает, подкиньте, пожалуйста, вариант реализации алгоритма перемешивания элементов одномерного массива, реализованный на mql4.
Murad Ismayilov
1813
Murad Ismayilov 2012.03.12 04:46  

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

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

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

Кирилл
91
Кирилл 2012.03.12 04:52  
Лучше на mql, если не трудно=)
Murad Ismayilov
1813
Murad Ismayilov 2012.03.12 05:08  

Типа так:

   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;
   }
Кирилл
91
Кирилл 2012.03.12 05:10  
Огроооомное спасибо!!!!
Murad Ismayilov
1813
Murad Ismayilov 2012.03.12 05:12  
LenIFCHIK:
Огроооомное спасибо!!!!


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

a[rnd] = temp;
Sceptic Philozoff
Модератор
17848
Sceptic Philozoff 2012.03.12 05:29  

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

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

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

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

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