Случайное число

 
Дайте пожалуйста кодом для МТ4 генерацию случайного числа от 1 до 55. Только пожалуйста не отправляйте меня в справку, рандомайзер знаю, но немного забыл. Спасибо за приветствие)
 
Volodymyr Zubov:
Дайте пожалуйста кодом для МТ4 генерацию случайного числа от 1 до 55. Только пожалуйста не отправляйте меня в справку, рандомайзер знаю, но немного забыл. Спасибо за приветствие)

Что такое остаток от деления знаете? 641256916267 % 55 = 22 Чтобы исключить 0 надо прибавить 1 и всё.

 
Alexey Viktorov #:

Что такое остаток от деления знаете? 641256916267 % 55 = 22 Чтобы исключить 0 надо прибавить 1 и всё.

Дайте код для МТ4 пожалуйста, я теории не прошу, просто очень устал, но нужно.

 
Дайте код плиз, сейчас найду свой в архиве. Так 500 мастеров набегут править.
 

int randBetween(int a,int b) {
  int d=b-a;
  int limit=SHORT_MAX - SHORT_MAX%d;
  int r=0;
  while((r=MathRand())>limit)
     ;
  return a+(r%d);
}

по памяти примерно так..добавить проверку аргументов и протестить насчёт > или >=

 
Алексей, наверное, имел ввиду примерно следующее:
int r = MathRand() % 55 + 1;

или в виде функции

int randBetween(int a, int b) {
  return MathRand() % (b - a + 1) + a;
}
 
Volodymyr Zubov #:

Дайте код для МТ4 пожалуйста, я теории не прошу, просто очень устал, но нужно.

Я и дал код. Только заменил получение случайного числа на конкретное число.

int a = rand()%55+1;

переменная "а" будет равна от 1 до 55 включительно.

Только перед этим, в OnInit() желательно поставить генератор случайных чисел в начальное состояние.

srand(GetTickCount());
 
Пока нет возможности протестировать, как будет возможность - то сразу! Спасибо большое за наработки, но если ещё есть варианты то пожалуйста выкладывайте.
 
Maxim Kuznetsov #:

int randBetween(int a,int b) {
  int d=b-a;
  int limit=SHORT_MAX - SHORT_MAX%d;
  int r=0;
  while((r=MathRand())>limit)
     ;
  return a+(r%d);
}

по памяти примерно так..добавить проверку аргументов и протестить насчёт > или >=


Поправить надо 1 строчку:

int d = b - a + 1; 
 
Volodymyr Zubov #:
Пока нет возможности протестировать, как будет возможность - то сразу! Спасибо большое за наработки, но если ещё есть варианты то пожалуйста выкладывайте.

не помню кто автор кода

   void OnStart()
     {
      int list[]= {1,5,7};
      Print(RndList(list));
     }
   template<typename T>
   T RndList(T &list[])
     {return list[MathRand()%ArraySize(list)];} //возвращает один из трех значений list
 
   int random=MathRand()%4; //от 0-3 (+1 от 1-4)
//------------------------------------------------------
   ENUM_ORDER_TYPE GetRandomType()
     {
      int random=(MathRand()%4)+1; //+1 чтобы 0 не было
      //---
      switch(t)
        {
         case(0):
            return(ORDER_TYPE_BUY_LIMIT);
         case(1):
            return(ORDER_TYPE_SELL_LIMIT);
         case(2):
            return(ORDER_TYPE_BUY_STOP);
         case(3):
            return(ORDER_TYPE_SELL_STOP);
        }
      //--- недопустимое значение
      return(WRONG_VALUE);
     }