Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 143
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Запустил, как есть
int Strange( const T &InArray[] )
{
int Res = 1;
T Array[];
const int Size = ArraySize(InArray);
if ((ArrayCopy(Array, InArray) == Size) && ArraySort(Array))
{
int Tmp = 1;
ArrayPrint(Array);
for (int i = 1; i < Size; i++)
{
if (Array[i - 1] != Array[i])
{
if (Tmp > Res)
Res = Tmp;
Tmp = 0;
}
Tmp++;
}
}
return(Res);
}
void OnStart()
{
int Array[] = {1, 2, 3, 1, 2, 1, 2, 2};
Print(Strange(Array));
}
Вот что он выдаёт:
2017.03.07 14:42:44.141 4
Верхняя строка - отсортированный входной массив, нижняя строка - результат работы функции Strange().
Если посмотреть внимательно на отсортированный массив, и пометить цветом совпадения, а потом подсчитать количество чисел больше одного с одинаковым цветом, то получим результат:
1 1 1 2 2 2 2 3 - итого, вернуть нужно было 2
А ф-ция вернула 4. Хотя - тоже прогресс - у меня она всегда 1 возвращала - как так - не разбирался.
1 1 1 2 2 2 2 3 - итого, вернуть нужно было 2
А ф-ция вернула 4. Хотя - тоже прогресс - у меня она всегда 1 возвращала - как так - не разбирался.
int Strange( const T &InArray[] )
{
int Res = 0;
T Array[];
const int Size = ArraySize(InArray);
if ((ArrayCopy(Array, InArray) == Size) && ArraySort(Array))
{
int Max = 0;
int Tmp = 0;
ArrayPrint(Array);
for (int i = 0; i < Size - 1; i++)
{
Tmp++;
if ((Array[i] != Array[i + 1]) || (i == Size - 2))
{
if (Tmp > Max)
{
Max = Tmp;
Res = Array[i];
}
Tmp = 0;
}
}
}
return(Res);
}
void OnStart()
{
int Array[] = {1, 2, 3, 1, 2, 1, 2, 2, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3};
Print(Strange(Array));
}
Так вернуть нужно количество или самый частый элемент?
Количество разных дублей.
А ваша ф-ция что возвращает? Наибольшее число совпадений? Тоже полезная вещчь...
Количество разных дублей.
Странно формулируете. "0, 0, 1, 1, 2, 2" - 3?
А ваша ф-ция что возвращает? Наибольшее число совпадений?
Странно формулируете. "0, 0, 1, 1, 2, 2" - 3?
Да - три совпадения трёх разных цифр.
int Strange( const T &InArray[] )
{
int Res = 0;
T Array[];
const int Size = ArraySize(InArray);
if ((ArrayCopy(Array, InArray) == Size) && ArraySort(Array))
{
int Tmp = 1;
ArrayPrint(Array);
for (int i = 1; i < Size; i++, Tmp++)
if (Array[i - 1] != Array[i])
{
if (Tmp > 1)
Res++;
Tmp = 0;
}
if (Tmp > 1)
Res++;
}
return(Res);
}
void OnStart()
{
int Array[] = {1, 2, 3, 1, 2, 1, 2, 2, 3, 4, 4};
Print(Strange(Array));
}
Так вернуть нужно количество или самый частый элемент? Если второе, то
int Strange( const T &InArray[] )
{
int Res = 0;
T Array[];
const int Size = ArraySize(InArray);
if ((ArrayCopy(Array, InArray) == Size) && ArraySort(Array))
{
int Max = 0;
int Tmp = 0;
ArrayPrint(Array);
for (int i = 0; i < Size - 1; i++)
{
Tmp++;
if ((Array[i] != Array[i + 1]) || (i == Size - 2))
{
if (Tmp > Max)
{
Max = Tmp;
Res = Array[i];
}
Tmp = 0;
}
}
}
return(Res);
}
void OnStart()
{
int Array[] = {1, 2, 3, 1, 2, 1, 2, 2, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3};
Print(Strange(Array));
}
Классно. Но немного иначе - это же шаблонная ф-ция, так:
T Strange( const T &InArray[] )
{
T Res = 0;
T Array[];
const int Size = ArraySize(InArray);
if ((ArrayCopy(Array, InArray) == Size) && ArraySort(Array))
{
int Max = 0;
int Tmp = 0;
ArrayPrint(Array);
for (int i = 0; i < Size - 1; i++)
{
Tmp++;
if ((Array[i] != Array[i + 1]) || (i == Size - 2))
{
if (Tmp > Max)
{
Max = Tmp;
Res = Array[i];
}
Tmp = 0;
}
}
}
return(Res);
}
void OnStart()
{
double Array[] = {1, 2, 3, 1, 2, 1, 2, 2, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3};
Print(Strange(Array));
}
int Strange( const T &InArray[] )
{
int Res = 0;
T Array[];
const int Size = ArraySize(InArray);
if ((ArrayCopy(Array, InArray) == Size) && ArraySort(Array))
{
int Tmp = 1;
ArrayPrint(Array);
for (int i = 1; i < Size; i++)
{
if (Array[i - 1] != Array[i])
{
if (Tmp > 1)
Res++;
Tmp = 0;
}
Tmp++;
}
}
return(Res);
}
void OnStart()
{
int Array[] = {1, 2, 3, 1, 2, 1, 2, 2};
Print(Strange(Array));
}
А этот что возвращает?
Если массив сделать иным, то не верно:
int Strange( const T &InArray[] )
{
int Res = 0;
T Array[];
const int Size = ArraySize(InArray);
if ((ArrayCopy(Array, InArray) == Size) && ArraySort(Array))
{
int Tmp = 1;
ArrayPrint(Array);
for (int i = 1; i < Size; i++)
{
if (Array[i - 1] != Array[i])
{
if (Tmp > 1)
Res++;
Tmp = 0;
}
Tmp++;
}
}
return(Res);
}
void OnStart()
{
int Array[] = {1, 2, 3, 1, 2, 1, 2, 2, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3};
Print(Strange(Array));
}
Возвращает:
2017.03.07 15:48:26.985 2
Он точно ищет количество совпадающих чисел в массиве? А то может вы что-то иное сделали, а я искать ошибку буду
Вот Я уже запутался)
У Вас есть массив:
Что в итоге должна вернуть функция и почему? Количество совпадений каждого числа, или конкретное максимальное число, или ... Я что-то написал, но наверное не то, и не так?
Он точно ищет количество совпадающих чисел в массиве? А то может вы что-то иное сделали, а я искать ошибку буду