Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 144

 
Vitaly Muzichenko:

Ya estoy confundido)

Tienes una matriz:

Array[] = {1, 2, 3, 1, 2, 1, 2, 2, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3};

¿Qué debería devolver finalmente la función y por qué? El número de aciertos para cada número, o un número máximo específico, o ... ¿He escrito algo, pero debe estar mal, y mal?

No sé cómo explicar...

Vemos una matriz:1, 2, 3, 1, 2, 1, 2, 2, 1, 1, 3, 3, 3, 3, 3, 3, 3,
Marcamos los números idénticos con el mismo color (si sólo hay un número, no hay duplicado para él, no es necesario):
1, 2, 3, 1, 2 , 1 , 2, 2, 1, 1, 3, 3 , 3, 3 , 3 , 3, 3 , 3, 3, 3,3
Cuenta el número de números con diferentes colores: 3 - este es el resultado.

 
fxsaber:
Has comprobado el código antiguo. Vuelve a comprobarlo.
Aquí... Soy un poco raro... ...y luego lo obtuve de otro lugar.
 
Artyom Trishkin:

No sé cómo explicar...

Vemos una matriz:1, 2, 3, 1, 2, 1, 2, 2, 1, 1, 3, 3, 3, 3, 3, 3, 3,
Marcamos los números idénticos con el mismo color (si sólo hay un número, no hay doble para él - no es necesario):
1, 2, 3, 1, 2, 1, 2, 2, 1, 1, 3 , 3 , 3, 3 , 3 , 3, 3 , 3, 3, 3,3
Cuenta el número de números con diferentes colores: 3 - este es el resultado.

Tal vez)

void OnTick()
{
int Arr[]={1, 2, 3, 1, 2, 1, 2, 2, 1, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3};
Comment( GetM(Arr) );
}

int GetM(int &Mas[])
{
int MasTemp[][2]; // Временный массив
int c=0,t=0;

ArraySort(Mas);
int ArrSize= ArraySize(Mas);
  for(int i=0; i<ArrSize; i++) {
    for(int x=i; x<ArrSize; x++) {
     if(Mas[i]==Mas[ArrayMinimum(Mas,WHOLE_ARRAY,x)]) {
      c++;
     }
    }
  
   if(c>0) {
     t++;
     ArrayResize(MasTemp,t);
     MasTemp[t-1][0]= c;
     MasTemp[t-1][1]= Mas[i];
   }
   c=0;
  }
  
  int ArrRange=ArrayRange(MasTemp,0);
  if(ArrRange>0) {
    ArraySort(MasTemp);
  // Comment("Цифра: ",MasTemp[ArrRange-1][1],", Количество: ",MasTemp[ArrRange-1][0]);
    return( MasTemp[ArrRange-1][1] );
  }
  
  return(-1);
}
 
Artyom Trishkin:
Hay ... Soy un bicho raro... Pensé que venía de allí, pero vino de otro lugar.
Generalizado
// Возвращает количество различных элементов массива, которых не меньше Repeat
template <typename T>
int Strange( const T &InArray[], const int Repeat = 2 )
{
  int Res = 0;  
  
  T Array[];
  
  const int Size = ArraySize(InArray);
  
  if ((ArrayCopy(Array, InArray) == Size) && ArraySort(Array))
  {    
    int Tmp = 1;
    
    for (int i = 1; i < Size; i++, Tmp++)
      if (Array[i - 1] != Array[i]) // если будут структуры, то есть более универсальная запись
      {
        if (Tmp >= Repeat)
          Res++;
        
        Tmp = 0;
      }
      
    if (Tmp >= Repeat)    
      Res++;
  }

  return(Res);
}

void OnStart()
{
  int Array[] = {1, 2, 2, 3, 3, 3, 4, 4, 4, 4};
  
  for (int i = 1; i <= 4; i++)
    Print(Strange(Array, i));
}
 
fxsaber:
Resumido
///
Gracias. Todo súper - Pasaría un día...
 
Vitaly Muzichenko:

Tal vez)


Gracias, sigue siendo más fácil sin el volteo de arrays ;)
 
fxsaber:
Resumido por
// если будут структуры, то есть более универсальная запись
Eso sí que es interesante.
 
Artyom Trishkin:
Esto es interesante
      if (_R(Array[i - 1]) != Array[i]) // TypeToBytes.mqh

Con esta notación, un Array no sólo puede ser un tipo numérico, sino cualquier estructura simple.

Otra cosa es que ArraySort para estructuras, por supuesto, no funciona.

 
fxsaber:
      if (_R(Array[i - 1]) != Array[i]) // TypeToBytes.mqh

Con esta notación, un Array no sólo puede ser un tipo numérico, sino cualquier estructura simple.

Otra cosa es que ArraySort para estructuras, por supuesto, no funciona.

Así es... Pero las estructuras suelen ser complejas. Y todavía hay que clasificarlos...
 
Artyom Trishkin:
Exactamente... Pero las estructuras suelen ser muy complejas. Y todavía hay que clasificarlos...

Los complejos contienen objetos (cadenas, por ejemplo).

MqlTick es una estructura simple.

MqlTradeRequest - complejo.

ArraySort se puede escribir fácilmente para estructuras simples.

Razón de la queja: