Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1251

 

может кто подсказать схему как из примерно такого массива 

int array[15]= {0,0,5,5,5,1,9,9,9,0,2,2,1,0,0};

получить цифры которых в массиве подряд 3 и более, т.е. подходят значение "5" и "9"

нужно получить типа

value1=9;

value2=5;

или массив value[]={9,5};

второй день ломаю голову с while do не могу сообразить схему

 
Fast235:

может кто подсказать схему как из примерно такого массива 

получить цифры которых в массиве подряд 3 и более, т.е. подходят значение "5" и "9"

нужно получить типа

value1=9;

value2=5;

или массив value[]={9,5};

второй день ломаю голову с while do не могу сообразить схему

набросал, но в лоб решил,  в общем работает, но не понравилось мое решение:

//+------------------------------------------------------------------+
void OnStart()
{
   int array[15] = {0, 0, 5, 5, 5, 1, 9, 9, 9, 0, 2, 2, 1, 0, 0};
   int arrrepeat[];
   getRepeatNumbers(array, arrrepeat);
   ArrayPrint(arrrepeat);
}
//+------------------------------------------------------------------+
void getRepeatNumbers(const int &inArr[], int &result[])
{
   ArrayFree(result);
   for(int i = 0; i < ArraySize(inArr) - 1; i++)
   {
      if(getRepeatCount(inArr, i) > 1)
      {
         int sz = ArraySize(result);
         ArrayResize(result, sz + 1);
         result[sz] = inArr[i];
      }
   }
}
//+------------------------------------------------------------------+
int getRepeatCount(const int &arr[], const int pos)
{
   int result = 0;
   for(int i = pos + 1; i < ArraySize(arr) - 1 && arr[i] == arr[pos]; i++)
   {
      result++;
   }
   return(result);
}
//+------------------------------------------------------------------+

2020.09.10 11:51:26.323 tst (EURUSD,M5) 5 9

 
Igor Makanu:

набросал, но в лоб решил,  в общем работает, но не понравилось мое решение:

2020.09.10 11:51:26.323 tst (EURUSD,M5) 5 9

спасибо, слишком много действий

хочу все таки в цикле найти решение, щас буду с оператором continue; и break; пробовать

это нужно брать из индикаторного буфера на каждом новом баре prev_calculate-100 примерно

 
Fast235:

спасибо, слишком много действий

хочу все таки в цикле найти решение, щас буду с оператором continue; и break; пробовать

это нужно брать из индикаторного буфера на каждом новом баре prev_calculate-100 примерно

не громоздко, не понравилось т.к. не искал других вариантов - всегда так делаю

внесите в тело первой функции цикл из второй функции.... будет меньше телодвижений


хоть с  break хоть без него - все равно эта задача будет решаться в 2 цикла.... но это не точно! - решайте ;)

 
Igor Makanu:

не громоздко, не понравилось т.к. не искал других вариантов - всегда так делаю

внесите в тело первой функции цикл из второй функции.... будет меньше телодвижений


хоть с  break хоть без него - все равно эта задача будет решаться в 2 цикла.... но это не точно! - решайте ;)

попробую поковыряться, напишу если получится

 
Fast235:

попробую поковыряться, напишу если получится

В одном проходе это все решается)))
 
Igor Makanu:

не громоздко, не понравилось т.к. не искал других вариантов - всегда так делаю

внесите в тело первой функции цикл из второй функции.... будет меньше телодвижений


хоть с  break хоть без него - все равно эта задача будет решаться в 2 цикла.... но это не точно! - решайте ;)

ошибка, если в очереди будет четыре "9", а не 3, результат 

5 9 9 2


 
Fast235:

ошибка, если в очереди будет четыре "9", а не 3, результат 

5 9 9 2


я ж говорил, что мое решение мне не понравилось (((

писать еще раз лень

погуглите "массив найти повторы" - думаю что-нибудь найдется

 
Fast235:

может кто подсказать схему как из примерно такого массива 

получить цифры которых в массиве подряд 3 и более, т.е. подходят значение "5" и "9"

нужно получить типа

value1=9;

value2=5;

или массив value[]={9,5};

второй день ломаю голову с while do не могу сообразить схему

int qty[10]; // счётчики по цифрам

int total; // всего элементов в исходном массиве arr[]

int code=arr[0]; // текущая цифра

int count=1; // кол-во повторов

for(int i=1;i<total;i++) {

if (arr[i]!=code) { if (count>qty[code]) qty[code]=count;  code=arr[i]; count=1;}

        else count++;

}

if (count>qty[code]) qty[code]=count; 

/// в массиве qty - требуемое

доп. проверки про допустимость элементов arr[] (что они цифры) добавить по вкусу

 

Всем доброго дня!
Тестирую алгоритм в тестере МТ-4 при помощи mql4. Мне нужно что бы функция Print() выводила в журнале цену Bid с 5 (пятью) знаками после запятой. А она почему то выводит только 4(четыре) знака. Для добавления пятого знака я использовал функцию NormalizeDouble(Bid,Digits) .Но результат - тот же. 

Подскажите пожалуйста как исправить мою ошибку, если она есть.
Вот мой код.

void OnTick()
{
Print("=======Bid =======  ",NormalizeDouble(Bid,Digits) );

}


В то же время если напечатать при помощи  Print() цену открытия, и закрытия ордера( по СЛ и ТР) , то  Print() печатает цену с 5(пятью) знаками , даже без помощи функции  NormalizeDouble() , и без помощи каких либо других функций. 
Всем спасибо за помощь.

Причина обращения: